Uploaded on

 

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
168
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. INFORMATIQUE III DEVOIR SURVEIEE 2 Notes 18 - 20 p. ( excellent 6); 15 – 17 p . ( tr è s bien 5); 12 – 14 p. (bien 4); 10 – 11 p. (passable 3)
  • 2.
    • (6 points) Indiquer précisément les affichages produits par les programmes suivants:
    • 1.
    #include <stdio.h> #include <string.h> #define N 3 typedef struct el { int inf; char name[15]; }unit; unit f(unit a); int main(){ unit lst[N], *lstp[N]; char p[]=&quot;Paris Sofia&quot;, x,y; for(x=0; x<N; x++){ lst[x].inf=x+1; strcpy(lst[x].name,p+x); printf(&quot;1: %sn&quot;,lst[x].name+2); lstp[x]=lst+x; }
  • 3.
    • (6 points) Indiquer précisément les affichages produits par les programmes suivants:
    • 1.
    lstp[0]=lstp[2]; for(x=0; x<N; x++){ printf(&quot;2:%d %sn&quot;,lstp[x]->inf, lstp[x]->name); } *lstp[1]=f(*lstp[0]); printf(&quot;4:%d %sn&quot;,lstp[1]->inf,lstp[1]->name); return 0; } unit f(unit a) { unit b; a.inf*=2; b.inf=(2*a.inf)+1; strcpy(b.name,a.name+4); printf(&quot;3:%d %sn&quot;,a.inf,a.name); return b; }
  • 4.
    • Explications
    unit *lstp[3] unit lst[3] inf name 1 Paris Sofia 2 aris Sofia 3 ris Sofia
  • 5.
    • Explications
    • lst
    • 1 Paris Sofia 2 aris Sofia 3 ris Sofia
    • lst[x].name+2
    • 1: ris Sofia
    • 1: is Sofia
    • 1: s Sofia
    • lstp[0]=lstp[2];
    • 2: 3 ris Sofia
    • 2: 2 aris Sofia
    • 2: 3 ris Sofia
  • 6.
    • Explications
    • *lstp[0] (3 ris Sofia) - le param è tre
    • a.inf –> 3*2
    • 3: 6 ris Sofia
    • b.inf –> 2*(a.inf)+1 -> 13
    • a.name -> ris Sofia
    • b.name -> a.name+4
    • 4: 13 Sofia
  • 7.
    • (6 points) Indiquer précisément les affichages produits par les programmes suivants:
    • 2.
    #include <stdio.h> int gcd(int, int); int main() { int a=33, b=15; if (a < 1 || b < 1) { printf(&quot;Erreur! n&quot;); return 1; } printf(&quot;%dn&quot;,gcd(a, b)); return 0; } int gcd(int a, int b) {if (a == b) return a; if (a > b) return gcd(a-b, b); return gcd(a, b-a); }
  • 8.
    • Explications
    • a b
    • 1 33 > 15
    • 18 > 15
    • 3 < 15
    • 3 < 12
    • 3 < 9
    • 3 < 6
    • 3 3
  • 9.
    • Ecrire un programme qui lit un fichier texte donné test .txt où sont enregistrés les noms et prénoms des étudiants (nombre inconnue). Lire et déplacer dans un tableau dynamique (nombre initial des éléments est=2) les éléments lu. Trier les noms en ordre alphabétique. Afficher les noms lus et les noms après le tri.
    • Faire les manipulations en utilisant les fonctions différentes :
      • Insertion dans le tableau dynamique;
      • Affichage du tableau dynamique;
      • Tri du tableau dynamique
  • 10.
    • fichier texte donné: test .txt où sont enregistrés les noms et prénoms (nombre inconnue).
    Maria Angelova Ani Koleva Ivan Petrov Asen Milanov
  • 11. #include<stdio.h> #include<stdlib.h> #include <string.h> #define NUM 2 void output(char **p,int k); void sort(char **p,int k); char ** insert(char **ptext,int *n_l); int main(void) { int n_l; char **ptext; ptext=insert(ptext,&n_l); printf(&quot;%d chaines (noms) ont lusn&quot;,n_l); printf(&quot;nListe originale des noms:n&quot;); output(ptext,n_l); sort(ptext,n_l); printf(&quot;Liste des nom tries:n&quot;); output(ptext,n_l); free(ptext); return(0); }
  • 12. char ** insert(char **ptext,int *n_l) { char *p; FILE *fp; int n_el=NUM ; *n_l=0; char buf[SIZE]; if((fp=fopen(&quot;test.txt&quot;, &quot;r&quot;)) == NULL) { printf(&quot;Fichier n'est pas ouvert.n&quot;); exit(1); } if((ptext=(char **) malloc ( n_el *sizeof(char *)))==NULL){ printf(&quot;Erreur!n&quot;); exit(1); }
  • 13. do{ if( fgets(buf,sizeof(buf),fp)== NULL){ printf(&quot;Erreur lecture!n&quot;); exit(1); } if((p=(char*)malloc( sizeof(char)*(strlen(buf)+1)))== NULL){ printf(&quot;Erreur!n&quot;); exit(1); } strcpy(p,buf); if(*n_l==n_el) { n_el+=NUM ; if (ptext=(char**) realloc (ptext, n_el *sizeof(char*)))==NULL){ printf(&quot;Erreur!n&quot;); exit(1); } } ptext[(*n_l)++]=p; } while(!feof(fp)); strcat(*(ptext+*n_l-1),&quot;n&quot;); return ptext; }
  • 14. void output(char **p,int k) { int j; for(j=0;j<k;j++) printf(&quot;%sn&quot;,*(p+j)); } void sort(char **p,int k) { int j,flag; char st[80]; do{ flag=0; for(j=0;j<k-1;j++) if(strcmp(*(p+j),*(p+j+1))>0){ flag=1; strcpy(st,*(p+j)); strcpy(*(p+j),*(p+j+1)); strcpy(*(p+j+1),st); } } while(flag); }
  • 15.  
  • 16.
    • Ecrire un programme de faire les manipulations avec un fichier binaire des structures.
    • Faire les manipulations en utilisant les fonctions différentes :
      • Insertion dans le tableau dynamique en utilisant le clavier;
      • Affichage du tableau dynamique;
      • Cr é ation du fichier binaire;
      • Tri du tableau dynamique;
        • Selon les noms
        • Selon les notes
      • Chercher dans le fichier les é tudiants avec la note moyenne >=5.50 et d é placer dans un autre fichier
  • 17. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <memory.h> #define NBR 5 typedef struct { char name[20]; float averageMark; }STUDENT; void myMenu(); STUDENT * addStudentFromKey(short *); void inputStudent(STUDENT*); void printArray(STUDENT *,short ); FILE *writeStructFile(STUDENT *,short); void sortArray(STUDENT *,short); int sortName(const void *,const void *); int sortAverageMark(const void *,const void *); void SearchFile(FILE *);
  • 18. int main() { myMenu(); return 0; } ///////////////////////////////////////////////// void myMenu() { FILE *fp; short a,i; STUDENT *array; do { printf(&quot;n1.Creer tableau dynamique des structures - entrees par clavier n2.Afficher le tableau n3.Ecrire le tableau dans un fichier binaire n4.Trier le tableau dynamique des structures n5.Chercher dans le fichier les etudiants avec notes >=5.50&ecrire n6.Fin nVotre choix :&quot;); scanf(&quot;%d&quot;,&a);
  • 19. switch(a) { case 1:array=addStudentFromKey(&i);break; case 2:printArray(array,i);break; case 3:fp=writeStructFile(array,i);break; case 4:sortArray(array,i); break; case 5:SearchFile(fp); } }while(a!=6); free(array); }
  • 20. STUDENT* addStudentFromKey(short *i) { STUDENT *array,a; char word[4]; int n=NBR; *i=0; array=(STUDENT*)malloc(n*sizeof(STUDENT)); if(array == NULL) exit(1); while(printf(&quot;La structure suivante dans le tableau? - (oui/no)&quot;), fflush(stdin),strcmp(gets(word),&quot;oui&quot;)==0) { if(*i == n) { n=n*2; array=(STUDENT*)realloc(array,n*sizeof(STUDENT)); if(array == NULL) exit(1); } printf(&quot;nETUDIANT NOMBRE %d: &quot;,*i+1); inputStudent(&a); memcpy(&array[*i],&a,sizeof(STUDENT)); (*i)++; } return array; }
  • 21. void inputStudent(STUDENT *a) { fflush(stdin); printf(&quot;nEntrer le nom:&quot;); gets(a->name); printf(&quot;Entrer la note moyenne:&quot;); scanf(&quot;%f&quot;,&a->averageMark); } ////////////////////////////////////////////////////////////////////////////////////////// void printArray(STUDENT *array,short n) { int i; printf(&quot;tttLes elements du tableau dynamique nETUDIANT NOMBREt ETUDIANT NOM tt ETUDIANT NOTE MOYENNEn&quot;); for(i=0;i<n;i++) printf(&quot;%-18d %-28s %-10.2fn&quot;,i+1,array[i].name,array[i].averageMark); }
  • 22. FILE* writeStructFile(STUDENT *array,short n) { FILE *fp; char fname[15]; short i; puts(&quot;Entrer le nom du fichier pour ecrire&quot;); fflush(stdin); gets(fname); fp=fopen(fname,&quot;w+b&quot;); if(fp==NULL) { printf( &quot;Problem d'ouverturen&quot; ); exit(1); } for(i=0;i<n;i++) fwrite(&array[i],sizeof(STUDENT),1,fp); return(fp); }
  • 23. void sortArray(STUDENT *array,short n) { short k; printf(&quot;nChoix du tri :n0 - par nom;n1 - par note moyennen&quot;); fflush(stdin); scanf(&quot;%d&quot;,&k); qsort((void*)array,n,sizeof(STUDENT),k?sortAverageMark:sortName); } ////////////////////////////////////////////////////////////////////////////// int sortName(const void *pa,const void *pb) { char x; STUDENT*a=(STUDENT*)pa; STUDENT*b=(STUDENT*)pb; x=strcmp(a->name,b->name); if(x>0) return 1; else if(x<0) return -1; else return 0; }
  • 24. int sortAverageMark(const void *pa,const void *pb) { STUDENT*a=(STUDENT*)pa; STUDENT*b=(STUDENT*)pb; if(a->averageMark > b->averageMark) return 1; else if(a->averageMark < b->averageMark) return -1; else return 0; }
  • 25. void SearchFile(FILE *fp) { FILE *fp_new; char fname_new[15]; STUDENT temp; rewind(fp); puts(&quot;Entrer le nom du fichier pour ecrire&quot;); fflush(stdin); gets(fname_new); fp_new=fopen(fname_new,&quot;w+b&quot;); if(fp_new==NULL) { printf( &quot;Problem problem d'ouverturen&quot; ); exit(1); } while(fread(&temp,sizeof(STUDENT),1,fp)==1) if(temp.averageMark >= 5.50) fwrite(&temp,sizeof(STUDENT),1,fp_new); rewind(fp_new); while(fread(&temp,sizeof(STUDENT),1,fp_new)==1) printf(&quot;%-28s %-10.2fn&quot;,temp.name,temp.averageMark); fclose(fp); fclose(fp_new); }
  • 26.  
  • 27.  
  • 28.  
  • 29.  
  • 30.  
  • 31.  
  • 32.
    • Ecrire un programme qui lit un fichier texte donné b .txt où sont enregistrés les mots séparées par un ou plusieurs blancs ou nouvelle ligne (nombre inconnue). Lire les mots et si le mot ne présente pas dans un dictionnaire, déplacer le dans un tableau dynamique (dictionnaire) (nombre initial des éléments est=2). Trier les mots en ordre alphabétique. Afficher le dictionnaire après le tri des mots.
    • Faire les manipulations en utilisant les fonctions différentes.
  • 33. ppch[0] word0 ppch[1] ppch[2] word1 word2 ppch[i] ppch[n] wordn char **ppch
  • 34. #include <stdio.h> #include <string.h> #include <stdlib.h> #define NUM 2 void prt(char **ppch,int n){ int i; for(i=0;i<n;i++){ printf(&quot;%sn&quot;,ppch[i]); } } int exist(char **ppch, int n, char *w){ int i; for(i=0; i<n;i++){ if(!strcmp(ppch[i],w)) return 1; } return 0; }
  • 35. char ** insert(char **ppch, int *n_w,int *n_el, char *w){ char *p; if ((p = (char *)malloc(sizeof(char)*(strlen(w)+1)))== NULL){ return NULL; } strcpy(p, w); if(*n_w == *n_el){ *n_el+=NUM; if ( (ppch = (char **)realloc( ppch,*n_el*sizeof(char*)))==NULL) { return NULL; } } ppch[(*n_w)++]= p; return ppch; }
  • 36. void sort(char **ppch, int n_w){ int i,ok; char *help; do { ok=1; for(i=0;i<n_w-1;i++){ if(strcmp(ppch[i],ppch[i+1])>0){ help=ppch[i]; ppch[i]=ppch[i+1]; ppch[i+1]=help; ok=0; } } }while (!ok); } void free_m(char **ppch,int n_words){ int i; for(i=0;i<n_words;i++){ free(ppch[i]); } free(ppch); }
  • 37. int main(){ int n_words=0, n_el=NUM ; char buf[251], **ppch; FILE *f; if((f=fopen(&quot;b.txt&quot;,&quot;rt&quot;))==NULL){ printf (&quot;The file cannot be readn&quot;); return 2; } if ( (ppch = (char **)malloc( n_el*sizeof(char*)))== NULL){ printf(&quot;No memoryn&quot;); return 3; } while(!feof(f)) { if( fscanf(f,&quot;%250s&quot;,buf) == EOF){ break; } if(!exist(ppch,n_words,buf)){ if((ppch=insert(ppch, &n_words,&n_el,buf))==NULL){ printf(&quot;No memoryn&quot;); return 3; } } } sort(ppch, n_words); prt(ppch, n_words); free_m(ppch,n_words); return 0; } alfa alfa tita gama beta alfa beta gama tita