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

كود برنامج بسيط جدا ارجو تعديله (( هام جدا لمشروعي بارك الله فيكم ) لغة C

بدأه Aloha في 4 مايو 2008 · 8 رد · 870 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

أرجو منكم مساعدتي في تعديل هذا الكود بارك الله فيكم ورزقكم الجنه قولوا أمين ,

البرنامج فكرته بسيطة , وهو لضغط او تقليل حجم ملفات التيكست بطريقة Run Length Enc0ding , بمعني اخر , يري الحروف المتكررة في النص مهما كان عددها , ويستبدلها بحرفين فقط , او حرف ورقم , الحرف هو الحرف المتكرر , والرقم هو عدد مرات تكرارة

مثال :

CCCOOOZAASSSS

إذن تكرر حرف الــ C ثلاث مرات , وحرف ال O ثلاث مرات, وبعدهما حرف ال Z مرة , وحرف الـ A مرتان وحرف الS اربعه

طبعا بما أن حرف ال A تكرر مرتان , وأنا سأعوض عن اي تكرار بحرف ورقم اي خانتين , اذا لا داعي للتعويض هنا

ويصبح النص بعد الضغط

C4\O3\ZAA\S4

ومن ثم كود اخر لعملية فك الضغط بالقيام بالخطوات السابقه بصورة عكسية ..

لقد وجدت كود جاهز مكتوب بلغه السي , وهو شبيه بالمعني السابق , ولكني لا افهمه تماما , بالإضافة الي ان كاتب الكود أضاف له بعض السطور لمنع حذف اسمة ,

طبعا ينبغي علينا حمايه حقوق الاخرين , ولكن في حالتي هذه ان ابقيت علي اسمه , ماذا سيتفيد هو ؟؟ هذا برنامج خاص بمشروعي سأسلمة وبعد ذلك انساه للابد ...بالإضافة الي اني لا اعرف من هو لكي أسأله ,لا اعرف غير اسمه Bindesh , والكود بسيط مايستاهل , ولن أأخذ درجه المشروع للاسف ..

ما اطلبه منكم رجااااء رجااااااء :

1 - انتزاع الكود الخاص بالحقوق

2 - ماهي طريقة عمل GUI لهذا البرنامج , عن طريق وضع زر لإستعراض الملفات واختيار الملف المراد ضغطة بدلا من ادخاله في شاشه الكونسول السوداء

الأكواد هنا :

كود ملف الضغط : compressor

#include<stdio.h>
  #include "mymacros.bmf"
  #pragma pack(1)
  #define MSB 10	 /* MSB = Minimum Similar Bytes */
  /************************************************/
  struct _rlcblock
  {
   char sig[7];
   char freqbyte;
   unsigned int freq;
  }rb;
  /************************************************/
  main()
  {
   FILE *fs,*ft; int fbr=1,ob,nb,x=0; unsigned int i=1;
   char fsname[128],ftname[128];
   strcpy(rb.sig,"Bindesh");
   ME(); puts("Run length compressor. By Bindesh Kumar Singh. Mail me your comments");
   puts("Enter file to compress.");gets(fsname); CREATEFILE(fs,fsname,"rb");
   puts("Compressed file will be saved as:(don't give extension). write no/NO to use source derived name.");gets(ftname);
   if((strcmp(ftname,"no")) == 0 || (strcmp(ftname,"NO")) == 0){strcat(fsname,".RLC");CREATEFILE(ft,fsname,"wb");}
   else {strcat(ftname,".RLC");CREATEFILE(ft,ftname,"wb");}
   while(1)
   {
	if(fbr==1)ob=fgetc(fs);
	if(fbr==1 && ob==EOF)break;
	nb=fgetc(fs);
	if(ob == nb){fbr=0;i++;continue;}
	if(fbr == 0)
	{
	 if(i>MSB)
	 {
	  rb.freqbyte = ob; rb.freq = i; fwrite(&rb,sizeof(rb),1,ft); fbr=1;i=1; if(nb == EOF)break;
	  fputc(nb,ft);continue;
	 }
	else
	 {
	  for(x=1;x<=i;x++)
		fputc(ob,ft);
	  fbr=1;i=1;if(nb==EOF)break; fputc(nb,ft);continue;
	 }
	}
	else
	 {
	  fputc(ob,ft); if(nb==EOF)break;
	  fputc(nb,ft);fbr=1;i=1;
	 }
   }
   fclose(fs);fclose(ft);
   puts("File compressed sunccessfully");
   getch();
  }

ملف فك الضغط decompressor

/* Developer: Bindesh Kumar Singh	 DATE: 15|09|2006   */
  /* Compiler used: Dev c++ 4.0   */
  #include<stdio.h>
  #include "mymacros.bmf"
  #pragma pack(1)
  #define MSB 10	 /* MSB = Minimum Similar Bytes */
  /************************************************/
  struct _rlcblock
  {
   char freqbyte;
   unsigned int freq;
  }rb;
  /************************************************/
  main()
  {
   FILE *fs,*ft; int ch,tmp,i=0; long int pos=0;
   char fsname[128],ftname[128]; char sig[7];
   ME(); puts(" -RLC- decompressor. By Bindesh Kumar Singh. Mail me your comments");
   puts("Enter file to decompress. < SAVED WITH EXTENSION *.RLC >");gets(fsname);
   puts("Decompressed file will be saved as:");gets(ftname);
   CREATEFILE(fs,fsname,"rb");
   CREATEFILE(ft,ftname,"wb");
   while(1)
   {
	ch = fgetc(fs); if(ch == EOF)break;
	if(ch == 'B')						/* now check next 6 bytes */
	{
	 pos = ftell(fs); fscanf(fs,"%6s",&sig);	/* Save position. Read next 6 bytes */
	 if(strcmp(sig,"indesh") == 0)
	 {
	  fread(&rb,sizeof(rb),1,fs);
	  for(i=1;i<=rb.freq;i++)
		fputc(rb.freqbyte,ft);
	  continue;
	 }
	 else {fputc(ch,ft); fseek(fs,pos,SEEK_SET);continue;}   /*If not the signature write 'B' and set position after 'B' */
	}
	else fputc(ch,ft);
   }
   fclose(fs);fclose(ft);
   puts("File Decompressed sunccessfully");
   getch();
  }

ملف ثالث لا أعرف ما وظيفته إسمة mymacros.BMF

/********************   MACRO LIST  created by Bindesh Kumar Singh (11:47 PM 6/3/2006)  **********************/
  #define ME()			puts("Created by Bindesh kumar Singh");puts("Contact: bindesh_youneedme@yahoo.co.in"); puts("");
  #define CREATEFILE(HANDLE,FILENAME,MODE)	if((HANDLE=fopen(FILENAME,MODE))== 0){printf("Error creating/opening file %s\n",FILENAME);getch();exit(0);}
  #define COPYFILE(FS,FT,BUFF)	 while(BUFF!=EOF){BUFF=fgetc(FS);fputc(BUFF,FT);}

</div></div>

تم تعديل هذه المشاركة بواسطة Aloha في 4 مايو 2008 في 18:08

#2

والله ماعندي وقت !!! ارجو من لديه اي توضيح او اي شئ يقوله رجااااااااااااااااااااااااء

#3

لا حول ولا قوة الا بالله

#4
#include<stdio.h>
  #include "mymacros.bmf"
  #pragma pack(1)
  #define MSB 10     /* MSB = Minimum Similar Bytes */
  /************************************************/
  struct _rlcblock
  {
   char sig[7];
   char freqbyte;
   unsigned int freq;
  }rb;
  /************************************************/
  main()
  {
   FILE *fs,*ft; int fbr=1,ob,nb,x=0; unsigned int i=1;
   char fsname[128],ftname[128];
   strcpy(rb.sig,"Bindesh");
   ME(); puts(" ");
   puts("Enter file to compress.");gets(fsname); CREATEFILE(fs,fsname,"rb");
   puts("Compressed file will be saved as:(don't give extension). write no/NO to use source derived name.");gets(ftname);
   if((strcmp(ftname,"no")) == 0 || (strcmp(ftname,"NO")) == 0){strcat(fsname,".RLC");CREATEFILE(ft,fsname,"wb");}
   else {strcat(ftname,".RLC");CREATEFILE(ft,ftname,"wb");}
   while(1)
   {
    if(fbr==1)ob=fgetc(fs);
    if(fbr==1 && ob==EOF)break;
    nb=fgetc(fs);
    if(ob == nb){fbr=0;i++;continue;}
    if(fbr == 0)
    {
     if(i>MSB)
     {
      rb.freqbyte = ob; rb.freq = i; fwrite(&rb,sizeof(rb),1,ft); fbr=1;i=1; if(nb == EOF)break;
      fputc(nb,ft);continue;
     }
    else
     {
      for(x=1;x<=i;x++)
        fputc(ob,ft);
      fbr=1;i=1;if(nb==EOF)break; fputc(nb,ft);continue;
     }
    }
    else
     {
      fputc(ob,ft); if(nb==EOF)break;
      fputc(nb,ft);fbr=1;i=1;
     }
   }
   fclose(fs);fclose(ft);
   puts("File compressed sunccessfully");
   getch();
  }

/* Developer: Bindesh Kumar Singh     DATE: 15|09|2006   */
  /* Compiler used: Dev c++ 4.0   */
  #include<stdio.h>
  #include "mymacros.bmf"
  #pragma pack(1)
  #define MSB 10     /* MSB = Minimum Similar Bytes */
  /************************************************/
  struct _rlcblock
  {
   char freqbyte;
   unsigned int freq;
  }rb;
  /************************************************/
  main()
  {
   FILE *fs,*ft; int ch,tmp,i=0; long int pos=0;
   char fsname[128],ftname[128]; char sig[7];
   ME(); puts("  ");
   puts("Enter file to decompress. < SAVED WITH EXTENSION *.RLC >");gets(fsname);
   puts("Decompressed file will be saved as:");gets(ftname);
   CREATEFILE(fs,fsname,"rb");
   CREATEFILE(ft,ftname,"wb");
   while(1)
   {
    ch = fgetc(fs); if(ch == EOF)break;
    if(ch == 'B')                        /* now check next 6 bytes */
    {
     pos = ftell(fs); fscanf(fs,"%6s",&sig);    /* Save position. Read next 6 bytes */
     if(strcmp(sig,"indesh") == 0)
     {
      fread(&rb,sizeof(rb),1,fs);
      for(i=1;i<=rb.freq;i++)
        fputc(rb.freqbyte,ft);
      continue;
     }
     else {fputc(ch,ft); fseek(fs,pos,SEEK_SET);continue;}   /*If not the signature write 'B' and set position after 'B' */
    }
    else fputc(ch,ft);
   }
   fclose(fs);fclose(ft);
   puts("File Decompressed sunccessfully");
   getch();
  }

  #define ME()            puts(" ");puts(" "); puts("");
  #define CREATEFILE(HANDLE,FILENAME,MODE)    if((HANDLE=fopen(FILENAME,MODE))== 0){printf("Error creating/opening file %s\n",FILENAME);getch();exit(0);}
  #define COPYFILE(FS,FT,BUFF)     while(BUFF!=EOF){BUFF=fgetc(FS);fputc(BUFF,FT);}
tvquran_6.gif

#5

اخي , لا اجد اي تغيير عن الكود الذي وضعته انا سابقا !!!

ما الجديد في هذا الكود ؟؟

#6
اقتباس
انتزاع الكود الخاص بالحقوق
tvquran_6.gif

#7

للأسف اخي الكريم , يوجد ايضا اكواد اخري

مثل هذا

strcpy(rb.sig,"Bindesh");

وفي ملف الديكمبروسيور

f(ch == 'B') /* now check next 6 bytes */
{
pos = ftell(fs); fscanf(fs,"%6s",&sig); /* Save position. Read next 6 bytes */
if(strcmp(sig,"indesh") == 0)

وهو يضع الحرف الاول من اسمهB , ثم يتابع بباقي الاسم indesh ليتأكد ان الاسم موجود في الملف المضغوط

تم تعديل هذه المشاركة بواسطة Aloha في 5 مايو 2008 في 14:19

#8

السلام عليكم:

هذا الكود معدل في الملف المرفق.

vv.rar

tvquran_6.gif

#9

شِكرا لك اخي الكريم جدا ,

بخصوص الشق الثاني من السؤال , كيف يمكن عمل واجه GUI للبرنامج , بحيث تطلب منه ادخال الملف المضغوط او العادي لفك الضغط او الضغط ( علي الترتيب ) وتستخدم الكود السابق بدلا من ادخال الاوامر .. علي هيئة Browse او استعراض لمكان الملف ....

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…