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]);}
}
}
}
}
}
Friday, 3 March 2017
Récursivité : Analyse recursive
Pour résoudre un problème de manière récursive, on réalise une anlyse
recursive.
Etape
1, Recherche d'un cas trivial : celui qui peut être résolu
sans appel récursif (le critère d’arrêt)
;
Étape
2, Paramétrage du problème : déterminer les paramètres
en particulier la taille qui doit décroître a chaque appel
récursif (converger vers le cas trivial);
Étape
3, Décomposition du cas général : ramener la résolution
du problème a la résolution d'un ou de plusieurs problèmes de même
nature et de taille plus petite (la partie
récursive);
Exemple : Tour
de Hanoї [Lucas
1883]:
Problème :
64 disques étant posés les uns sur les autres par ordre de taille
décroissant sur un socle A, les transférer sur un socle B en
utilisant un socle C en ne prenant qu'un disque a la fois pour le
déposer sur un disque plus grand.
Réponse :
1.
Analyse recursive
Étape 1 : avoir un seul disque (i.e. n=1) est un cas trivial car
il suffit de le déplacer directement depuis le socle de départ vers
le socle d’arrivée. D’où le critère d’arrêt :
si
n=1 alors déplacer un disque du socle A vers le socle B
Étape 2 : n est le nombre de disques, socle de départ, socle
d’arrivée et socle intermédiaire sont les paramètres. D’où :
Action Hanoi(E/ n : entier ; E/ depart,arrivee,intermed :
socle ) ;
Étapes
3 : Un socle contenant un disque plus grand que tous les
autres est assimilable pour le transfert de ceux ci a une position
vide. D’où la décomposition :
n
disques peuvent être transférés de A vers B en :
- transférant n-1 disques de A vers C en utilisant B comme intermédiaire;
- déplacer le disque restant de A vers B ;
- transférant les n-1 disques de C vers B en utilisant A comme intermédiaire.
2.
Algorithme
Action
deplacer (E/x,y:caractere);
debut
ecrire('Deplacer
un disque du socle',x,'vers le socle',y);
fin ;
Action
Hanoi(E/ n:entier ; E/ x,y,z : caractere) ;
debut
si
n=1 alors
deplacer(x,y) ;
sinon
Hanoi(n-1,x,z,y) ;
deplacer(x,y) ;
Hanoi(n-1,z,y,x) ;
fsi ;
fin ;
Algorithme
TourHanoi ;
debut
Hanoi(64,'A','B','C') ;
fin.
3. En résumé [fom Wikipedia]:
« The power of recursion evidently lies in the possibility of defining an infinite set of objects by a finite statement. In the same manner, an infinite number of computations can be described by a finite recursive program, even if this program contains no explicit repetitions. » Niklaus Wirth, Algorithms + Data Structures = Programs.
« La puissance de la récursivité réside évidemment dans la possibilité de définir des ensembles infinis d'objets par une affirmation finie. De façon similaire, un nombre infini d'étapes de calcul peut être décrit par un programme récursif fini, même si ce programme ne contient aucune répétition explicite. »
Bibliography
and/or further reading:
1.
Meyer B. et Baudoin C., Méthodes de programmation. Eyrolles 1984.
2.
http://en.wikipedia.org/wiki/Tower_of_Hanoi
3. http://www.fil.univ-lille1.fr/~sedoglav/C/main019.html
Construction d'une unité centrale simple
L'organisation
matérielle des ordinateurs usuels suit l'architecture dite de Von
Neumann (de
Zuse ? Non pas de politique).
Dans celle-ci :
- La RAM sert a stocker les données et les programmes ;
- Une unité de commande donne les ordres et synchronise l’exécution des opérations dans l’unité de traitement du processeur central.
Bibliography and/or further reading
1. Introduction
a l'informatique. Tellier I. (http
://www.grappa.univ-lille3.fr/∼tellier/enseignement.html)
2. https://fr.wikipedia.org/wiki/Architecture_Harvard
3. http://fr.wikipedia.org/wiki/Discussion:Konrad_Zuse
4. http://en.wikipedia.org/wiki/Konrad_Zuse
Friday, 24 February 2017
TP10, codes sources
Prg1:
#include <stdio.h>
#include <stdlib.h>
int multIter(int x,int y)
{
int prod=0;
for(;y>0;y--)prod+=x;
return prod;
}
int multRec(int x,int y)
{
if(y==0) return 0; //critere d'arret
return x+multRec(x,y-1); //sinon recursion
}
int main()
{
int a=11,b=3; //par exemple
char tmp;
printf("\nCode Iteratif: %d x %d = %d",a,b,multIter(a,b));
printf("\nTapez Entree SVP");scanf("%c",&tmp);
printf("\nCode Recursif: %d x %d = %d\n",a,b,multRec(a,b));
return 0;
}
Prg2:
#include <stdio.h>
#include <stdlib.h>
unsigned int nbrDisq;
void Hanoi(unsigned n, char x, char y,char z,unsigned matSocles[][3]),
deplacer (char x,char y, unsigned matSocles[][3]),
initMatSocles(unsigned matSocles[][3],unsigned nbrDisq),
modifMatSocles(char x,char y,unsigned matSocles[][3],unsigned nbrDisq),
affichMat(unsigned mat[][3],unsigned,unsigned);
int main()
{
printf("NbrDisques :");
scanf("%u",&nbrDisq);
unsigned matSocles[nbrDisq][3];
initMatSocles(matSocles,nbrDisq);
Hanoi(nbrDisq,'A','B','C',matSocles);
return 0;
}
void deplacer (char x, char y, unsigned matSocles[][3])
{
static unsigned mouvNbr=1;
printf("\n Mouvement %u : Deplacer un disque du socle %c vers le socle %c \n",mouvNbr++,x,y);
modifMatSocles(x,y,matSocles,nbrDisq);
affichMat(matSocles,nbrDisq,3);
}
void Hanoi(unsigned n,char x,char y,char z,unsigned matSocles[][3])
{
if (n>0){
Hanoi(n-1,x,z,y,matSocles);
deplacer(x,y,matSocles);
Hanoi(n-1,z,y,x,matSocles);
}
}
void initMatSocles(unsigned matSocles[][3],unsigned nbrDisq)
{
unsigned i;
for(i=0;i<nbrDisq;i++)matSocles[i][0]=i+1;
for(i=0;i<nbrDisq;i++){matSocles[i][1]=0;matSocles[i][2]=0;}
affichMat(matSocles,nbrDisq,3);
}
void modifMatSocles(char x,char y,unsigned matSocles[][3],unsigned nbrDisq)
{
unsigned i1,i2;
for(i1=0;(i1<nbrDisq)&&(matSocles[i1][x-65]==0);i1++){} //recherche du sommet du socle de depart
for(i2=0;(i2<nbrDisq)&&(matSocles[i2][y-65]==0);i2++){} //recherche du sommet d'arrivee
//transfert du disque
matSocles[i2-1][y-65]=matSocles[i1][x-65];//ajout dans l'arrivee
matSocles[i1][x-65]=0;//suppression dans le depart
}
void affichMat(unsigned mat[][3],unsigned n,unsigned m)
{
unsigned i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++)printf("%4d",mat[i][j]);
printf("\n");
}
}
#include <stdio.h>
#include <stdlib.h>
int multIter(int x,int y)
{
int prod=0;
for(;y>0;y--)prod+=x;
return prod;
}
int multRec(int x,int y)
{
if(y==0) return 0; //critere d'arret
return x+multRec(x,y-1); //sinon recursion
}
int main()
{
int a=11,b=3; //par exemple
char tmp;
printf("\nCode Iteratif: %d x %d = %d",a,b,multIter(a,b));
printf("\nTapez Entree SVP");scanf("%c",&tmp);
printf("\nCode Recursif: %d x %d = %d\n",a,b,multRec(a,b));
return 0;
}
Prg2:
#include <stdio.h>
#include <stdlib.h>
unsigned int nbrDisq;
void Hanoi(unsigned n, char x, char y,char z,unsigned matSocles[][3]),
deplacer (char x,char y, unsigned matSocles[][3]),
initMatSocles(unsigned matSocles[][3],unsigned nbrDisq),
modifMatSocles(char x,char y,unsigned matSocles[][3],unsigned nbrDisq),
affichMat(unsigned mat[][3],unsigned,unsigned);
int main()
{
printf("NbrDisques :");
scanf("%u",&nbrDisq);
unsigned matSocles[nbrDisq][3];
initMatSocles(matSocles,nbrDisq);
Hanoi(nbrDisq,'A','B','C',matSocles);
return 0;
}
void deplacer (char x, char y, unsigned matSocles[][3])
{
static unsigned mouvNbr=1;
printf("\n Mouvement %u : Deplacer un disque du socle %c vers le socle %c \n",mouvNbr++,x,y);
modifMatSocles(x,y,matSocles,nbrDisq);
affichMat(matSocles,nbrDisq,3);
}
void Hanoi(unsigned n,char x,char y,char z,unsigned matSocles[][3])
{
if (n>0){
Hanoi(n-1,x,z,y,matSocles);
deplacer(x,y,matSocles);
Hanoi(n-1,z,y,x,matSocles);
}
}
void initMatSocles(unsigned matSocles[][3],unsigned nbrDisq)
{
unsigned i;
for(i=0;i<nbrDisq;i++)matSocles[i][0]=i+1;
for(i=0;i<nbrDisq;i++){matSocles[i][1]=0;matSocles[i][2]=0;}
affichMat(matSocles,nbrDisq,3);
}
void modifMatSocles(char x,char y,unsigned matSocles[][3],unsigned nbrDisq)
{
unsigned i1,i2;
for(i1=0;(i1<nbrDisq)&&(matSocles[i1][x-65]==0);i1++){} //recherche du sommet du socle de depart
for(i2=0;(i2<nbrDisq)&&(matSocles[i2][y-65]==0);i2++){} //recherche du sommet d'arrivee
//transfert du disque
matSocles[i2-1][y-65]=matSocles[i1][x-65];//ajout dans l'arrivee
matSocles[i1][x-65]=0;//suppression dans le depart
}
void affichMat(unsigned mat[][3],unsigned n,unsigned m)
{
unsigned i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++)printf("%4d",mat[i][j]);
printf("\n");
}
}
Thursday, 16 February 2017
Resumé du Chapitre 4, Actions Paramétrées
Syntaxe
de défintion/déclaration
A la place de Action, on peut mettre Procedure.
Exemples de
procedures :
1.
Action
Additionner (E / X,Y : Entier ; S /
Som : Entier) ;
Début
Som ← X + Y ;
Fin ;
Algorithme
Addition ;{algorithme principal}
Var
A,B,somme : Entier ;
Début
Lire(A,B) ;
Additionner(A,B,somme) ;{appel de l’action paramétrée
Addition}
Ecrire(somme) ;
Fin.
2.
Action
Addit (E /
N : Entier ;
S /
Som : Entier) ;
Var
I :
Entier ;
Début
Som ← 0 ;
Pour
i ← 1 à N Faire
Som ← Som + i ;
Fait ;
Fin ;
Algorithme
Addition ;{algorithme principal}
Var
N,somme :
Entier ;
Début
Lire(n) ;
Addit(n,somme) ;{appel de l’action paramétrée Addit}
Ecrire(somme) ;
Fin.
Exemples de
fonctions :
1. Somme de
deux nombres :
Fonction Somme(E/
a,b : Entier) : Entier ;
Début
retourner a+b ;
Fin ;
Algorithme
sommation ;{algorithme principal}
Var
A,B,Som :
Entier ;
Début
Lire(A,B) ;
Som ←
Somme(A,B) ;
Ecrire(Som) ;
Fin.
2.
Algorithme déterminant la valeur de la formule 2Min(A,B)+1 :
Fonction Minimum(E/
a,b : Entier) : Entier ;
Var Min : Entier ;
Début
Si a<b
Alors Min ← a ;
Sinon Min ← b ;
Fsi ;
retourner Min ;
Fin ;
Algorithme Formule ;
Var A,B,form :
Entier ;
Début
Lire(A,B) ;
form ←
2Min(A,B)+1 ;
Ecrire(form) ;
Fin.
Modes
de transmission
3+1 modes : E, S, ES et REF.
Visibilité
Exemple :
Action suivant(ES/
z:entier) ;
debut z ←
z+1 ; fin ;
Action
addit(E/x,y:entier ; S/som :entier) ;
var val:entier ;
debut
som ← x ;
val ← 0 ;
Tant que
val<y faire
suivant(som) ;
suivant(val) ;
ftq ;
fin ;
Algorithme
Additionner ;
var
A,B,somme:entier ;
debut
lire(A,B) ;
addit(A,B,somme);
ecrire(somme) ;
fin.
-
Objets déclarés dans
Portée
A : Additionner
A, SA1, SA2
SA1 : Addit
SA1, SA2
SA2 : suivant
SA2
Monday, 13 February 2017
TP 9, codes sources
Programme 1:
#include <stdio.h>
#include <stdlib.h>
void afficheTab(int[],int);
int vect[10],taille;
int main()
{
afficheTab(vect,taille);
return 0;
}
void afficheTab(int vect[],int taille){
int i;
printf("\n les elements de votre tableau sont:\n");
for(i=0;i<taille;i++){
printf("\t%d",vect[i]);
}
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
void remplirMat(int [][10],int*,int*),
affichMat(int [][10],int,int);
int mat[10][10],N,M;
int main(){
remplirMat(mat,&N,&M);
affichMat(mat,N,M);
return 0;
}
void remplirMat(int tab[][10],int*N,int*M){
int i,j;
printf("\nDonner le nombre de lignes <=10: ");
scanf("%d",N);
printf("\nDonner le nombre de colonnes <=10: ");
scanf("%d",M);
for(i=0;i<*N;i++){
for(j=0;j<*M;j++){
printf("\ndonner l'element %d,%d :",i+1,j+1);
scanf("%d",&tab[i][j]);
}
}
}
void affichMat(int tab[][10],int N,int M){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<M;j++){
printf("%5d",tab[i][j]);
}
printf("\n");
}
}
Les autres prgs je ne les ai pas. Il faut les réécrire.
#include <stdio.h>
#include <stdlib.h>
void afficheTab(int[],int);
int vect[10],taille;
int main()
{
afficheTab(vect,taille);
return 0;
}
void afficheTab(int vect[],int taille){
int i;
printf("\n les elements de votre tableau sont:\n");
for(i=0;i<taille;i++){
printf("\t%d",vect[i]);
}
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
void remplirMat(int [][10],int*,int*),
affichMat(int [][10],int,int);
int mat[10][10],N,M;
int main(){
remplirMat(mat,&N,&M);
affichMat(mat,N,M);
return 0;
}
void remplirMat(int tab[][10],int*N,int*M){
int i,j;
printf("\nDonner le nombre de lignes <=10: ");
scanf("%d",N);
printf("\nDonner le nombre de colonnes <=10: ");
scanf("%d",M);
for(i=0;i<*N;i++){
for(j=0;j<*M;j++){
printf("\ndonner l'element %d,%d :",i+1,j+1);
scanf("%d",&tab[i][j]);
}
}
}
void affichMat(int tab[][10],int N,int M){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<M;j++){
printf("%5d",tab[i][j]);
}
printf("\n");
}
}
Les autres prgs je ne les ai pas. Il faut les réécrire.
Subscribe to:
Posts (Atom)