• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

مومو (momo)

اعضاء
  • عدد المشاركات

    118
  • تاريخ الانضمام

  • تاريخ اخر زياره

السمعه بالموقع

45 عادي

عن مومو (momo)

  • الرتبة
    عضو
  • تاريخ الميلاد 12/23/1992

طرق الإتصال

  • MSN https://www.facebook.com/haichmaych

معلومات الملف الشخصي

  • الجنس ذكر
  • الدولة : المغرب
  • اهتمامات الفيزياء الكيمياء الرياضيات البرمجة تصفح الجرائد الإلكترونية
  1. [ تمت الإجابة ]كيف أتعمّق في C

      وعليكم السلام أخي ..   أنا شخصيا  أعتمد بشكل شبه كلي على هذا الموقع الفرنسي http://www.siteduzero.com/   مع الإستعانة ببعض المواقع الأخرى مثل http://fr.wikibooks.org/wiki/Programmation_C و http://www.ltam.lu/cours-c/prg-c_c.htm ...   وبالتوفيق♥
  2. اسأل ونحن نجيبك

    وعليكم السلام أخي خالد قبل كل شيء نبارك لك هذا المجهود الرائع لتنشيط هذا القسم و إحياءه من جديد هذه محاولتي بدون استعمال الكومبيلر a++; ==> 1 b++; ==> 1 X=a++; Y=b++; !!! a+++b++ ==> !!!X+Y ==> !X+Y ==> !1+1 ==1 !!!a+++b++ ? ==> !X+Y ? ==> 1? ==> if(1) if(1) ==> printf("%d", ~(a | b)); ==> printf("%d", ~(1 | 1)); ==> printf("%d", ~1); في الأخير سيصبح الكود هكذا #include<stdio.h> int main() { 1? printf("%d", ~1):puts(""); return 0; } تحياتي
  3. المختصر المفيد في البرمجة بلغة C

    جميل جدا أستاذ أحمد الإصدار الأول للمبتدئين.أتمنى تخصيص الإصدار الثاني للمتوسطين في عالم البرمجة حتى تحقق نوعا من التكامل بين الإصدارين مثلا في الإصدار الثاني لو ضمنت هذه الأشياء سيكون الكتاب أفضل بكثير : 1-العثور على الأخطاء و تصحيحها -رابط- 2-اختيار رقم عشوائي (int أو double) -رابط- 3-Aliasing et pointeurs restreints -رابط- 4-التعامل مع بارامترات الدالة main -رابط- 5-time.h و دوالها 6-buffer stdin,stdout et stderr 7-الماكرو ودوال الماكرو و الماكروx 8-القراءة و الكتابة على الملفات في الوضع الثنائي mode binaire 9-الكتابة المحمية للنصوص و الفرق بين scanf , fgets , sscanf .. 10-الدوال المتعددة الوسائط 11-تصفح المجلدات و الملفات مع dirent.h 12-التعامل مع union 13-static و extern في المتغيرات و الدوال وخصوصا لو تعمقت في شرح 1 و 2 و 3 و 4 سيكون الأمر جميل جدا بالتوفيق أخي و أستاذي أحمد
  4. المختصر المفيد في البرمجة بلغة C

    بارك الله فيك أستاذي أحمد بكل صراحة وشفافية أفضل كتاب شاهدته في تلك المكتبة هو كتابك أحسن بكثير من كتاب *الشامل* ؟ منظم بشكل جيد ويجذب القارئ لقرائته بأي وسيلة كانت وغني بالمعلومات و الديكور إلا أنك في بعض الأحيان لا تتعمق في شرح بعض الدوال فتختصر شيئا ما! في انتظار الإصدار الثاني من الكتاب ؟
  5. أهلا مرة أخرى أخي ريان لا تنسى تضمين errno.h في الكود لتتفادى أخطاء الترجمة ؟؟ استعمال آخر ل errno : استعمال errno بالطريقة السابقة جيد ولكن يلزمك القيام بمقارنة هذا الأخير مع كل defines المعرفة سابقا حتى تتمكن من معرفة طبيعة الخطأ مع العلم أن هناك حوالي 40 قيمة لتقارنها مع errno ! من هنا جاءت فكرة الدالة perror void perror(const char* str) ; هذه الدالة تستقبل كوسيط نصا سيكتب على الشاشة وبعد ذلك تظهر لك نوع الخطأ الذي واجهك في عملية فتح الملف perror("Erreur : "); Erreur : : No such file or directory إذا ظهر لك هذا الخطأ مثلا على الشاشة فهذا يعني أن ال file أو ال repertoire غير موجود وعليك أ تميز بين حالتين: -عندما تمرر نصا للدالة ستظهر ':' مرتين في الشاشة. -عندما لا تمرر نصا فلن تظهر ':' أي مرة في الشاشة وسيطبع الخطأ وفقط. الكود النهائي #include <stdio.h> #include <stdlib.h> #include <errno.h> #define BUFFER_LENGTH 100 void f_error(void); int main(void) { char buffer[BUFFER_LENGTH]=""; FILE *fp1=NULL ,*fp2=NULL; fp1=fopen("HOME/RAYAN/file1.txt","r"); fp2=fopen("HOME/RAYAN/file2.txt","w"); if(!fp1) f_error(); if(!fp2) f_error(); while((fgets(buffer,BUFFER_LENGTH,fp1))) { printf("%s",buffer); fputs(buffer,fp2); } fclose(fp1); fclose(fp2); return EXIT_SUCCESS; } void f_error(void) { perror(""); printf("%d",errno); exit(EXIT_FAILURE); return; } لقد جاء في الكود الثاني الذي كتبته : fp1=fopen("C:\TC\BIN\calculation.cpp","r"); fp2=fopen("C:\TC\BIN\result.out","w"); هذه الكتابة للمسار خاطئة؟ عليك أن تكتب fp1=fopen("C:\\TC\\BIN\\calculation.cpp","r"); fp2=fopen("C:\\TC\\BIN\\result.out","w"); إذا لا حظت جيدا فقد وضعت في كل مرة خطين مائلين '\\' . عندما نضع خطا مائلا واحدا '\' سيعتقد الجهاز أننا بصدد إدراج رمز خاص مثل 'n\' أو 't\' . إذا أردت أن تكتب خطا مائلا في نصك عليك أن تكتب '\' مرتين حتى يفهم الجهاز أن الرمز الذي نريد استعماله هو '\'. بالتوفيق
  6. وعليكم السلام أخي ريان الخطأ موجود هنا في هذين السطرين fp1=fopen("HOME/CALCULATION.cpp","w"); fp2=fopen("HOME/RESULT.out","r"); لقد عكست وضعية ال modeOuverture ؟ كان عليك أن تكتب هكذا fp1=fopen("HOME/CALCULATION.cpp","r"); fp2=fopen("HOME/RESULT.out","w"); لا ينصح باستعمال هذه الدوال (fgets ,fprintf ..) في قراءة أو الكتابة على ملف مكتوب في الوضع الثنائي mode binaire ولا يقرأ أو يفتح بمحرر نص كلاسيكي (Bloc-notes مثلا) . هناك دوال أخرى تقوم بهذا الغرض fwrite() fread() الكود النهائي في ويندوز #include <stdio.h> #include <stdlib.h> int main(void) { char buffer[20]=""; FILE* fp1=NULL ; FILE* fp2=NULL ; fp1=fopen("C:\\Documents and Settings\\MOMO\\My Documents\\karim\\fo.txt","r"); fp2=fopen("C:\\Documents and Settings\\MOMO\\My Documents\\karim\\mo.txt","a"); if(!fp1||!fp2) { perror(""); printf("%d",errno); exit(EXIT_FAILURE); } while((fgets(buffer,20,fp1))!=0) { fputs(buffer,fp2); } fclose(fp1); fclose(fp2); return EXIT_SUCCESS; } وفقك الله
  7. شكرا جزيلا أستاذ Mr.B على هذا الشرح الذي استفدت منه الشيء الكثير
  8. أهلا حمزة إذا أمكنك أخي حمزة أن تتعمق قليلا في شرح البحث التراجعي Recursive Search File in Directories الذي تحدث عنه بأسلوبك الخاص لأنه ليس لدي أدنى فكرة عنه أنا سأحاول أن أعطيك الفكرة التي كونتها سابقا عن كيفية تصفح الملفات داخل مجلد وحاول أنت أن تجد لي نوع الخطأ الذي أقع فيه ولك أجر كبير عند الله الإشكالية عندي : المجلد يحتوي على ملفات (يمكن أن تكون ملفا (mp3,txt ..) أو مجلدا آخر ) و المجلد الحالي هو '.' أي كيف لمجلد أن يحتوي على نفسه؟؟ وكيف يمكنه كذلك أن يحتوي على مجلد أب؟ تمعن كلامي جيدا وحاول أن تكشف لي أخطائي و تقوم بتصحيحها +1
  9. أهلا أستاذ ahmed_youssef هذه الإجابة تكررت على مسامعي أكثر من مرة ولكن المشكلة التي لم أفهمها كيف لمجلد مثلا أن يحتوي على مجلد حالي وعلى مجلد أب؟ صراحة اختلطت علي الأمور شيئا ما ولا زلت أجد غموضا في فهم المسألة؟؟
  10. السلام عليكم حياكم الله أعضاء المنتدى و سدد خطاكم أتمنى أن أجد حلا لهذه المشكلة #include <stdlib.h> #include <stdio.h> #include <dirent.h> #ifndef WIN32 #include <sys/types.h> #endif typedef struct dirent* fichier; int main(void) { DIR* rep = NULL; fichier f=NULL; rep = opendir("C:\\Documents and Settings\\MOMO\\My Documents\\Downloads\\momo"); if (rep == NULL) { perror("erreur:"); exit(1); } puts("Le dossier a ete ouvert avec succes"); while ((f = readdir(rep)) != NULL) printf("Le fichier lu s'appelle '%s'\n", f->d_name); if (closedir(rep) == -1) exit(-1); puts("Le dossier a ete ferme avec succes"); return EXIT_SUCCESS; } السؤال كالتالي : ماذا يعني الملف '.' و الملف الآخر '..' وما الفائدة من وجودهما؟؟ من لديه فكرة عن هذين الملفين فلا يبخل علينا بالشرح و لو كان شرحا مطولا وشكرا مسبقا
  11. اقطعوا يد السارقة !

    إضافة إلى كونك مبرمجا باستطاعتك أن تكون كاتبا أو راويا
  12. اسأل ونحن نجيبك

    السلام عليكم هذه محاولتي #include <stdio.h> #include <stdlib.h> #define MAX 100 void realloc_s(char **,size_t); int main(void) { size_t n=0,i=1; char *nom=(char*) malloc(MAX*sizeof(char)); if(!nom) { puts("No memory !!"); exit(EXIT_FAILURE); } while((nom[n++]=fgetc(stdin))!='\n') if(n==(i*MAX)) realloc_s(&nom,(i++)*MAX); nom[n]='\0'; printf("\n\n\nsize of text : %u\n\n\ntext : %s",n-1,nom); free(nom); return 0; } void realloc_s(char **p,size_t size) { char *d=(char*)realloc(*p,size*sizeof(char)); if(d) *p=d; else { puts("no memory !!"); free(*p); *p=0; exit(EXIT_FAILURE); } return; } نفس فكرة الأخ biginner2000 لكن عوض أن نعيد عملية الحجز في كل مرة أدخلنا فيها حرفا واحدا وهذا ما قد يبطئ من أداء البرنامج لأنه إذا ما أدخلنا 150 حرف مثلا ستتكرر عملية إعادة الحجز 150 مرة . سنكرر هذه العملية (عملية إعادة الحجز) كل 100 حرف مثلا أو عدد الأحرف التي تريدها أنت وهكذا سنقلل نوعا ما من تكرار هذه العملية . صحيح ما قلته أخي خالد فحتى لو تلاعبنا بالمؤشرات و الحجز الديناميكي من أجل محاكاة الفئة string الموجودة في c++ فلن تكون النتيجة صحيحة 100/100 و سنواجه العديد من أخطاء الذاكرة أما لو استعملنا دوال الإدخال (scanf, gets,fgets..) فحتما سيكون ال buffer overflow سيد الموقف وهذه واحدة من سلبيات العجوز السي
  13. [ تمت الإجابة ]خطأ في Chaînes de caractères

    char (*Nom)[MAX]=NULL; هنا نعلن عن مؤشر لمصفوفة ل 20 عنصر من نوع char ونسند إليه القيمة NULL حتى نتجنب segfault Nom= (char (*)[MAX])malloc(4* sizeof(*Nom)); في هذا السطر نقوم بالحجز الديناميكي للمؤشر Nom نحجز ل 4 عناصر من نوع مصفوفة ل 20 عنصر من نوع char هنا نستعمل التحويل القصري (char (*)[MAX]) لأن الدالة malloc تعيد *void بينما المؤشر nom هو مؤشر مصفوفة تضم 20 عنصر من نوع char لم تسألني لماذا اكتفيت فقط بتحرير البعد الأول ؟ البعد الثاني سيتم تحريره تلقائيا لذا لسنا في حاجة للدالة free لا ليس هنالك أي تعقيد إذا راجعت قليلا الروابط الذي وضعتها لك أعلاه فستتمكن بسهولة من فهم عملية الحجز بشكلها الصحيح بالتوفيق
  14. [ تمت الإجابة ]خطأ في Chaînes de caractères

    غريب فعلا !! هذا الكود يشتغل عندي بشكل ممتاز لكن على مايبدو فأنت تستعمل النسخة القديمة عدل هذا السطر من الكود الأول Nom= malloc(4* sizeof(*Nom)); بهذا Nom= (char (*)[MAX])malloc(4* sizeof(*Nom)); الكود النهائي #include <stdio.h> #include <stdlib.h> #define MAX 20 int main(){ int i; char (*Nom)[MAX]=NULL; Nom= (char (*)[MAX])malloc(4* sizeof(*Nom)); if(!Nom){ puts("error memory!!"); exit(EXIT_FAILURE); } scanf("%s%s%s%s",Nom[0],Nom[1],Nom[2],Nom[3]); for(i = 0; i < 4 ; i++) puts((char*)Nom[i]); free(Nom); getchar(); return 0; } إذا في خطأ ثاني لا تتردد في الإبلاغ عنه يا حمزة؟
  15. [ تمت الإجابة ]خطأ في Chaînes de caractères

    أهلا حمزة .. الخطأ في الحالة الأولى أنك استعملت مكانا في الذاكرة لم تحجزه بعد وهذا ماقد يتسبب في segfault هذه محاولتي #include <stdlib.h> #define MAX 20 int main(){ int i; char (*Nom)[MAX]=NULL; Nom= malloc(4* sizeof(*Nom)); if(!Nom){ puts("error memory!!"); exit(EXIT_FAILURE); } scanf("%s%s%s%s",Nom[0],Nom[1],Nom[2],Nom[3]); for(i = 0; i < 4 ; i++) puts((char*)Nom[i]); free(Nom); getchar(); return 0; } #include <stdio.h> في الحالة الثانية تعيد نفس الخطأ الذي ارتكبته في الحالة الأولى printf("\n\t Addresse : "); scanf("%s",&stg[n].addresse); كان عليك أن تكتب فقط printf("\n\t Addresse : "); scanf("%s",stg[n].addresse); stg[n].addresse هو عنوان أول حرف يشير إليه المؤشر الثابت في الذاكرة فما حاجتك ل '&'؟ و يمكن التأكد من خلال هذا المثال #include <stdio.h> int main() { char a[20]; printf("entrer:\t"); fgets(&a[0],20,stdin); puts(a); return 0; } التصحيح للكود الثاني #include <stdio.h> #include <stdlib.h> typedef struct stagiaire { int mat; int age; char nom[10]; char prenom[10]; char addresse[10]; }stg; int main(){ const char *const mot[5]={"Mat","Age","Preom","Nom","Adresse"}; stg *tab=NULL; int max=0,n = 0; printf("\n\n\t Entrer le nombre des stagiaires : "); scanf("%d",&max); tab=(stg*)malloc(max*sizeof(stg)); if(!tab) { puts("error memory"); exit(EXIT_FAILURE); } do{ printf("\n\n\tStagiaire N %d ",n+1); printf("\n\n\t\tMatricule:"); scanf("%d",&tab[n].mat); printf("\n\t\tAge\t:"); scanf("%d",&tab[n].age); printf("\n\t\tPrenom\t:"); scanf("%s",tab[n].prenom); printf("\n\t\tNom\t:"); scanf("%s",tab[n].nom); printf("\n\t\tAddresse:"); scanf("%s",tab[n].addresse); n++; }while(n!=max); n=0; puts("\n\n********************* Affichage *********************\n\n"); printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n\n",mot[0],mot[1],mot[2],mot[3],mot[4]); while(n<max) { printf("%d\t\t%d\t\t%s\t\t%s\t\t%s\n", tab[n].mat,tab[n].age,tab[n].prenom,tab[n].nom,tab[n].addresse); n++; } free(tab); getchar(); return 0; } بالتوفيق