Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices tableaux et fonction

fonction sommetableau

    5 juillet 2021 à 13:28:51

    Prendre un mot au hasard, ça pose des problématiques intéressantes. Genre : comment faire pour choisir de façon équiprobable, alors qu'on ne sait pas au départ combien il y a de mots dans le fichier en tout. Et sans les stocker tous.

    Idée : à un moment on a lu (par exemple) 4 mots dans le fichier, et on en a choisi 1 au hasard. On en lit un 5ieme. On le prend ou pas ?

    pour ça on tire au sort, avec une probabilité de 4/5 pour le mot qu'on avait, et 1/5 pour celui qu'on vient de lire.

    En travaillant un peu l'idée :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    void essai_tirage(char pathname[]) {
        FILE *file = fopen(pathname, "r");
        if (file == NULL) {
            perror(pathname);
            exit(1);
        }
        char word[100] = "";
        int nb = 0;
        for(;;) {
            char other_word[100];
            if (fscanf(file, "%s", other_word) != 1) break;
            nb += 1;
            if (random() % nb == 0) {
                strcpy(word, other_word);
            }
        }
        fclose(file);
        printf("-> %s\n", word);
    }
    
    int main() {
        srandom(time(NULL));
        for (int i=1; i<=10; i++) {
            essai_tirage("mots.txt");
        }
    }


    le fichier mots.txt contient quelques mots. On tire et on affiche 10 fois, histoire de voir que ce n'est pas toujours le même mot qui sort.

    ---

    Reste un petit souci pour intégrer avec ce qui est déjà écrit : les mots ne sont pas tous de la même longueur.

    -
    Edité par michelbillaud 5 juillet 2021 à 13:30:48

    • Partager sur Facebook
    • Partager sur Twitter
      5 juillet 2021 à 18:20:02

      @michelbillaud:
      Alors tu as connu les horreurs des bandes magnétiques avec les erreurs de parité et les rubans étirés lors du rewind?
      J'ai connu une machine, le CDC3100 qui avait 8 dérouleurs et pas de disque. Il fallait le faire!
      Je n'ai pas de circuit étiré sur mon SSD, heureusement ...
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        5 juillet 2021 à 18:42:49

        Je me contentais de mettre la bande système sur le dérouleur, de la faire passer où il fallait (sur 7 roulettes, si je me rappelle bien) et d'appuyer sur un bouton ou deux pour booter le système (imos IV). Jamais eu de problème.

        Sinon mon support de sauvegarde, c'était des cassettes DAT. Même que le dernier jour, j'ai voulu sauver mon dernier programme (rien de compliqué, un programme qui initialisait un fichier vide), je me suis planté j'ai fait la copie dans le mauvais sens (cassette vers disque). Pas grave, j'ai une autre cassette de sauvegarde : rebelotte. Y a des jours comme ça. Et pas possible de retaper parce que qu'à cette heure-là la machine était utilisée pour transcoder les chèques sur bande pour pouvoir les envoyer le soir à la chambre de compensation. Les gros sous, ça n'attend pas.

        Alors je suis parti en laissant au chef un listing de 30 lignes de COBOL à retaper.

        -
        Edité par michelbillaud 5 juillet 2021 à 18:47:55

        • Partager sur Facebook
        • Partager sur Twitter
          5 juillet 2021 à 19:21:51

          J'ai jeté un oeil au cours sur Python, je sais pas si c'est une bonne idée d'ailleurs, quoiqu'il en soit j'ai pas l'impression que ça soit "plus simple" que le C, c'est juste diffférent
          • Partager sur Facebook
          • Partager sur Twitter
            5 juillet 2021 à 20:46:03

            Le Python est différent, et plus simple. Sa simplicité est telle qu'il est maintenant enseigné à l'école. Mais si tu débutes en C, tu n'as peut-être pas encore vu de choses trop complexes. (Les notions de base sont communes à tous les langages ou presque.)

            En Python, pour lire un fichier ligne par ligne :

            for ligne in fichier :

            En C, je ne sais pas le faire sans devoir sortir la documentation. Il faut plusieurs lignes et des pointeurs de pointeurs...

            C'est le jour où j'ai appris le coup du « for ligne in fichier » que j'ai aimé le langage Python. (Mais je continue mes projets en C par habitude.)

            -
            Edité par robun 5 juillet 2021 à 20:46:45

            • Partager sur Facebook
            • Partager sur Twitter
              6 juillet 2021 à 1:48:47

              Et trouver le minimum:
              minimum = min(x for x in tableau)
              À la façon de C:
              minimum = tableau[0]
              for v in tableau[1:]:
                   minimum = min(minimum, v)
              Mais si on ne saisit pas ce que veut dire le minimum, on peut se perdre aussi facilement en Python.
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

              Exercices tableaux et fonction

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown