الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

مغلق
بدأه Snack3r في 8 سبتمبر 2012 · 4 رد · 681 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

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

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

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

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

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

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

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

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

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

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

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

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

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

مثال :

post-219439-031300200 1347123129_thumb.p

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

المرفقات
testCode.png
1
#2

هذه محاولتي :

#include<cstdio>
#include<cstring>
char Morse[37][7]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---",
"-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",
".--","-..-","-.--","--..",".-.-.-","-----",".----","..---","...--",
"....-",".....","-....","--...","---..","----."};
char test(char* c)
{
for(int i=0;i<37;i++)
if(!strcmp(c,Morse))
{
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))
{
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 في 8 سبتمبر 2012 في 20:48

#3
#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!=' '&&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.?

[سبحان الله و بحمده, سبحان الله العظيم]

#4

محاولتي :

#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++;
        if (i < strlen(ligne)) {
            sscanf(&ligne, "%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
المرفقات
testCode.png
#5

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

يُغلق.

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

هذا الموضوع مغلق.

مواضيع مشابهة