ahmed.o.mohamed

اختبر قدراتك في C/CPP - الحلقة الثالثة, الجزء الثالث

5 ردود في هذا الموضوع

السلام عليكم

الحلقة الأولى.

الحلقة الثانية - الجزء الأول.

الحلقة الثانية - الجزء الثاني.

الحلقة الثانية - الجزء الثالث.

الحلقة الثانية - الجزء الرابع.

الحلقة الثانية - الجزء الخامس.

الحلقة الثانية - الجزء السادس و الأخير.

الحلقة الثالثة - الجزء الأول.

الحلقة الثالثة - الجزء الثاني.

مرحبا بكم إخوتي الكرام في الجزء الثالث من الحلقة الثالثة من سلسلة اختبر قدراتك, قمتُ بتقسيم الحلقة الثالثة إلى عدة أجزاء, مُرتبة حسب الصعوبة. أجزاء هذه الحلقة ستكون خاصة بالتعامل مع الملفات.

سؤالنا هذه المرة عبارة عن عكس السؤال السابق.

الإختبار الثالث (الجزء الثالث) :

اكتب برنامج يسمح بفك تشفير الــ Morse code التي يُدخلها المستخدم و يُخزن الناتج في ملف نصي.

لفك تشفير الرسائل, استخدم المعلومات المُوضحة في السؤال السابق.

مثال :

post-219439-031300200 1347123129_thumb.p

سأضع حل السؤال بعد إنتهاء عرض المحاولات.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هذه محاولتي :

#include<cstdio>
#include<cstring>
char Morse[37][7]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---",
"-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",
".--","-..-","-.--","--..",".-.-.-","-----",".----","..---","...--",
"....-",".....","-....","--...","---..","----."};
char test(char* c)
{
for(int i=0;i<37;i++)
if(!strcmp(c,Morse[i]))
{
if(i<26)return 'a'+i;
else if(i>26)return i-27+'0';
else if(i==26)return '.';
else return '?';
}
}
int main()
{
char string[7]={0};
FILE*out=fopen("decode.txt","w");
for(int i=0;i<9;i++)
{
scanf("%s",string);
fputc(test(string),out);
}
return 0;
}

هذه نسخة كونسول ... بدون ملفات ..

#include<cstdio>
#include<cstring>
char Morse[37][7]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---",
"-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",
".--","-..-","-.--","--..",".-.-.-","-----",".----","..---","...--",
"....-",".....","-....","--...","---..","----."};
char test(char* c)
{
for(int i=0;i<37;i++)
if(!strcmp(c,Morse[i]))
{
if(i<26)return 'a'+i;
else if(i>26)return i-27+'0';
else if(i==26)return '.';
else return '?';
}
}
int main()
{
char string[7]={0};
for(int i=0;i<9;i++)
{
scanf("%s",string);
putchar(test(string));
}
return 0;
}

يمكن تجريبها على المثال :

-... --- -.	.---  --- ..- .-.	.-.-.-   .-.-.

ما هو محدد الدخل ؟ يعني متى ينتهي الدخل ..

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>

int main() {
char c;
int index, i = 0;
char input[1024], str[7], mcode[38][7] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".-.-.-", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "??????"};
FILE *F = fopen("msg.txt", "wb");
printf("type your lettre: ");
gets(input);
while(i<strlen(input)){
if(input[i++]==' ') continue;
i--;
index = 0;
while(input[i]!=' '&&input[i++]!='\0')
str[index++] = input[i-1];
str[index]='\0';
index = 0;
while(index<39&&strcmp(mcode[index++], str));
if(index>38) fprintf(F, "?");
else if(index-1<26) fprintf(F, "%c", index-1 + 'a');
else if(index-1==26) fprintf(F, ".");
else fprintf(F, "%c", index-1 + '0');
}
fclose(F);
return 0;
}

-... --- -.     .---  --- ..- .-.       .-.-.-   .-.-.
bonjour.?

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

محاولتي :

#include <stdio.h>
#include <string.h>
#define NL 37
#define LG 127

int main() {

struct code {
char lettre;
char * morse;
};
struct code table[NL] = {'A', ".-", 'B', "-...", 'C', "-.-.", 'D', "-..",
'E', ".", 'F', "..-.", 'G', "--.", 'H', "....", 'I', "..", 'J', ".---", 'K',
"-.-", 'L', ".-..", 'M', "--", 'N', "-.", 'O', "---", 'P', ".--.", 'Q',
"--.-", 'R', ".-.", 'S', "...", 'T', "-", 'U', "..-", 'V', "...-", 'W', ".--",
'X', "-..-", 'Y', "-.--", 'Z', "--..", '.', ".-.-.-", '0', "-----", '1',
".----", '2', "..---", '3', "...--", '4', "....-", '5', ".....", '6', "-....",
'7', "--...", '8', "---..", '9', "----."};
char ligne[LG + 1];
char code[7];
int i, j;
printf("donnez votre message (1 ligne maxi) : \n");
gets(ligne);
printf("\n\n voici la traduction de votre message\n");

i = 0;
while (i < strlen(ligne)) {
while (ligne[i] == ' ') i++;
if (i < strlen(ligne)) {
sscanf(&ligne[i], "%6s", code);
i += strlen(code);
j = 0;
while (stricmp(code, table[j].morse) && j++<NL - 1);
if (j < NL) printf("%2c", table[j].lettre);
else printf(" ?");
}
}
}

جربت الكود على إسمي :D

post-219439-038836500 1347139962_thumb.p

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تم منح النقاط للمشاركات المفيدة و حذف الردود الغير مفيدة, حفاظا على تنسيق الموضوع.

يُغلق.

أراكم في الجزء الرابع من الحلقة الثالثة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .