Implémentation de structures de contrôle et d'algorithmes fondamentaux en langage C

Génération aléatoire d'identifiants basés sur le temps

Le code suivant illustre l'utilisation de la fonction rand() et de l'horloge système pour générer des numéros d'étudiants de manière dynamique. L'utilisation de srand(time(NULL)) gaarntit que la séquence de nombres change à chaque exécution.

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

int main() {
    int i = 0;
    int groupe, id_final;
    srand((unsigned int)time(NULL));

    while(i < 5) {
        groupe = rand() % 2; 
        if(groupe == 1) {
            id_final = rand() % 80 + 1;
            printf("20256343%04d\n", id_final);
        } else {
            id_final = rand() % 35 + 1;
            printf("20256136%04d\n", id_final);
        }
        i++;
    }
    return 0;
}

Simulation d'un automate de vente de boissons

Ce programme simule un distributeur automaitque utilisant une boucle infinie et des structures de sélection pour calculer les coûts de transaction et gérer la monnaie rendue à l'utilisateur.

#include <stdio.h>

int main() {
    int choix, nombre;
    float prix_unitaire, versement;

    while (1) {
        printf("\n--- Menu Distributeur ---\n");
        printf("1. Soda - 3 EUR\n2. Limonade - 3 EUR\n3. Jus - 5 EUR\n4. Eau - 2 EUR\n0. Quitter\n");
        printf("Votre choix : ");
        scanf("%d", &choix);

        if (choix == 0) break;
        if (choix < 1 || choix > 4) {
            printf("Option invalide.\n");
            continue;
        }

        printf("Quantité souhaitée : ");
        scanf("%d", &nombre);

        switch(choix) {
            case 1: case 2: prix_unitaire = 3.0; break;
            case 3: prix_unitaire = 5.0; break;
            case 4: prix_unitaire = 2.0; break;
        }

        float total = prix_unitaire * nombre;
        printf("Montant total : %.2f EUR\nSomme insérée : ", total);
        scanf("%f", &versement);
        printf("Rendu : %.2f EUR\n", versement - total);
    }
    return 0;
}

Gestion des signaux de signalisation

L'exemple suivant traite les entrées de caractères pour simuler les réactions aux feux de circulation (Rouge, Vert, Jaune).

#include <stdio.h>

int main() {
    char signal;
    while(scanf(" %c", &signal) != EOF) {
        if(signal == 'r') 
            printf("STOP - Arrêt\n");
        else if(signal == 'g') 
            printf("GO - Circulez\n");
        else if(signal == 'y') 
            printf("WAIT - Ralentissez\n");
        else 
            printf("Erreur de signal\n");
    }
    return 0;
}

Suivi des dépenses et statistiques

Ce module permet de saisir une série de valeurs numériques pour calculer le montant total ainsi que les valeurs extrêmes (maximum et minimum).

#include <stdio.h>

int main() {
    double depense, somme = 0.0, max_val = 0.0, min_val = 99999.0;
    printf("Saisir les montants (-1 pour terminer) :\n");

    while (1) {
        scanf("%lf", &depense);
        if (depense == -1) break;
        
        somme += depense;
        if (depense > max_val) max_val = depense;
        if (depense < min_val) min_val = depense;
    }

    printf("Total cumulé : %.2f\n", somme);
    printf("Dépense la plus élevée : %.2f\n", max_val);
    printf("Dépense la plus basse : %.2f\n", min_val);
    return 0;
}

Classification géométrique des triangles

Cet algorithme vérifie d'abord si trois longueurs peuvent former un triangle avant de déterminer sa nature spécifique (équilatéral, isocèle, rectangle ou scalène).

#include <stdio.h>

int main() {
    int a, b, c;
    while (scanf("%d %d %d", &a, &b, &c) != EOF) {
        if (a + b > c && a + c > b && b + c > a) {
            if (a == b && b == c) 
                printf("Triangle équilatéral\n");
            else if (a == b || a == c || b == c) 
                printf("Triangle isocèle\n");
            else if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) 
                printf("Triangle rectangle\n");
            else 
                printf("Triangle quelconque\n");
        } else {
            printf("Construction impossible\n");
        }
    }
    return 0;
}

Mini-jeu de devinettes de date

Un jeu interactif où l'utilisateur dispose de trois tentatives pour deviner un jour du mois sélectionné aléatoirement.

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

int main() {
    int cible, essai;
    srand(time(NULL));
    cible = rand() % 30 + 1;

    printf("Devinez le jour chanceux (1-30). 3 tentatives autorisées.\n");
    for (int i = 1; i <= 3; i++) {
        scanf("%d", &essai);
        if (essai == cible) {
            printf("Bravo ! Vous avez trouvé.\n");
            break;
        } else if (essai < cible) {
            printf("C'est trop tôt. ");
        } else {
            printf("C'est trop tard. ");
        }
        
        if (i < 3) printf("Réessayez : ");
        else printf("\nDommage. Le jour était le %d.\n", cible);
    }
    return 0;
}

Étiquettes: C algorithms Control Structures randomization Programming Logic

Publié le 27 octobre à 18h28