Algorithmique & Codage et Representation de l'information 2016/2017
Saturday, 2 June 2018
Thursday, 3 May 2018
Tuesday, 6 June 2017
Sunday, 7 May 2017
TP14, codes sources
Programme 1:
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel; struct objet *suiv;} tplace;
tplace *tete,*ptr;
int i,n;
int main(){
printf(" Nbr elem : ");
scanf("%d",&n);
if(n>0){
tete=malloc(sizeof(tplace));
if(tete){
printf(" elem 1: ");
scanf("%d",&(tete->inf));
tete->sentinel='@';
tete->suiv=NULL;
}else{printf(" memoire insuf, arret!"); return 1;}
};
ptr=tete;
for(i=1;i<n;i++){
ptr->suiv=malloc(sizeof(tplace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}else{printf(" memoire insuf, arret!"); return 1;}
}
printf("tete:");
while(tete!=0){
ptr=tete;
tete=tete->suiv;
printf("[%d]-->",ptr->inf);
ptr->suiv=0;
free(ptr);
ptr=0;
}
printf("<NUL>");
return 0;
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel;struct objet *suiv;} tPlace;
int creatList(tPlace **,int),
affichLiberList(tPlace *);
tPlace *tete,*ptr;
int n;
int main()
{
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
creatList(&tete,n);
affichLiberList(tete);
tete=NULL;
return 0;
}
//Affichage et liberation;
int affichLiberList(tPlace *tete){
printf("tete:");
while(tete){
ptr=tete;
tete=tete->suiv;
printf("[%d]-->",ptr->inf);
ptr->suiv=0;
free(ptr);
ptr=0;
}
printf("<NUL>");
return 0;
}
//creation
int creatList(tPlace **tete,int n){
int i;
if(n>0){
*tete=malloc(sizeof(tPlace));
if(*tete){
printf(" elem 1: ");
scanf("%d",&((*tete)->inf));
(*tete)->sentinel='@';
(*tete)->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return 1;}
}
ptr=*tete;
for(i=1;i<n;i++){
ptr1=ptr->suiv=malloc(sizeof(tPlace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return 1;}
}
return 0;
}
Programme 3:
int creatList(tPlace **,int),
affichList(tPlace *),
inserWrong(tPlace *,int val,int pos);
tPlace *tete; int n,val,pos;
int main(){
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
printf(" Val a inserer : ");
scanf("%d",&val);
printf(" Position : ");
scanf("%d",&pos);
creatList(&tete,n);
inserWrong(tete,val,pos);
affichList(tete);
tete=NULL;
return 0;
}
int inserWrong(tPlace *tete,int val,int pos){
tPlace *ptr,*ptr1,*ptrVal; int comp=1;
while(tete && (comp<pos)){
ptr=tete;
tete=tete->suiv;
comp++;
}
ptrVal=(tPlace *)malloc(sizeof(tPlace));
if(ptrVal){
ptrVal->inf=val;
ptrVal->sentinel='@';
ptr->suiv=ptrVal;
ptrVal->suiv=tete;
}else{printf("L'insertion a echouee, memoire insuf"); return 1;}
return 0;
}
//Affichage
int affichList(tPlace *tete){
//A definir
}
//creation
int creatList(tPlace **tete,int n){
//voir programme 2
}
Programme 4: creatList() evitant int**
(de toute façon vous devez maitriser int** car des fois incontournable)
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel;struct objet *suiv;} tPlace;
int affichList(tPlace *);
tPlace *creatList(tPlace *,int);
tPlace *tete; int n,val,pos;
int main(){
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
tete=creatList(tete,n);
affichList(tete);
tete=NULL;
return 0;
}
int affichList(tPlace *tete){
//a definir
}
//creation
tPlace *creatList(tPlace *tete,int n){
tPlace *ptr; int i;
tete=0;
if(n>0){
tete=malloc(sizeof(tPlace));
if(tete){
printf(" elem 1: ");
scanf("%d",&(tete->inf));
tete->sentinel='@';
tete->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return NULL;}
}
ptr=tete;
for(i=1;i<n;i++){
ptr->suiv=malloc(sizeof(tPlace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return NULL;}
}
return tete;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel; struct objet *suiv;} tplace;
tplace *tete,*ptr;
int i,n;
int main(){
printf(" Nbr elem : ");
scanf("%d",&n);
if(n>0){
tete=malloc(sizeof(tplace));
if(tete){
printf(" elem 1: ");
scanf("%d",&(tete->inf));
tete->sentinel='@';
tete->suiv=NULL;
}else{printf(" memoire insuf, arret!"); return 1;}
};
ptr=tete;
for(i=1;i<n;i++){
ptr->suiv=malloc(sizeof(tplace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}else{printf(" memoire insuf, arret!"); return 1;}
}
printf("tete:");
while(tete!=0){
ptr=tete;
tete=tete->suiv;
printf("[%d]-->",ptr->inf);
ptr->suiv=0;
free(ptr);
ptr=0;
}
printf("<NUL>");
return 0;
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel;struct objet *suiv;} tPlace;
int creatList(tPlace **,int),
affichLiberList(tPlace *);
tPlace *tete,*ptr;
int n;
int main()
{
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
creatList(&tete,n);
affichLiberList(tete);
tete=NULL;
return 0;
}
//Affichage et liberation;
int affichLiberList(tPlace *tete){
printf("tete:");
while(tete){
ptr=tete;
tete=tete->suiv;
printf("[%d]-->",ptr->inf);
ptr->suiv=0;
free(ptr);
ptr=0;
}
printf("<NUL>");
return 0;
}
//creation
int creatList(tPlace **tete,int n){
int i;
if(n>0){
*tete=malloc(sizeof(tPlace));
if(*tete){
printf(" elem 1: ");
scanf("%d",&((*tete)->inf));
(*tete)->sentinel='@';
(*tete)->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return 1;}
}
ptr=*tete;
for(i=1;i<n;i++){
ptr1=ptr->suiv=malloc(sizeof(tPlace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return 1;}
}
return 0;
}
Programme 3:
int creatList(tPlace **,int),
affichList(tPlace *),
inserWrong(tPlace *,int val,int pos);
tPlace *tete; int n,val,pos;
int main(){
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
printf(" Val a inserer : ");
scanf("%d",&val);
printf(" Position : ");
scanf("%d",&pos);
creatList(&tete,n);
inserWrong(tete,val,pos);
affichList(tete);
tete=NULL;
return 0;
}
int inserWrong(tPlace *tete,int val,int pos){
tPlace *ptr,*ptr1,*ptrVal; int comp=1;
while(tete && (comp<pos)){
ptr=tete;
tete=tete->suiv;
comp++;
}
ptrVal=(tPlace *)malloc(sizeof(tPlace));
if(ptrVal){
ptrVal->inf=val;
ptrVal->sentinel='@';
ptr->suiv=ptrVal;
ptrVal->suiv=tete;
}else{printf("L'insertion a echouee, memoire insuf"); return 1;}
return 0;
}
//Affichage
int affichList(tPlace *tete){
//A definir
}
//creation
int creatList(tPlace **tete,int n){
//voir programme 2
}
Programme 4: creatList() evitant int**
(de toute façon vous devez maitriser int** car des fois incontournable)
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel;struct objet *suiv;} tPlace;
int affichList(tPlace *);
tPlace *creatList(tPlace *,int);
tPlace *tete; int n,val,pos;
int main(){
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
tete=creatList(tete,n);
affichList(tete);
tete=NULL;
return 0;
}
int affichList(tPlace *tete){
//a definir
}
//creation
tPlace *creatList(tPlace *tete,int n){
tPlace *ptr; int i;
tete=0;
if(n>0){
tete=malloc(sizeof(tPlace));
if(tete){
printf(" elem 1: ");
scanf("%d",&(tete->inf));
tete->sentinel='@';
tete->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return NULL;}
}
ptr=tete;
for(i=1;i<n;i++){
ptr->suiv=malloc(sizeof(tPlace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return NULL;}
}
return tete;
}
Tuesday, 2 May 2017
TP13, codes sources
Programme 1:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x=1,y=5,*pt1,*pt2;
pt1=&x;
*pt1=2;
pt1=&y;
*pt1=3;
pt2=pt1+1;
printf("adresse de x en hexa:%p \n celle de y:%p \n pt1 contient: %p"
"\n adresse de pt1:%p \n pt2 contient: %p \n adresse de pt2:%p",
&x,&y,pt1,&pt1,pt2,&pt2);
printf("\n taille d'une variable pointeur dans ma machine:%d",sizeof(pt1));
return 0;
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
#define MAX 7
//Ne pas changer la valeur de MAX
int tab[MAX];
int main(){
int *ptr,i,val;
//tab unidim
val=0;
ptr=tab; *ptr=(val+=10);
ptr++; *ptr=(val+=10);
ptr=&tab[3]; ptr--; *ptr=(val+=10);
ptr=tab+3; *ptr=(val+=10);
ptr=tab; *(ptr+4)=(val+=10);
ptr[5]=(val+=10); *(tab+6)=(val+=10);
printf("\n Tableau :\n");
for(i=0;i<MAX;i++)printf("\t %d",tab[i]);
return 0;
}
Programme 3:
#include <stdio.h>
#include <stdlib.h>
#define MAX 7
//Ne pas changer la valeur de MAX
int mat[2][MAX];
int main(){
int *ptr,i,j,val,*ptrDebutMat;
//tab bidim
val=0;
ptr=ptrDebutMat=(int*)mat;
*ptr=(val+=10);
ptr++; *ptr=(val+=10);
ptr=&mat[0][3]; ptr--; *ptr=(val+=10);
ptr=ptrDebutMat+3; *ptr=(val+=10);
ptr=ptrDebutMat; *(ptr+4)=(val+=10);
ptr[5]=(val+=10);
*(ptrDebutMat+6)=(val+=10); //On est arrive au bord de la 1iere ligne ...
*(ptrDebutMat+MAX)=(val+=10); //Mais ceci est permis. Why?
for(j=8;j<2*MAX;j++)*(ptrDebutMat+j)=(val+=10);
printf("\n Matrice :\n");
for(i=0;i<2;i++){
for(j=0;j<MAX;j++){
printf("\t %4d",mat[i][j]);
}
printf("\n");
}
return 0;
}
Programme 4: Je n'ai pas eu le temps de l'ajouter. Executer puis comprendre comment il fait ce qu'il fait.
#include <stdio.h>
#include <stdlib.h>
void permut(int**,int**);
int x=1,y=5,*pt1=&x,*pt2=&y;
int main()
{
printf("\nAvant permut : *pt1=%d et *pt2=%d",*pt1,*pt2);
permut(&pt1,&pt2);
printf("\nApres permut : *pt1=%d et *pt2=%d",*pt1,*pt2);
return 0;
}
void permut(int **ptr1,int **ptr2){
int *ptr;
ptr=*ptr1;*ptr1=*ptr2;*ptr2=ptr;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x=1,y=5,*pt1,*pt2;
pt1=&x;
*pt1=2;
pt1=&y;
*pt1=3;
pt2=pt1+1;
printf("adresse de x en hexa:%p \n celle de y:%p \n pt1 contient: %p"
"\n adresse de pt1:%p \n pt2 contient: %p \n adresse de pt2:%p",
&x,&y,pt1,&pt1,pt2,&pt2);
printf("\n taille d'une variable pointeur dans ma machine:%d",sizeof(pt1));
return 0;
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
#define MAX 7
//Ne pas changer la valeur de MAX
int tab[MAX];
int main(){
int *ptr,i,val;
//tab unidim
val=0;
ptr=tab; *ptr=(val+=10);
ptr++; *ptr=(val+=10);
ptr=&tab[3]; ptr--; *ptr=(val+=10);
ptr=tab+3; *ptr=(val+=10);
ptr=tab; *(ptr+4)=(val+=10);
ptr[5]=(val+=10); *(tab+6)=(val+=10);
printf("\n Tableau :\n");
for(i=0;i<MAX;i++)printf("\t %d",tab[i]);
return 0;
}
Programme 3:
#include <stdio.h>
#include <stdlib.h>
#define MAX 7
//Ne pas changer la valeur de MAX
int mat[2][MAX];
int main(){
int *ptr,i,j,val,*ptrDebutMat;
//tab bidim
val=0;
ptr=ptrDebutMat=(int*)mat;
*ptr=(val+=10);
ptr++; *ptr=(val+=10);
ptr=&mat[0][3]; ptr--; *ptr=(val+=10);
ptr=ptrDebutMat+3; *ptr=(val+=10);
ptr=ptrDebutMat; *(ptr+4)=(val+=10);
ptr[5]=(val+=10);
*(ptrDebutMat+6)=(val+=10); //On est arrive au bord de la 1iere ligne ...
*(ptrDebutMat+MAX)=(val+=10); //Mais ceci est permis. Why?
for(j=8;j<2*MAX;j++)*(ptrDebutMat+j)=(val+=10);
printf("\n Matrice :\n");
for(i=0;i<2;i++){
for(j=0;j<MAX;j++){
printf("\t %4d",mat[i][j]);
}
printf("\n");
}
return 0;
}
Programme 4: Je n'ai pas eu le temps de l'ajouter. Executer puis comprendre comment il fait ce qu'il fait.
#include <stdio.h>
#include <stdlib.h>
void permut(int**,int**);
int x=1,y=5,*pt1=&x,*pt2=&y;
int main()
{
printf("\nAvant permut : *pt1=%d et *pt2=%d",*pt1,*pt2);
permut(&pt1,&pt2);
printf("\nApres permut : *pt1=%d et *pt2=%d",*pt1,*pt2);
return 0;
}
void permut(int **ptr1,int **ptr2){
int *ptr;
ptr=*ptr1;*ptr1=*ptr2;*ptr2=ptr;
}
Monday, 10 April 2017
TP 12, Codes sources
- Programme 1: Création
#include <stdlib.h>
typedef struct {int jour,mois,annee;} tDate;
typedef struct {char nom[20],prenom[20],poste[20]; tDate date; } tEmploye;
typedef struct {char poste[20]; float salaire; } tPoste;
int getFichEmploye(char *);
int main(){
getFichEmploye("listEmploye.txt");
return 0;
}
int getFichEmploye(char *nomFichier){
FILE *ptFichier;
tEmploye employe;
int comp,nbrEmploye;
printf("Donner le nbr d'employes : ");
scanf("%d",&nbrEmploye);
ptFichier=fopen(nomFichier,"wt");
if(!ptFichier){printf("\n La creation de fichier a echouee!");return 1;}
for(comp=0;comp<nbrEmploye;comp++){
printf("Entrez le nom de la personne N%d: ",comp+1);
scanf("%s", employe.nom); // sans espaces
fprintf(ptFichier, "%s\t", employe.nom);
printf("Entrez le prenom de %s : ",employe.nom);
scanf("%s", employe.prenom);
fprintf(ptFichier, "%s\t",employe.prenom);
printf("Donner le poste de %s %s:",employe.nom,employe.prenom);
scanf("%s",employe.poste);
fprintf(ptFichier, "%s\t",employe.poste);
printf("Donner la date de recrut de %s %s (jj/mm/yyyy):",employe.nom,employe.prenom);
scanf("%d/%d/%d",&(employe.date.jour),&(employe.date.mois),&(employe.date.annee));
fprintf(ptFichier, "%d/%d/%d\n",employe.date.jour,employe.date.mois,employe.date.annee);
}
fclose(ptFichier);
return 0;
}
- Programme 2: Lecture
#include <stdlib.h>
typedef struct {int jour,mois,annee;} tDate;
typedef struct {char nom[20],prenom[20],poste[20];tDate date;} tEmploye;
int affichListEmploye(char *);
int main(){
affichListEmploye("listEmploye.txt");//ajouter le chemin
return 0;
}
int affichListEmploye(char *fichEmploye)
{
FILE *ptFichEmploye;
tEmploye employe={"","","",{0,0,0}};int i=1;
ptFichEmploye = fopen(fichEmploye,"rt");
if(!ptFichEmploye){
printf("Impossible d'ouvrir le ficher %s, arret d'execution",fichEmploye);
return 1;
}
while(!feof(ptFichEmploye)){ //on suppose le fichier non vide
fscanf(ptFichEmploye,"%s\t",employe.nom);
fscanf(ptFichEmploye,"%s\t",employe.prenom);
fscanf(ptFichEmploye,"%s\t",employe.poste);
fscanf(ptFichEmploye,"%d/%d/%d\n",&(employe.date.jour),&(employe.date.mois),&(employe.date.annee));
printf("\nNom%3d:%s\tPrenom:%s\tPoste:%s",i++, employe.nom,employe.prenom,employe.poste);
printf("\tdate recrut:%d/%d/%d",employe.date.jour,employe.date.mois,employe.date.annee);
}
fclose(ptFichEmploye);
return 0;
}
- Remarks/Further reading
- Sous linux: affichListEmploye("/votre/chemin/listEmploye.txt");
- Sous Windows : dans le chemin, ne pas oublier de doubler les \ (corrigé suite a la remarque de IcyRaceHoeses)
2. Resolution du pb de fichier existant mais vide: On remplace les lignes 20 à 27 par:
while(1){
fscanf(ptFichEmploye,"%s\t",employe.nom);
if(feof(ptFichEmploye)){printf("\n fichier vide, arret d'execution"); fclose(ptFichEmploye);return 1;}
fscanf(ptFichEmploye,"%s\t",employe.prenom);
fscanf(ptFichEmploye,"%s\t",employe.poste);
fscanf(ptFichEmploye,"%d/%d/%d\n",&(employe.date.jour),&(employe.date.mois), &(employe.date.annee));
printf("\nNom%3d:%s\tPrenom:%s\tPoste:%s",i++, employe.nom,employe.prenom,employe.poste);
printf("\tdate recrut:%d/%d/%d",employe.date.jour,employe.date.mois,employe.date.annee);
}
3. EOF bien expliqué:
https://latedev.wordpress.com/2012/12/04/all-about-eof/
4. Gestion de repertoires en C (hors programme MI)
http://www.thegeekstuff.com/2012/06/c-directory/
while(1){
fscanf(ptFichEmploye,"%s\t",employe.nom);
if(feof(ptFichEmploye)){printf("\n fichier vide, arret d'execution"); fclose(ptFichEmploye);return 1;}
fscanf(ptFichEmploye,"%s\t",employe.prenom);
fscanf(ptFichEmploye,"%s\t",employe.poste);
fscanf(ptFichEmploye,"%d/%d/%d\n",&(employe.date.jour),&(employe.date.mois), &(employe.date.annee));
printf("\nNom%3d:%s\tPrenom:%s\tPoste:%s",i++, employe.nom,employe.prenom,employe.poste);
printf("\tdate recrut:%d/%d/%d",employe.date.jour,employe.date.mois,employe.date.annee);
}
3. EOF bien expliqué:
https://latedev.wordpress.com/2012/12/04/all-about-eof/
4. Gestion de repertoires en C (hors programme MI)
http://www.thegeekstuff.com/2012/06/c-directory/
Thursday, 9 March 2017
TP 11, codes sources
Programme 1:
#include <stdio.h>
#include <stdlib.h>
typedef struct {int x;int y;}tPoint;
tPoint p1,p2={0,300},p3;
int main(){
p1.x=150;
p1.y=103;
printf("Les coordonnees du point p1 sont (%d,%d)\n",p1.x,p1.y);
printf("Les coordonnees du point p2 sont (%d,%d)\n",p2.x,p2.y);
printf("Saisir les coordonnees du point p3\n");
scanf("%d %d",&(p3.x),&(p3.y));
printf("Les coordonnees du point p3 sont donc (%d,%d)\n",p3.x,p3.y);
return 0;
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int jour;
int mois;
int annee;
}tDate;
typedef struct {
int id;
char nom[21];
tDate ddn;
float note[3];
float moy;
}tEtudiant;
tEtudiant student;
void getInfoEtudiant(tEtudiant *etudiant);
void affichInfoEtudiant(tEtudiant etudiant);
int main(){
getInfoEtudiant(&student);
affichInfoEtudiant(student);
//getListEtudiant()
//affichListEtudiant()
//getInfoEtudFromList()
//bestStudent()
return 0;
}
void getInfoEtudiant(tEtudiant *etudiant){
int i;
printf("\nIdentifiant:");
scanf("%d",&(*etudiant).id);
printf("Nom:");
scanf("%s",(*etudiant).nom);
printf("jour de naissance:");
scanf("%d",&(*etudiant).ddn.jour);
printf("mois de naissance:");
scanf("%d",&(*etudiant).ddn.mois);
printf("annee de naissance:");
scanf("%d",&(*etudiant).ddn.annee);
(*etudiant).moy=0;
for(i=0;i<3;i++){
printf("Note%d:",i+1);
scanf("%f",&((*etudiant).note[i]));
(*etudiant).moy+=(*etudiant).note[i]/3;
}
}
void affichInfoEtudiant(tEtudiant etudiant){
int i;
printf("\nIdentifiant:%d",etudiant.id);
printf("\nNom:%s",etudiant.nom);
printf("\njour de naissance:%d",etudiant.ddn.jour);
printf("\nmois de naissance:%d",etudiant.ddn.mois);
printf("\nannee de naissance:%d",etudiant.ddn.annee);
for(i=0;i<3;i++){
printf("\nNote%d:%.2f",i+1,(etudiant.note[i]));
}
printf("\nMoyenne:%.2f",etudiant.moy);
}
Programme 3:
#include <stdio.h>
#include <stdlib.h>
/*variante1:declaration de structure seulement (ajouter / au debut pour de-commenter)
struct tPoint{int x;int y;}; //
//puis instanciation
struct tPoint p1,p2={0,300},p3; //Enlever struct genere une erreur en C
//*/
/*variante2:declaration de structure et en meme temps instanciation de p1 et p2 (idem)
struct tPoint{int x;int y;} p1,p2={0,300};
//puis instanciation de p3
struct tPoint p3;
//*/
/*variante3:declaration de structure anonyme et en meme temps instanciation des point (idem)
struct {int x;int y;} p1,p2={0,300},p3;
//*/
/*variante4:declaration en associant un nom de type a une structure non anonyme (idem)
typedef struct stPoint{int x;int y;}tPoint;
//puis instanciation avec 2 possibilites
tPoint p1,p2={0,300}; //on n'a pas besoin de struct car tpoint est un alias de struct stPoint
struct stPoint p3; //ici on en a
//*/
//Je vous conseille de maitriser au moin cette derniere version
//*variante5:declaration en associant un nom de type a une structure anonyme (enlever / au debut pour commenter)
typedef struct {int x;int y;}tPoint;
//puis instanciation
tPoint p1,p2={0,300},p3;
//*/
int main(){
p1.x=150;p1.y=103;
printf("Les coordonnees du point p1 sont (%d,%d)\n",p1.x,p1.y);
printf("Les coordonnees du point p2 sont (%d,%d)\n",p2.x,p2.y);
printf("Saisir les coordonnees du point p3\n");
scanf("%d %d",&(p3.x),&(p3.y));
printf("Les coordonnees du point p3 sont donc (%d,%d)\n",p3.x,p3.y);
return 0;
}
Programme 4:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct {
char titre_livre[16];
char auteur[16];
char editeur[16];
int annee;
int nbr_page;
} tRef;
tRef listRef[50];
void remplir(int n,tRef listRef[50]),
affiche(int n,tRef listRef[50]),
triRef(int n,tRef listRef[n],int choix);
int main(){
int n,choix;
printf("Donnez le nombre de references biblio <50");
scanf("%d",&n);
remplir(n,listRef);
affiche(n,listRef);
do{
printf("\nEntrer : \n 1 pour le tri par titre"
"\n 2 pour le tri par auteur"
"\n 3 pour le tri par editeur"
"\n 4 pour le tri par annee"
"\n 5 pour le tri par nbr de page "
"\n 6 quitter "
"\n votre choix --------------------------->");
scanf("%d",&choix);
if(choix!=6){
triRef(n,listRef,choix);
affiche(n,listRef);
}
}while(choix!=6);
return 0;
}
void remplir(int n,tRef listRef[50]){
int i;
printf("\n Introduire des chaines de caracteres <15 et sans espace \n");
for(i=0;i<n;i++){
printf("Donnez le titre N°%d:",i+1);
scanf("%s",listRef[i].titre_livre);
printf("donnez le nom de l'auteur ");
scanf("%s",listRef[i].auteur);
printf("donnez le nom de l'editeur ");
scanf("%s",listRef[i].editeur);
printf("donnez l'annee de publication ");
scanf("%d",&(listRef[i].annee));
printf("donnez le nbr de page ");
scanf("%d",&(listRef[i].nbr_page));
}
}
void affiche(int n, tRef listRef[50]){
int i;
printf("\n____________________________________________________________________");
printf("\n|Titre |Auteur |Editeur |Annee |Nbr pages |");
printf("\n--------------------------------------------------------------------");
for(i=0;i<n;i++){
printf("\n|%15s|",listRef[i].titre_livre);
printf("%15s|",listRef[i].auteur);
printf("%15s|",listRef[i].editeur);
printf("%5d |",listRef[i].annee);
printf("%6d |",listRef[i].nbr_page);
}
printf("\n--------------------------------------------------------------------");
}
void triRef(int n,tRef listRef[50],int choix){
int i,j;
tRef tmp;
switch (choix){
case 1:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(strcmp(listRef[i].titre_livre,listRef[j].titre_livre)>0){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
case 2:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(strcmp(listRef[i].auteur,listRef[j].auteur)>0){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
case 3:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(strcmp(listRef[i].editeur,listRef[j].editeur)>0){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
case 4:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if (listRef[i].annee>listRef[j].annee){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
case 5:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(listRef[i].nbr_page>listRef[j].nbr_page){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
default:printf("le choix n'est pas valide");
}
}
Une autre version de triRef a verifier.
void permutRef(tRef *ref1,tRef *ref2){
tRef tmpRef;
tmpRef=*ref1;*ref1=*ref2;*ref2=tmpRef;
}
void triRefV2(int n,tRef listRef[50],int choix){
int i,j;
if((choix>5)||(choix<1)){printf("le choix n'est pas valide");}
else{
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
switch (choix){
case 1:
if(strcmp(listRef[i].titre_livre,listRef[j].titre_livre)>0){permutRef(&listRef[i],&listRef[j]);}
break;
case 2:
if(strcmp(listRef[i].auteur,listRef[j].auteur)>0){permutRef(&listRef[i],&listRef[j]);}
break;
case 3:
if(strcmp(listRef[i].editeur,listRef[j].editeur)>0){permutRef(&listRef[i],&listRef[j]);}
break;
case 4:
if (listRef[i].annee>listRef[j].annee){permutRef(&listRef[i],&listRef[j]);}
break;
case 5:
if(listRef[i].nbr_page>listRef[j].nbr_page){permutRef(&listRef[i],&listRef[j]);}
}
}
}
}
}
#include <stdio.h>
#include <stdlib.h>
typedef struct {int x;int y;}tPoint;
tPoint p1,p2={0,300},p3;
int main(){
p1.x=150;
p1.y=103;
printf("Les coordonnees du point p1 sont (%d,%d)\n",p1.x,p1.y);
printf("Les coordonnees du point p2 sont (%d,%d)\n",p2.x,p2.y);
printf("Saisir les coordonnees du point p3\n");
scanf("%d %d",&(p3.x),&(p3.y));
printf("Les coordonnees du point p3 sont donc (%d,%d)\n",p3.x,p3.y);
return 0;
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int jour;
int mois;
int annee;
}tDate;
typedef struct {
int id;
char nom[21];
tDate ddn;
float note[3];
float moy;
}tEtudiant;
tEtudiant student;
void getInfoEtudiant(tEtudiant *etudiant);
void affichInfoEtudiant(tEtudiant etudiant);
int main(){
getInfoEtudiant(&student);
affichInfoEtudiant(student);
//getListEtudiant()
//affichListEtudiant()
//getInfoEtudFromList()
//bestStudent()
return 0;
}
void getInfoEtudiant(tEtudiant *etudiant){
int i;
printf("\nIdentifiant:");
scanf("%d",&(*etudiant).id);
printf("Nom:");
scanf("%s",(*etudiant).nom);
printf("jour de naissance:");
scanf("%d",&(*etudiant).ddn.jour);
printf("mois de naissance:");
scanf("%d",&(*etudiant).ddn.mois);
printf("annee de naissance:");
scanf("%d",&(*etudiant).ddn.annee);
(*etudiant).moy=0;
for(i=0;i<3;i++){
printf("Note%d:",i+1);
scanf("%f",&((*etudiant).note[i]));
(*etudiant).moy+=(*etudiant).note[i]/3;
}
}
void affichInfoEtudiant(tEtudiant etudiant){
int i;
printf("\nIdentifiant:%d",etudiant.id);
printf("\nNom:%s",etudiant.nom);
printf("\njour de naissance:%d",etudiant.ddn.jour);
printf("\nmois de naissance:%d",etudiant.ddn.mois);
printf("\nannee de naissance:%d",etudiant.ddn.annee);
for(i=0;i<3;i++){
printf("\nNote%d:%.2f",i+1,(etudiant.note[i]));
}
printf("\nMoyenne:%.2f",etudiant.moy);
}
Programme 3:
#include <stdio.h>
#include <stdlib.h>
/*variante1:declaration de structure seulement (ajouter / au debut pour de-commenter)
struct tPoint{int x;int y;}; //
//puis instanciation
struct tPoint p1,p2={0,300},p3; //Enlever struct genere une erreur en C
//*/
/*variante2:declaration de structure et en meme temps instanciation de p1 et p2 (idem)
struct tPoint{int x;int y;} p1,p2={0,300};
//puis instanciation de p3
struct tPoint p3;
//*/
/*variante3:declaration de structure anonyme et en meme temps instanciation des point (idem)
struct {int x;int y;} p1,p2={0,300},p3;
//*/
/*variante4:declaration en associant un nom de type a une structure non anonyme (idem)
typedef struct stPoint{int x;int y;}tPoint;
//puis instanciation avec 2 possibilites
tPoint p1,p2={0,300}; //on n'a pas besoin de struct car tpoint est un alias de struct stPoint
struct stPoint p3; //ici on en a
//*/
//Je vous conseille de maitriser au moin cette derniere version
//*variante5:declaration en associant un nom de type a une structure anonyme (enlever / au debut pour commenter)
typedef struct {int x;int y;}tPoint;
//puis instanciation
tPoint p1,p2={0,300},p3;
//*/
int main(){
p1.x=150;p1.y=103;
printf("Les coordonnees du point p1 sont (%d,%d)\n",p1.x,p1.y);
printf("Les coordonnees du point p2 sont (%d,%d)\n",p2.x,p2.y);
printf("Saisir les coordonnees du point p3\n");
scanf("%d %d",&(p3.x),&(p3.y));
printf("Les coordonnees du point p3 sont donc (%d,%d)\n",p3.x,p3.y);
return 0;
}
Programme 4:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct {
char titre_livre[16];
char auteur[16];
char editeur[16];
int annee;
int nbr_page;
} tRef;
tRef listRef[50];
void remplir(int n,tRef listRef[50]),
affiche(int n,tRef listRef[50]),
triRef(int n,tRef listRef[n],int choix);
int main(){
int n,choix;
printf("Donnez le nombre de references biblio <50");
scanf("%d",&n);
remplir(n,listRef);
affiche(n,listRef);
do{
printf("\nEntrer : \n 1 pour le tri par titre"
"\n 2 pour le tri par auteur"
"\n 3 pour le tri par editeur"
"\n 4 pour le tri par annee"
"\n 5 pour le tri par nbr de page "
"\n 6 quitter "
"\n votre choix --------------------------->");
scanf("%d",&choix);
if(choix!=6){
triRef(n,listRef,choix);
affiche(n,listRef);
}
}while(choix!=6);
return 0;
}
void remplir(int n,tRef listRef[50]){
int i;
printf("\n Introduire des chaines de caracteres <15 et sans espace \n");
for(i=0;i<n;i++){
printf("Donnez le titre N°%d:",i+1);
scanf("%s",listRef[i].titre_livre);
printf("donnez le nom de l'auteur ");
scanf("%s",listRef[i].auteur);
printf("donnez le nom de l'editeur ");
scanf("%s",listRef[i].editeur);
printf("donnez l'annee de publication ");
scanf("%d",&(listRef[i].annee));
printf("donnez le nbr de page ");
scanf("%d",&(listRef[i].nbr_page));
}
}
void affiche(int n, tRef listRef[50]){
int i;
printf("\n____________________________________________________________________");
printf("\n|Titre |Auteur |Editeur |Annee |Nbr pages |");
printf("\n--------------------------------------------------------------------");
for(i=0;i<n;i++){
printf("\n|%15s|",listRef[i].titre_livre);
printf("%15s|",listRef[i].auteur);
printf("%15s|",listRef[i].editeur);
printf("%5d |",listRef[i].annee);
printf("%6d |",listRef[i].nbr_page);
}
printf("\n--------------------------------------------------------------------");
}
void triRef(int n,tRef listRef[50],int choix){
int i,j;
tRef tmp;
switch (choix){
case 1:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(strcmp(listRef[i].titre_livre,listRef[j].titre_livre)>0){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
case 2:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(strcmp(listRef[i].auteur,listRef[j].auteur)>0){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
case 3:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(strcmp(listRef[i].editeur,listRef[j].editeur)>0){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
case 4:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if (listRef[i].annee>listRef[j].annee){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
case 5:
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(listRef[i].nbr_page>listRef[j].nbr_page){
tmp=listRef[i];listRef[i]=listRef[j];listRef[j]=tmp;
}
}
}
break;
default:printf("le choix n'est pas valide");
}
}
Une autre version de triRef a verifier.
void permutRef(tRef *ref1,tRef *ref2){
tRef tmpRef;
tmpRef=*ref1;*ref1=*ref2;*ref2=tmpRef;
}
void triRefV2(int n,tRef listRef[50],int choix){
int i,j;
if((choix>5)||(choix<1)){printf("le choix n'est pas valide");}
else{
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
switch (choix){
case 1:
if(strcmp(listRef[i].titre_livre,listRef[j].titre_livre)>0){permutRef(&listRef[i],&listRef[j]);}
break;
case 2:
if(strcmp(listRef[i].auteur,listRef[j].auteur)>0){permutRef(&listRef[i],&listRef[j]);}
break;
case 3:
if(strcmp(listRef[i].editeur,listRef[j].editeur)>0){permutRef(&listRef[i],&listRef[j]);}
break;
case 4:
if (listRef[i].annee>listRef[j].annee){permutRef(&listRef[i],&listRef[j]);}
break;
case 5:
if(listRef[i].nbr_page>listRef[j].nbr_page){permutRef(&listRef[i],&listRef[j]);}
}
}
}
}
}
Subscribe to:
Posts (Atom)