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;
}

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;
}