1 / 29

void mergeSchedule(FILE *f370, FILE *f380, char *filename){ FILE *newfile=fopen(filename,"w");

void mergeSchedule(FILE *f370, FILE *f380, char *filename){ FILE *newfile=fopen(filename,"w"); char time1[10],time2[10],d1[20],d2[20],d3[80],eof1,eof2; if (!newfile) exit(1); eof1=fscanf(f370,"%6[^$]%s%*c",time1,d1); eof2=fscanf(f380,"%6[^$]%s%*c",time2,d2);.

Download Presentation

void mergeSchedule(FILE *f370, FILE *f380, char *filename){ FILE *newfile=fopen(filename,"w");

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. void mergeSchedule(FILE *f370, FILE *f380, char *filename){ FILE *newfile=fopen(filename,"w"); char time1[10],time2[10],d1[20],d2[20],d3[80],eof1,eof2; if(!newfile) exit(1); eof1=fscanf(f370,"%6[^$]%s%*c",time1,d1); eof2=fscanf(f380,"%6[^$]%s%*c",time2,d2);

  2. while(eof1!=EOF || eof2!=EOF){ if(eof2==EOF || eof1!=EOF && strcmp(time1,time2)<0){ fprintf(newfile,"%s%s\n",time1,d1); eof1=fscanf(f370,"%6[^$]%s%*c",time1,d1); } if(eof1==EOF || eof2!=EOF && strcmp(time1,time2)>0){ fprintf(newfile,"%s%s\n",time2,d2); eof2=fscanf(f380,"%6[^$]%s%*c",time2,d2); } if (eof1!=EOF && eof2!=EOF &&strcmp(time1,time2)==0){ mergeDays(d1,d2,d3); fprintf(newfile,"%s%s",time1,d3); eof1=fscanf(f370,"%6[^$]%s%*c",time1,d1); eof2=fscanf(f380,"%6[^$]%s%*c",time2,d2); } } fclose(newfile);

  3. void mergeDays(char *d1,char *d2,char *d3){ int i,j,arr[8]={0}; for(;*d1;d1++) if(*d1>='1' && *d1<='7') arr[*d1-'0']++; for(;*d2;d2++) if(*d2>='1' && *d2<='7') arr[*d2-'0']++; for(i=1,j=0;i<8;i++) if(arr[i]){ d3[j++]=i+'0'; d3[j++]=','; } d3[j-1]='\n'; d3[j]='\0'; }

  4. void mergeDays(char *d1,char *d2,char *d3){ int i,j,arr[8]={0}; for(i=0;i<strlen(d1);i=i+2) arr[d1[i]-'0']++; for(i=0;i<strlen(d2);i=i+2) arr[d2[i]-'0']++; for(i=1,j=0;i<8;i++) if(arr[i]){ sprintf(&d3[2*j],"%d,",i); j++; } sprintf(&d3[2*j-1],"\n\0"); }

  5. במסגרת התייעלות המשרדים הממשלתיים החליטו במשרד הפנים ובמשרד הרישוי לעדכן את מאגרי מידע של כל משרד על פי המאגר של השני. נתונים שני קבצים:

  6. קובץ משרד הפנים • שם משפחה - 15תווים • שם פרטי - 15 תווים • שם האב - 15 תווים • כתובת - 20 תווים • טלפון - 10 ספרות • מספר ת.ז. - 9 ספרות • תאריך לידה - 8 ספרות • תאריך עדכון - 8 ספרות

  7. קובץ משרד הרישוי • שם משפחה - 15תווים • שם פרטי - 15 תווים • כתובת - 20 תווים • טלפון - 10 ספרות • מספר ת.ז. - 9 ספרות • מס' רשיון - 7 ספרות • סוג רשיון - אות אחת • תאריך עדכון - 8 ספרות

  8. שני הקבצים מסודרים לפי מספר ת.ז. בסדר עולה. • תאריך עדכון הוא משמאל לימין: שנה , חודש, יום. (התאריך של היום הוא 20050929) • השדות המסומנים עם קו תחתי והדגשה (כמו כתובת ) ניתנים לעדכון על סמך פרטי הקובץ השני במידה והפרטים חדשים יותר בקובץ השני.

  9. כתוב פונקציה לעדכון: void update(FILE* pnim, FILE* rishui, char *upd_pni, char *upd_ris) • שמקבלת: pnim מצביע לקובץ משרד הפנים, rishui מצביע לקובץ משרד הרישוי , ויוצרת שני קבצים חדשים, קבצי המשרדים המעודכנים

  10. פתיחת קבצים וקריאת שורה void update(FILE* pnim, FILE* rishui, char *upd_pni, char *upd_ris){ FILE *fupdP, *fupdR; char nameP[31] ,nameR[31],father[16],adtelP[31],adtelR[31],idP[10],idR[10],license[9]; long birth, updP, updR; int eofR; if(!(fupdP=fopen(upd_pni,"w"))|| !(fupdR =fopen(upd_ris,"w"))){ printf("Error can't open file\n"); exit(1); } eofR=fscanf(rishui,"%30[^$]%30[^$]%9s%8s%ld%*c",nameR,adtelR,idR,license,&updR);

  11. while(fscanf(pnim,"%30[^$]%15[^$]%30[^$]%9s%8ld%ld%*c", nameP, father,adtelP,idP,&birth,&updP)==6) if(eofR !=5 || strcmp(idP,idR)<0) fprintf(fupdP,"%s%s%s%s%8d%8d\n", nameP,father,adtelP,idP,birth,updP); else{ if(updP>updR){ strcpy(nameR,nameP); strcpy(adtelR,adtelP); updR=updP; } else{ strcpy(adtelP,adtelR); updP=updR; } fprintf(fupdP,"%s%s%s%s%8d%8d\n", nameP,father,adtelP,idP,birth,updP); fprintf(fupdR,"%s%s%s%s%d\n", nameR,adtelR,idR,license,updR); eofR=fscanf(rishui,"%30[^$]%30[^$]%9s%8s%ld%*c", nameR,adtelR,idR,license,&updR); }

  12. סגירת הקובץ fclose(fupdP); fclose(fupdR); }

  13. הפונקציה rewind • מחזירה את המצביע לתחילת הקובץ

  14. createPermutChainRec void createPermutChainRec (llink **pChain, link *domain, link *suffix){ link *temp=domain; if (domain==NULL){ insertFirst1(pChain,copyToNewLlink(suffix)); return; } while (temp){ if (temp->next==NULL || temp->data!=temp->next->data){ moveLinkToSuffix(&domain,temp,&suffix); createPermutChainRec(pChain, domain, suffix); returnLinkToDomain(&domain,temp,&suffix); } temp=temp->next; } }

  15. Move links from domain to suffix void moveLinkToSuffix (link **head, link *toMove, link **suffix){ removeWithoutFree(head,toMove); insertFirst(suffix,toMove); } void returnLinkToDomain (link **head, link *toMove, link **suffix){ removeWithoutFree(suffix,toMove); insertSorted(head,toMove); }

  16. removeWithoutFree void removeWithoutFree (link **head, link *toRemove){ link *temp=*head; if (*head==toRemove) *head=(*head)->next; else{ while (temp->next!=toRemove) temp=temp->next; temp->next=temp->next->next; } }

  17. insertSorted void insertSorted (link **head, link *toInsert){ link *temp=*head; if (*head==NULL||toInsert->data<(*head)->data){ toInsert->next=*head; *head=toInsert; return; } while (temp->next && toInsert->data >= temp->next->data) temp=temp->next; insertAfter(temp,toInsert); }

  18. insertFirst void insertFirst(link **head,link *newLink){ newLink->next = *head; *head = newLink; } void insertFirst1(llink **head,llink *newLink){ newLink->next = *head; *head = newLink; }

  19. copyToNewLlink llink * copyToNewLlink (link * head){ llink * lhead=(llink *)malloc(sizeof(llink)); lhead->data=NULL; while (head){ insertLast(&(lhead->data), createLink(head->data,head->next)); head=head->next; } return lhead; }

  20. insertLast void insertLast(link ** head, link * newLink){ link * temp=*head; if (!(*head)){ insertFirst(head,newLink); return; } while (temp->next!=NULL) temp=temp->next; temp->next=newLink; newLink->next=NULL; }

  21. createLink link * createLink(int data, link * next){ link * l=(link *)malloc(sizeof (link)); if (l){ l->data=data; l->next=next; } return l; }

  22. Backtracking

  23. Add parameters int queens(int board[][8]){ return queens1(board,0); }

  24. int queens1(int board[][8], int row){ int i; if (row==8) return 1; for (i=0; i<8; i++){ board[row][i]=1; if (checkBoard(board,row,i) && queens1(board,row+1)) return 1; board[row][i]=0; } return 0; }

  25. שימוש במשתנים סטאטיים • כתוב תכנית המקבלת מספר n ומדפיסה את כל המספרים בעלי n ספרות שהספרות שלהן בסדר עולה. לדוגמא עבור n=3 יודפס • 123 • 124 • 125 • … • 679 • 689 • 789

  26. void printAsc(int n){ int i; staticint number=0; if (!n){ printf ("%d\n",number); return; } for (i = number%10+1 ;i<10;i++){ number=number*10+i; printAsc(n-1); number=number/10; } }

  27. המרת לולאה לרקורסיה void printArray(int *a, int size){ int i; for (i=0;i<size;i++) printf("%d ",a[i]); } void printArrayRec(int *a, int size,int i){ if (i==size)return; printf("%d ",a[i]); printArrayRec(a, size, i+1); } void printArrayRec1(int *a, int size){ if (size==0)return; printArrayRec1(a, size-1); printf("%d ",a[size-1]); }

More Related