29
“toTLV.txt” “370.txt” “380.txt” 07:05,1,2,4 07:15,3,4,5,6 07:30,1,2,3,4 ,5 07:45,2,3,4 08:00,1,2,3,4 ,5 08:30,1,2,3,4 ,5,6 07:15,3,4,5,6 07:30,1,2,3,4 08:00,1,3,5 08:30,1,2,3,4 ,5,6 07:05,1,2,4 07:30,1,5 07:40,2,3,4 08:00,2,3,4

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

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

Citation preview

“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]);

}