Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices pour débutants en C

Au menu : zSommeChiffres (nombres, algo)

28 mars 2010 à 17:34:35

Pour les fautes j'ai pas tout relevé ^^

Citation

pour se niveau
Cette fois ci je propose que l'on décompose que l'on décompose le traitement



Pour les codes, je les trouve un peu trop compliqué pour des débutants. Tu utilises beaucoup d'opérateurs ternaires.
Là tu as perdu tout le monde :

if (nb.quot > 0) {
    printf("%d %s%s de %d.\n", nb.quot,
          billet ? "billet" : "piece", pluriel ? "s" : "" ,
          coupure[i]);
}

Là aussi tu as perdu tout le monde :

#define COLS_MAX 2 << 6
  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2010 à 17:46:56

Pour le #define je vais corriger, mais pour les ternaires je ne pense pas les remplacer ce serait trop long et il permettent d'économiser beaucoup de lignes sans (trop) perdre en clarté.
Et pour les fautes d'orthographe, je vais refaire un passage.
  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2010 à 17:51:43

Il y a pas mal de débutants qui ont du mal avec les opérateurs ternaires. :(
Soit tu économises des lignes, soit tu rends ton code plus clair pour les débutants. :)
  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2010 à 18:07:47

Bon, je vais les changer (la version avec beaucoup moins de ternaires sera pour demain soir car il y a pas mal de choses à changer).
  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2010 à 18:53:20

J'ai juste parcouru, ça a l'air sympa, hormis les points déjà soulignés

Juste une remarque supplémentaire, tu pourrais peut-être expliquer l'origine de ces commentaires, même donner un lien.
/**
 * \brief Compare deux entiers
 *
 * @param a : const void *
 * @param b : const void *
 * @return -1 (a<b), 1 (b>a) autrement 0
 */

Je ne suis pas certains que beaucoup de zéros, particulièrement ceux qui apprenent le C, connaissent.

J'ai personnellement eu la flemme de coder le 3. :honte:
A l'avenir, il faudra qu'on prenne garde à ne pas proposer d'exercices demandant trop de code non plus...

Merci, en tous cas.

edit:
Par contre les prochains exercices se feront sans moi...
Entre l'enthousiasme dont fait preuve shareman à éditer le premier post malgré les mp, le nombre de participants, j'ai sincèrement l'impression de perdre mon temps.
Désolé pour ceux qui participaient, mais je me doutais du résultat! On est sur le SDZ, ici, on fini le tuto C, et on code GTA 4. :-°
Sans moi...
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !
29 mars 2010 à 0:54:38

Citation : Lithrein


Il y aurait une autre possibilité pour la fonction de comparaison.
int
cmp (const void * a, const void * b) {
    const int pa = * (const int *) a;
    const int pb = * (const int *) b;

    return pb-pa;
}

Mais elle est fortement déconseillée car elle présente des risques d'overflow (INT_MAX-INT_MIN par exemple (INT_MIN est un nombre négatif très grand))




Sauf erreur de ma part, INT_MAX-INT_MIN n'est pas risqué car INT_MAX est lui aussi un nombre positif très grand... :p
Tu veux sans doute dire (-x)-INT_MIN, non ?
  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2010 à 3:28:18

Citation : yoch

INT_MAX est lui aussi un nombre positif très grand.




Pourquoi "aussi" ?

#include <stdio.h>
#include <limits.h>

int main(void)
{
  printf("INT_MIN : %d\n", INT_MIN);
  return 0;
}


INT_MIN : -2147483648
  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2010 à 10:13:51

Citation

Par contre les prochains exercices se feront sans moi...
Entre l'enthousiasme dont fait preuve shareman à éditer le premier post malgré les mp, le nombre de participants, j'ai sincèrement l'impression de perdre mon temps.
Désolé pour ceux qui participaient, mais je me doutais du résultat! On est sur le SDZ, ici, on fini le tuto C, et on code GTA 4.
Sans moi...



merci pour tes exos,le temps passé...........................
  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2010 à 12:17:28

Citation : candide

Citation : yoch

INT_MAX est lui aussi un nombre positif très grand.




Pourquoi "aussi" ?



Effectivement, je me suis planté, INT_MAX - INT_MIN correspond bien a 2*INT_MAX, et il y a donc bien un risque d'overflow, tout comme INT_MIN - INT_MAX...
  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2010 à 20:28:21

Citation : GurneyH

