Upload
colleen-tucker
View
55
Download
4
Embed Size (px)
DESCRIPTION
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);. - PowerPoint PPT Presentation
“toTLV.txt”“370.txt”“380.txt”
07:05,1,2,407:15,3,4,5,607:30,1,2,3,4,507:45,2,3,408:00,1,2,3,4,508:30,1,2,3,4,5,6
07:15,3,4,5,607:30,1,2,3,408:00,1,3,508:30,1,2,3,4,5,6
07:05,1,2,407:30,1,507:40,2,3,408:00,2,3,4
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);
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);
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';
}
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");
}
במסגרת התייעלות המשרדים הממשלתיים •החליטו במשרד הפנים ובמשרד הרישוי לעדכן
את מאגרי מידע של כל משרד על פי המאגר של השני. נתונים שני קבצים:
קובץ משרד הפנים
תווים15- שם משפחה • תווים15- שם פרטי• תווים15- שם האב • תווים20- כתובת• ספרות10- טלפון• ספרות9- מספר ת.ז. • ספרות8- תאריך לידה • ספרות 8- תאריך עדכון•
קובץ משרד הרישוי
תווים15- שם משפחה• תווים15- שם פרטי• תווים20- כתובת • ספרות10- טלפון• ספרות9- מספר ת.ז. • ספרות7- מס' רשיון•- אות אחת סוג רשיון• ספרות8- תאריך עדכון•
שני הקבצים מסודרים לפי מספר ת.ז. בסדר •עולה.
תאריך עדכון הוא משמאל לימין: שנה , חודש, •(20050929יום. )התאריך של היום הוא
השדות המסומנים עם קו תחתי והדגשה )כמו • ( ניתנים לעדכון על סמך פרטי הקובץ כתובת
השני במידה והפרטים חדשים יותר בקובץ השני.
כתוב פונקציה לעדכון:•
void update(FILE* pnim, FILE* rishui, char *upd_pni, char *upd_ris)
מצביע לקובץ משרד הפנים, pnimשמקבלת: •rishui מצביע לקובץ משרד הרישוי , ויוצרת
שני קבצים חדשים, קבצי המשרדים המעודכנים
פתיחת קבצים וקריאת שורה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);
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);}
סגירת הקובץ
fclose(fupdP);
fclose(fupdR);
}
rewindהפונקציה
מחזירה את המצביע לתחילת הקובץ•
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;
}}
createPermutChainRec
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);
}
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;}
}
removeWithoutFree
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);
}
insertFirst
void insertFirst(link **head,link *newLink){
newLink->next = *head;
*head = newLink;
}
void insertFirst1(llink **head,llink *newLink){
newLink->next = *head;
*head = newLink;
}
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;
}
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;
}
createLink
link * createLink(int data, link * next){
link * l=(link *)malloc(sizeof (link));
if (l){
l->data=data;
l->next=next;
}
return l;
}
Backtracking
Add parameters
int queens(int board[][8]){
return queens1(board,0);
}
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;
}
שימוש במשתנים סטאטיים
ומדפיסה את nכתוב תכנית המקבלת מספר • ספרות שהספרות שלהן nכל המספרים בעלי
יודפסn=3בסדר עולה. לדוגמא עבור • 123• 124• 125• …• 679• 689• 789
void printAsc(int n){int i;static int 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;
}}
המרת לולאה לרקורסיה
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]);
}