Par contre les prochains exercices se feront sans moi...
Entre l'enthousiasme dont fait preuve shareman à éditer le premier post malgré les mp, le nombre de participants, j'ai sincèrement l'impression de perdre mon temps.
Désolé pour ceux qui participaient, mais je me doutais du résultat! On est sur le SDZ, ici, on fini le tuto C, et on code GTA 4.
Sans moi...



Je suis entièrement d'accord sur le fait que l'on perd son temps, surtout que le nombre de participants n'est pas forcément proportionnel au temps passé sur la conception de l'exercice (énoncé et correction).
Toujours dans la veine je perds mon temps. Il est dommage que les Zér0s préfèrent faire un jeu, le plus souvent médiocre, mal structuré et bourré de plein de mauvaises choses (du genre fuite mémoire, tout le code du jeu dans le main (le record - que j'ai relevé - est de de 1400 4282 lignes :-° ), etc, ...) que de s'entraîner sur des exercices plus ou moins faciles qui les pousseront à s'améliorer. Tant pis pour eux, s'ils ne souhaitent pas progresser. Mais surtout tant pis pour nous qui perdons notre temps à proposer des exercices pour eux.
Mais qui dit pas demandes annonce pas d'offres.
  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2010 à 20:56:29

:( moi j'aimais bien vos exos... bref, sinon pour le message original j'ai PM GuilOooo
  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2010 à 21:48:27

Bonjour.
J'ai trois choses a dire:
Cet exercice était très bien même si je n'ai pas eu le temps de faire le niveau 3.
Y aura-t-il d'autres exercices?
Et dans la correction il y a:

Citation : Correction

Il existe aussi une implémentation récursive - en utilisant un accumulateur - (Tutoriel sur la récursivité de bluestrom) de cet algorithme mais personne ne l'a proposé.


Alors qu'il me semble que, sauf erreur, j'ai utilisé un algorithme récursif.

Citation : Emmflo

Bonjour,
Je propose ma version de l'exercice zCoupure au niveau 1 et 2. Je suis débutant et je vous préviens tout de suite, mon code n'est pas très lisible. Je suis ouvert à toutes critiques. J'utilise les listes chainées. Ce code marche aussi avec les centimes (mais pas question d'utiliser les dixièmes de centimes, les centièmes de centimes...).

#include <stdio.h>
#include <stdlib.h>

typedef struct Element Element;
struct Element
{
    double nombre;
    int monnaie;
    Element *suivant;
};

typedef struct Liste Liste;
struct Liste
{
    int tailleListe;
    Element *premier;
};
Liste *initialisation(double nb,int monnaie)
{
    Liste *liste = malloc(sizeof(*liste));
    Element *element = malloc(sizeof(*element));

    if (liste == NULL || element == NULL)
    {
        exit(EXIT_FAILURE);
    }

    element->nombre = nb;
    element->monnaie = monnaie;
    element->suivant = NULL;
    liste->premier = element;
    liste->tailleListe = 1;

    return liste;
}

void insertion(Liste *liste, double nvNombre, int monnaie, int nombreDiteration)
{
    int i;
    Element *nouveau = malloc(sizeof(*nouveau));
    if (liste == NULL || nouveau == NULL)
    {
        exit(EXIT_FAILURE);
    }

    if(nombreDiteration != 0)
    {
    Element *actuel = liste->premier;

    nombreDiteration --;

    for(i=0;i<nombreDiteration;i++)
    {
        actuel = actuel->suivant;
    }

    nouveau->nombre = nvNombre;
    nouveau->monnaie = monnaie;

    nouveau->suivant = actuel->suivant;
    actuel->suivant = nouveau;
    }
    else{
    nouveau->nombre = nvNombre;
    nouveau->monnaie = monnaie;

    /* Insertion de l'élément au début de la liste */
    nouveau->suivant = liste->premier;
    liste->premier = nouveau;
    }
liste->tailleListe++;
}

Element* recupereElement(Liste *liste, int nombreDiteration)
{
    int i;
    if (liste == NULL)
    {
        exit(EXIT_FAILURE);
    }

    Element *actuel = liste->premier;

    for(i=0;i<nombreDiteration;i++)
    {
        actuel = actuel->suivant;
    }
    return actuel;
}

int zCoupure (double somme,int nbDiteration,Liste* liste)
{
    int nbDelements=0;
    Element *actuel = recupereElement(liste, nbDiteration);
    nbDelements=somme/actuel->nombre;
    if(actuel->monnaie==1)
    {
        if(actuel->nombre==100)
        {
            if(nbDelements>1)
            {
                printf("%d billets de %.2lf euro.\n",nbDelements,actuel->nombre/100);
            }
            else
            {
                printf("%d billet de %.2lf euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else if(actuel->nombre<100 && actuel->nombre!=1)
        {
            if(nbDelements>1)
            {
                printf("%d billets de %.2lf centimes d'euro.\n",nbDelements,actuel->nombre/100);
            }
            else
            {
                printf("%d billet de %.2lf centimes d'euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else if(actuel->nombre==1)
            {
            if(nbDelements>1)
            {
                printf("%d billets de %.2lf centime d'euro.\n",nbDelements,actuel->nombre/100);
            }
            else
            {
                printf("%d billet de %.2lf centime d'euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else
        {
            if(nbDelements>1)
            {
                printf("%d billets de %.2lf euros.\n",nbDelements,actuel->nombre/100);
            }
            else
            {
                printf("%d billet de %.2lf euros.\n",nbDelements,actuel->nombre/100);
            }
        }
    }
    else
    {
        if(actuel->nombre==100)
        {
            if(nbDelements>1)
            {
                printf("%d pièces de %.2lf euro.\n",nbDelements,actuel->nombre/100);
            }
            else
            {
                printf("%d pièce de %.2lf euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else if(actuel->nombre<100 && actuel->nombre!=1)
        {
            if(nbDelements>1)
            {
                printf("%d pièces de %.2lf centimes d'euro.\n",nbDelements,actuel->nombre/100);
            }
            else
            {
                printf("%d pièce de %.2lf centimes d'euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else if(actuel->nombre==1)
        {
            if(nbDelements>1)
            {
                printf("%d pièces de %.2lf centime d'euro.\n",nbDelements,actuel->nombre/100);
            }
            else
            {
                printf("%d pièce de %.2lf centime d'euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else
        {
            if(nbDelements>1)
            {
                printf("%d pièces de %.2lf euros.\n",nbDelements,actuel->nombre/100);
            }
            else
            {
                printf("%d pièce de %.2lf euros.\n",nbDelements,actuel->nombre/100);
            }
        }
    }
    if(actuel->suivant==NULL)
    return 1;
    else
    return zCoupure (somme-(actuel->nombre*nbDelements),nbDiteration+1,liste);
}

void initListe(Liste* liste)
{
    Element *actuel = liste->premier;
    int i;

    for(i=0;i<6;i++)
    {
       insertion(liste, 0,0, i+1);
    }
    actuel=actuel->suivant;
    actuel->nombre=5000;
    actuel->monnaie=1;
    actuel=actuel->suivant;
    actuel->nombre=2000;
    actuel->monnaie=1;
    actuel=actuel->suivant;
    actuel->nombre=1000;
    actuel->monnaie=1;
    actuel=actuel->suivant;
    actuel->nombre=200;
    actuel->monnaie=0;
    actuel=actuel->suivant;
    actuel->nombre=100;
    actuel->monnaie=0;
    actuel=actuel->suivant;
    actuel->nombre=1;
    actuel->monnaie=0;
}
void viderBuffer()
{
    int c = 0;
    while (c != '\n' && c != EOF)
    {
        c = getchar();
    }
}
void tri_insertion(Liste* liste, int taille)
{
   int i, j,nb,mn;
   for (i = 1; i < taille; ++i) {
       int elem = recupereElement(liste, i)->nombre;
       int monnaie = recupereElement(liste, i)->monnaie;
       for (j = i; j > 0 && recupereElement(liste, j-1)->nombre >= elem; j--)
           {
           recupereElement(liste, j)->nombre = recupereElement(liste, j-1)->nombre;
           recupereElement(liste, j)->monnaie = recupereElement(liste, j-1)->monnaie;
           }
       recupereElement(liste, j)->nombre = elem;
       recupereElement(liste, j)->monnaie = monnaie;
   }
   j=taille-1;
   for (i = 0; i < taille/2; i++)
   {
       nb=recupereElement(liste, i)->nombre;
       mn=recupereElement(liste, i)->monnaie;
       recupereElement(liste, i)->nombre=recupereElement(liste, j)->nombre;
       recupereElement(liste, i)->monnaie=recupereElement(liste, j)->monnaie;
       recupereElement(liste, j)->nombre=nb;
       recupereElement(liste, j)->monnaie=mn;
       j--;
   }
}
int main()
{
    Liste* elementRendus;
    int init=0;
    int nbBillets=0,nbPieces=0,i=0,p1=0,nb=0;
    double somme=0,billet=0,piece=0;
    char choix;
    printf("Voulez vous choisir les piecès et les billets avec lesquels on va vous rendre la monnaie ?(o=oui,n=non) : ");
    scanf("%c",&choix);
    viderBuffer();
    printf("\n");
    if(choix=='o')
    {
        printf("Nombre de types de billets : ");
        scanf("%d",&nbBillets);
        viderBuffer();
        printf("Nombre de types de pièces : ");
        scanf("%d",&nbPieces);
        viderBuffer();
        for(i=0;i<nbBillets;i++)
        {
            printf("Billet %d : ",i+1);
            scanf("%lf",&billet);
            nb=billet*100;
            billet=nb;
            if(billet!=0)
            {
            if(billet==1)p1=1;
            if(init==1)
            {
                insertion(elementRendus, billet,1,0);
            }
            else
            {init=1;
            elementRendus=initialisation(billet,1);
            }
            }
            else i--;
            viderBuffer();
        }
        for(i=0;i<nbPieces;i++)
        {
            printf("Piece %d : ",i+1);
            scanf("%lf",&piece);
            nb=piece*100;
            piece=nb;
            if(piece!=0)
            {
            if(piece==1)p1=1;
            if(init==1)
            {
                insertion(elementRendus, piece,0,0);
            }
            else
            {init=1;
            elementRendus=initialisation(piece,0);
            }
            }
            else
            i--;
            viderBuffer();
        }
    if (p1==0)
    {
        insertion(elementRendus, 1,0,0);
        nbPieces++;
    }
    tri_insertion(elementRendus, nbBillets+nbPieces);
    }
    else{
    elementRendus=initialisation(10000,1);
    initListe(elementRendus);}
    printf("Veuillez entrer la somme à retirer :");
    scanf("%lf",&somme);
    somme*=100;
    viderBuffer();
    zCoupure (somme,0,elementRendus);
    return 0;
}


Ps: J'ai un peu améliorer mon code:
#include <stdio.h>
#include <stdlib.h>

typedef struct Element Element;
struct Element
{
    double nombre;
    int monnaie;
    Element *suivant;
};

typedef struct Liste Liste;
struct Liste
{
    int tailleListe;
    Element *premier;
};
Liste *initialisation(double nb,int monnaie)
{
    Liste *liste = malloc(sizeof(*liste));
    Element *element = malloc(sizeof(*element));

    if (liste == NULL || element == NULL)
    {
        exit(EXIT_FAILURE);
    }

    element->nombre = nb;
    element->monnaie = monnaie;
    element->suivant = NULL;
    liste->premier = element;
    liste->tailleListe = 1;

    return liste;
}

void insertion(Liste *liste, double nvNombre, int monnaie, int nombreDiteration)
{
    int i;
    Element *nouveau = malloc(sizeof(*nouveau));
    if (liste == NULL || nouveau == NULL)
    {
        exit(EXIT_FAILURE);
    }

    if(nombreDiteration != 0)
    {
    Element *actuel = liste->premier;

    nombreDiteration --;

    for(i=0;i<nombreDiteration;i++)
    {
        actuel = actuel->suivant;
    }

    nouveau->nombre = nvNombre;
    nouveau->monnaie = monnaie;

    nouveau->suivant = actuel->suivant;
    actuel->suivant = nouveau;
    }
    else{
    nouveau->nombre = nvNombre;
    nouveau->monnaie = monnaie;

    /* Insertion de l'élément au début de la liste */
    nouveau->suivant = liste->premier;
    liste->premier = nouveau;
    }
liste->tailleListe++;
}
Element* recupereElement(Liste *liste, int nombreDiteration)
{
    int i;
    if (liste == NULL)
    {
        exit(EXIT_FAILURE);
    }

    Element *actuel = liste->premier;

    for(i=0;i<nombreDiteration;i++)
    {
        actuel = actuel->suivant;
    }
    return actuel;
}

void deplacer(Liste *liste, int nombreDiterationOrigine, int nombreDiteration)
{
    Element* elem=recupereElement(liste, nombreDiterationOrigine);
    recupereElement(liste, nombreDiterationOrigine-1)->suivant=elem->suivant;
    elem->suivant=recupereElement(liste, nombreDiteration);
    recupereElement(liste, nombreDiteration-1)->suivant=elem;
}

int zCoupure (double somme,int nbDiteration,Liste* liste)
{
    int nbDelements=0;
    Element *actuel = recupereElement(liste, nbDiteration);
    nbDelements=somme/actuel->nombre;
    if(actuel->monnaie==1)
    {
        if(actuel->nombre==100)
        {
            if(nbDelements>1)
            {
                printf("%d billets de %.2f euro.\n",nbDelements,actuel->nombre/100);
            }
            else if(nbDelements==1)
            {
                printf("%d billet de %.2f euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else if(actuel->nombre<100 && actuel->nombre!=1)
        {
            if(nbDelements>1)
            {
                printf("%d billets de %.2f centimes d'euros.\n",nbDelements,actuel->nombre/100);
            }
            else if(nbDelements==1)
            {
                printf("%d billet de %.2f centimes d'euros.\n",nbDelements,actuel->nombre/100);
            }
        }
        else if(actuel->nombre==1)
            {
            if(nbDelements>1)
            {
                printf("%d billets de %.2f centime d'euro.\n",nbDelements,actuel->nombre/100);
            }
            else if(nbDelements==1)
            {
                printf("%d billet de %.2f centime d'euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else
        {
            if(nbDelements>1)
            {
                printf("%d billets de %.2f euros.\n",nbDelements,actuel->nombre/100);
            }
            else if(nbDelements==1)
            {
                printf("%d billet de %.2f euros.\n",nbDelements,actuel->nombre/100);
            }
        }
    }
    else
    {
        if(actuel->nombre==100)
        {
            if(nbDelements>1)
            {
                printf("%d pièces de %.2f euro.\n",nbDelements,actuel->nombre/100);
            }
            else if(nbDelements==1)
            {
                printf("%d pièce de %.2f euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else if(actuel->nombre<100 && actuel->nombre!=1)
        {
            if(nbDelements>1)
            {
                printf("%d pièces de %.2f centimes d'euros.\n",nbDelements,actuel->nombre/100);
            }
            else if(nbDelements==1)
            {
                printf("%d pièce de %.2f centimes d'euros.\n",nbDelements,actuel->nombre/100);
            }
        }
        else if(actuel->nombre==1)
        {
            if(nbDelements>1)
            {
                printf("%d pièces de %.2f centime d'euro.\n",nbDelements,actuel->nombre/100);
            }
            else if(nbDelements==1)
            {
                printf("%d pièce de %.2f centime d'euro.\n",nbDelements,actuel->nombre/100);
            }
        }
        else
        {
            if(nbDelements>1)
            {
                printf("%d pièces de %.2f euros.\n",nbDelements,actuel->nombre/100);
            }
            else if(nbDelements==1)
            {
                printf("%d pièce de %.2f euros.\n",nbDelements,actuel->nombre/100);
            }
        }
    }
    if(actuel->suivant==NULL)
    return 1;
    else
    return zCoupure ((int)somme%(int)actuel->nombre,nbDiteration+1,liste);
}

void initListe(Liste* liste)
{
    Element *actuel = liste->premier;
    int i;

    for(i=0;i<6;i++)
    {
       insertion(liste, 0,0, i+1);
    }
    actuel=actuel->suivant;
    actuel->nombre=5000;
    actuel->monnaie=1;
    actuel=actuel->suivant;
    actuel->nombre=2000;
    actuel->monnaie=1;
    actuel=actuel->suivant;
    actuel->nombre=1000;
    actuel->monnaie=1;
    actuel=actuel->suivant;
    actuel->nombre=200;
    actuel->monnaie=0;
    actuel=actuel->suivant;
    actuel->nombre=100;
    actuel->monnaie=0;
    actuel=actuel->suivant;
    actuel->nombre=1;
    actuel->monnaie=0;
}
void viderBuffer()
{
    int c = 0;
    while (c != '\n' && c != EOF)
    {
        c = getchar();
    }
}
void tri_insertion(Liste* liste, int taille)
{
   int i, j,nb,mn;
   for (i = 1; i < taille; ++i) {
       int elem = recupereElement(liste, i)->nombre;
       for (j = i; j > 0 && recupereElement(liste, j-1)->nombre >= elem; j--);
       deplacer(liste, i, j);
   }
   j=taille-1;
   for (i = 0; i < taille/2; i++)
   {
       nb=recupereElement(liste, i)->nombre;
       mn=recupereElement(liste, i)->monnaie;
       recupereElement(liste, i)->nombre=recupereElement(liste, j)->nombre;
       recupereElement(liste, i)->monnaie=recupereElement(liste, j)->monnaie;
       recupereElement(liste, j)->nombre=nb;
       recupereElement(liste, j)->monnaie=mn;
       j--;
   }
}
int main()
{
    Liste* elementRendus;
    int init=0;
    int nbBillets=0,nbPieces=0,i=0,p1=0,nb=0;
    double somme=0,billet=0,piece=0;
    char choix;
    printf("Voulez vous choisir les piecès et les billets avec lesquels on va vous rendre la monnaie ?(o=oui,n=non) : ");
    scanf("%c",&choix);
    viderBuffer();
    printf("\n");
    if(choix=='o')
    {
        printf("Nombre de types de billets : ");
        scanf("%d",&nbBillets);
        viderBuffer();
        printf("Nombre de types de pièces : ");
        scanf("%d",&nbPieces);
        viderBuffer();
        for(i=0;i<nbBillets;i++)
        {
            printf("Billet %d : ",i+1);
            scanf("%lf",&billet);
            nb=billet*100;
            if(nb!=0)
            {
            if(nb==1)p1=1;
            if(init==1)
            {
                insertion(elementRendus, nb,1,0);
            }
            else
            {init=1;
            elementRendus=initialisation(nb,1);
            }
            }
            else i--;
            viderBuffer();
        }
        for(i=0;i<nbPieces;i++)
        {
            printf("Piece %d : ",i+1);
            scanf("%lf",&piece);
            nb=piece*100;
            if(nb!=0)
            {
            if(nb==1)p1=1;
            if(init==1)
            {
                insertion(elementRendus, nb,0,0);
            }
            else
            {init=1;
            elementRendus=initialisation(nb,0);
            }
            }
            else
            i--;
            viderBuffer();
        }
    if (p1==0)
    {
        insertion(elementRendus, 1,0,0);
        nbPieces++;
    }
    tri_insertion(elementRendus, nbBillets+nbPieces);
    }
    else{
    elementRendus=initialisation(10000,1);
    initListe(elementRendus);}
    printf("Veuillez entrer la somme à retirer :");
    scanf("%lf",&somme);
    somme*=100;
    viderBuffer();
    zCoupure (somme,0,elementRendus);
    return 0;
}

  • Partager sur Facebook
  • Partager sur Twitter
30 mars 2010 à 0:26:33

Citation : GurneyH


Par contre les prochains exercices se feront sans moi...



C'est dommage car je pense que tu étais la personne idéale pour ça. En tous cas, sois remercié pour tout le travail que tu as effectué avec énormément de conscience et sois remercié pour toutes les réponses que tu as généreusement fournies au zéros.



Citation : GurneyH


Entre l'enthousiasme dont fait preuve shareman à éditer le premier post malgré les mp,



Ça c'est vrai qu'il est dommage (voire dommageable) que tu n'aies pas eu la maitrise des titres et du tableau des exos.

Citation : GurneyH


le nombre de participants, j'ai sincèrement l'impression de perdre mon temps.




Le problème c'est que le succès de ce genre de rubrique ne vient pas tout de suite, il y a un travail de fond à faire, créer des habitudes, etc. Et puis surtout, tu as mis la barre trop haut, les exos étaient trop ambitieux, trop généraux et finalement, les exos n'ont jamais été destinés à de vrais débutants. Les exos n'ont pas assez séparé programmation en général, programmation C et algorithmique, ils n'ont pas été assez ciblés. En plus pour faire une rubrique comme ça il faut s'appuyer en détail sur le cours, c'est ça dont les débutants ont besoin. Et pour moi le cours de Matéo même s'il est bien comme tuto d'initiation, il n'est pas assez fortement structuré pour ça.




Citation : GurneyH


Désolé pour ceux qui participaient, mais je me doutais du résultat! On est sur le SDZ, ici, on fini le tuto C, et on code GTA 4. :-°
Sans moi...



J'admets que tu puisses être amer mais tu ne peux pas reprocher aux zéros d'être des zéros. Par définition, le zéros va souvent s'enflammer, vouloir "popgrammer" et puis le soufflé va retomber quand il va rencontrer des difficultés. Et justement le travail des encadrants est de le maintenir en l'air et si nécessaire de les guider. Par exemple beaucoup trop se lancent dans le C alors que c'est un langage trop couteux et trop frustrant, il faudrait les réorienter.


  • Partager sur Facebook
  • Partager sur Twitter
30 mars 2010 à 0:29:36

Candide, comme ca, du Tac au Tac, que proposerais tu comme type d'exercice qui correspondrait plus aux attentes des zeros?
  • Partager sur Facebook
  • Partager sur Twitter
30 mars 2010 à 0:51:30

Citation : Adroneus

Candide, comme ca, du Tac au Tac, que proposerais tu comme type d'exercice qui correspondrait plus aux attentes des zeros?



Je ne peux pas te répondre. L'apprentissage d'un langage de programmation ne peut se circonscrire à une rubrique d'exos. Les attentes et les profils sont trop variées. Mais à la rigueur, déjà ce qui manque c'est des exercices d'accompagnement des chapitres du cours. Il faudrait des exercices beaucoup plus dépouillés que ceux qui ont été proposés dans la rubrique mais qui en même temps doivent rester attrayants. Donc il ne s'agit pas de proposer un fonds infini d'exos (et d'ailleurs, les exos, c'est facile à trouver et à construire quand on a un peu d'expérience), il s'agit d'analyser les besoins des zéros (des débutants qui lisent le tuto de matéo), et de trouver un nombre restreint d'exercices et qui soient typiques. Qu'ils soient typiques signifie qu'ils fournissent un savoir transposable. Et ça ce n'est pas du tout évident à construire. Sans compter que ça c'est juste pour les novices. mais il y a tous les stades ultérieurs d'apprentissage avec des besoins différents.
  • Partager sur Facebook
  • Partager sur Twitter
30 mars 2010 à 0:55:12

Je sais pas quoi repondre, je comprends pas tout tres bien, j'editerai demain soir... Mais sur ce que j'ai compris, je pense que t'as raison... Je propose qu'on se fasse une grosse reunion par MP avec Lithrein, GurneyH, et tout ceux qui sont interesses par les exos et que l'on discute des meilleurs exos a proposer... C'est y une bonne idee ou pas?
  • Partager sur Facebook
  • Partager sur Twitter
30 mars 2010 à 7:41:29

Citation : Adroneus

Je sais pas quoi repondre, je comprends pas tout tres bien, j'editerai demain soir... Mais sur ce que j'ai compris, je pense que t'as raison... Je propose qu'on se fasse une grosse reunion par MP avec Lithrein, GurneyH, et tout ceux qui sont interesses par les exos et que l'on discute des meilleurs exos a proposer... C'est y une bonne idee ou pas?

Je ne sais pas si tu étais là lorsque j'ai évoqué l'idée de faire des sessions mini-jeux, et j'ai d'ailleurs contacter GurneyH et Lithrein, je t'ajoute à la conversation, si tu veux m'aider. Tiens, en même temps candide ^^
  • Partager sur Facebook
  • Partager sur Twitter
"If debbugging is the process of removing bugs, then programming must be the process of putting them in." (Edsger Dijkstra)
30 mars 2010 à 22:55:07

Bonjour.
Suite a la décision de GurneyH. Qui doit-on MP si on a une idée d'exercice?
Emmflo
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2010 à 14:02:24

Personne ^^
  • Partager sur Facebook
  • Partager sur Twitter
"If debbugging is the process of removing bugs, then programming must be the process of putting them in." (Edsger Dijkstra)
31 mars 2010 à 18:29:06

Ca va etre difficile de rassembler des zeros sur un projet d'exo.
On le voit bien il y a 4 ou 5 personnes qui participent.... c'est sur c'est pas des jeux que l'on fait ici......
Pour ma part moi qui me sens un peu à la traine, j'ai appris une multitude d'enseignement , j'ai ete ravi d'avoir participer
Dommage que l'aventure s'arrête la ! :(
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2010 à 18:51:57

Je pense proposer encore au moins un exercice - une sorte de programme qui compte le nombre de mots et de caractères d'un fichier - si vous êtes intéressés je propose l'énoncé ce soir.
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2010 à 19:11:09

Moi aussi, je suis intéressé.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
31 mars 2010 à 20:59:40

Citation : Lithrein

Je pense proposer encore au moins un exercice - une sorte de programme qui compte le nombre de mots et de caractères d'un fichier - si vous êtes intéressés je propose l'énoncé ce soir.


Quelque chose comme ça ?
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2010 à 22:04:37

zWordCount (Du 1er au 15 Avril)



Connaissances requises :


I) Mise au point d'un programme basique pour compter les mots



Premièrement, définissons clairement ce qu'est un mot :
Un mot est défini comme étant la plus longue séquence contiguë (sans espaces) de caractères alphanumériques pouvant contenir des caractères de ponctuation.
Les caractères considérés comme séparateur de mots sont : l'espace ( ' ' ) la tablulation horizontale ( '\t' ), le retour à la ligne ( '\n' ) et le retour chariot ( '\r' )


1) Créez un programme qui récupère sur l'entrée standard (stdin) un flot de caractères tant que la constante EOF (End Of File) n'a pas été envoyée (Pour envoyer EOF : Au commencement d'une ligne Ctrl+Z pour Windows et Ctrl+D pour les unixoïdes).
Votre programme affichera le nombre de lignes, de mots, puis de caractères (espaces compris) du texte récupéré.

$ wc
Salut les Zer0s.
    1 ligne(s), 3 mot(s), 17 caractere(s)


2) Pour cette question, vous devrez créer un programme similaire qui, cette fois ci, récupère le texte à partir d'un fichier passé en argument ($ wc fichier.txt). Si ce fichier n'existe pas le programme affiche une erreur puis se termine normalement.
Si aucun fichier n'est passé en argument vous récupérerez le texte sur l'entrée standard comme pour la première question.

Citation : Entree.txt

Salut les Zer0s.


$ wc Entree.txt
    1 ligne(s) 3 mot(s) 17 caractere(s)

$ wc fichier_inconnu.txt
Erreur : Aucun fichier trouvé


II) Amélioration du programme précédent grâce à un système d'options



1) Vous devez créer un programme qui affiche les options passées au programme. Les options que pourra recevoir le programme seront : `-a`, `-b`, `-c`, `-d`, il est possible de les raccourcir en `-abcd`
Exemples :
$ options
a : inactive.
b : inactive.
c : inactive.
d : inactive.


$ options -a -c
a : active.
b : inactive.
c : active.
d : inactive.</code>

$ options -bcd
a : inactive.
b : active.
c : active.
d : active.</code>


2) Grâce à l'activité préparatoire de la question 1. Vous pouvez maintenant créer un système d'options pour le programme word count (wc) réalisé lors de la deuxième question de la première partie.
Les options possible seront `-c` (afficher le nombre de caractères), `-l` (afficher le nombre de lignes), `-w` (afficher le nombre de mots). Par défaut les trois options sont actives. (wc = wc -l -c -w = wc -lcw).
Une dernière option est possible : `-h` (elle permet d'afficher la manière d'utiliser le programme).
Indiquer un fichier et facultatif (se référer à la question 2 de la première partie pour plus de détails).
Votre programme doit d'abord afficher le nombre de lignes, puis de mots et ensuite de caractères.

$ wc -lwc fichier_inconnu.txt
Erreur : Aucun fichier trouve.

$ wc -h
Usage : wc [-l] [-w] [-c] [FICHIER]

$ wc -l
Salut les Zer0s.
    1 ligne(s)

$ wc -lm
Salut les Zer0s.
    1 ligne(s) 3 mot(s)

$ wc -l -c
Salut les Zer0s.
    1 ligne(s) 17 caractere(s)



Le but n'est pas de soumettre le plus rapidement une solution ce n'est pas un concours, prenez donc le temps de peaufiner votre solution. Et n'hésitez pas à poser des questions si vous êtes bloqués ou si vous avez besoin de conseils.

Un topic a été créé pour cet exercice.

Bonne chance.
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2010 à 22:10:46

Je participerai, ce week end (Bac blanc Powaaaaa!)
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2010 à 22:22:03

Désolé je peux pas laisser passer ça. ^^

Citation : Lithrein

II) Amélioration du programme précédant grâce à un système d'options



@Adroneus : Osef de ta life ...
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2010 à 22:23:20

Citation : Pouet_forever

@Adroneus : Osef de ta life ...


Il a ose! tais toi sale troll! vade retro satanas! sinon, tu participe aussi?
  • Partager sur Facebook
  • Partager sur Twitter