Partage
  • Partager sur Facebook
  • Partager sur Twitter

programme en c

Mise a jour de tableau

24 janvier 2021 à 14:55:19

salut les gars .

Svp es ce quelqu'un peut m'aider avec mon programme .

Enfaite je dois ecrire un programmme pour un maintenancier qui doit selon sa volonté prendre des compsants stocker dans un tableau.

Du coup moi j ai pu ecrire le prog mais il me reste à mettre à jour le tableau quand le maintenancier prend un de  ses composans ou ajoute un composant .

Et la je veux savoir comment je peux parcourir le tableau pour ajouter ou enlenver le nombre de composants que le maintenancier va ajour . je vous met le sujet en pj et voila ce que j ai pu faire .

#include <stdio.h>
int main()
{
	// Declaration des variables
	FILE *aLire;      // pointeur de fichier
	char entete[60];  // premiere ligne du tableau
	char choix;
	int composant;
	int valeurComposant;
	int typecomposant;
	int ajout;
	int prise;
	
	int   valeur[5]; // tableau des valeurs composant
	int   Resistance[5];// tableau de nombre de resistances en stock
    int   Condesateur[5];// tableau de nombre de condensateur en stock
    int   Bobines[5];// tableau de nombre de bobine en stock	
	int i ; // compteur de boucle 
	// .... a completer .....
	// ..............
	
	// Cheminement du programme 
	
	// Ouverture de fichier en lecture
	aLire = fopen("Stock.txt","r"); 
	// Lecture de l'entete du fichier et affichage
	printf("Etat de stock de composant actuel\n");
	fscanf(aLire,"%[^\n]",entete);
	printf("%s\n",entete);
	// Transfert du reste du fichier vers les variables type tableau
	// La lecture, ligne par ligne 
	i = 0;
	while (!feof(aLire)) // Tant que pas fin du fichier 
	{ 
	    fscanf(aLire, "%d",&valeur[i]);
	    fscanf(aLire, "%d",&Resistance[i]);
	    fscanf(aLire, "%d",&Condesateur[i]);
	    fscanf(aLire, "%d",&Bobines[i]);
		printf("%d\t\t%d\t\t%d\t\t%d\n", valeur[i],Resistance[i],
		                              Condesateur[i],Bobines[i]);
        i++; 
    }
	fclose(aLire);
/*	for(i=0;i<=4;i++) 
	{
       printf("%d--->val:%d bob:%d\n",i,valeur[i], Bobines[i]);   
	   printf("nb de bobines de %dmH est  egale a:%d\n",valeur[i],Bobines[i]);

	}*/
	printf("______________________________________________________\n");
	printf("Voulez vous prendre ou ajouter un composant?\n");
	printf(" 'P' Prendre un composant\n");
	printf(" 'A' ajouter un composant\n");
	printf(" 'Q' quitter\n");
 
switch(choix) { case 'A': case 'a': printf("quel composant ajouter?\n"); printf(" 1 :Bobines\n"); printf(" 2 :condesateur\n"); printf(" 3 :resistance\n"); scanf("%d",&typecomposant); printf("combien de composant ajouter?\n"); scanf("%d",&ajout); printf("entrez la valeur en ["%d"] du composant\n"); scanf("%d",&valeurComposant); switch(typecomposant) { case 1: for(i=0; i<=4; i++) { if(valeur[i]=valeurComposant) {Bobines[i]=Bobines[i]+ ajout; while (!feof(aLire)) // Tant que pas fin du fichier { fscanf(aLire, "%d",&valeur[i]); fscanf(aLire, "%d",&Resistance[i]); fscanf(aLire, "%d",&Condesateur[i]); fscanf(aLire, "%d",&Bobines[i]); printf("%d\t\t%d\t\t%d\t\t%d\n", valeur[i],Resistance[i], Condesateur[i],Bobines[i]); i+ajout; }; fclose(aLire); } } }; break; case 2: Condesateur[i]+=1; case 3: Resistance[i]+=1; break; case 'P': case 'p': printf("quel composant prendre?\n"); break; default:printf("__________________________\n"); } return 0; }



-
Edité par IbrahimaGoumballa 24 janvier 2021 à 18:22:36

  • Partager sur Facebook
  • Partager sur Twitter
24 janvier 2021 à 15:27:19

Salut,

Tu sembles t'être trompé de section, car le code que tu nous présente est du C pur et non du C++

Tu devrais donc prendre contact avec la modération pour demander le déplacement de cette discussion ;)

Ceci étant dit, une lecture rapide du code me fait remarquer quelques problèmes que je me permet de mettre en évidence:

  • après l'appel à fopen, il faut impérativement s'assurer que pointeur vers aLire soit différent de NULL (nullptr), car l'ouverture du fichier peut parfaitement avoir échoué pour une raison ou une autre, et, si c'est le cas, ton programme plantera malheureusement lorsque tu essayeras d'accéder à ce pointeur (en plus, cela n'a pas beaucoup de sens d'essayer de lire ou de fermer un fichier qui n'a pas été ouvert :D)
  • tu as une fonction de 116 lignes qui s'occupe, si j'ai bien compté, de cinq choses différentes (lire un fichier, afficher le contenu de ce fichier, afficher un menu, deux actions possibles en fonction du choix de l'utilisateur).  Cela nous fais donc quatre choses de trop :P. Tu devrais séparer les différentes responsabilités pour que chaque fonction n'aie qu'une seule et unique chose à faire
  • ton programme s'exécute une seule fois puis s'arrête, ce qui va obliger celui qui veut l'utiliser à le relancer à chaque fois, et c'est bien dommage :p
  • Partager sur Facebook
  • Partager sur Twitter
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
24 janvier 2021 à 18:21:30

Salut ! Merci pour ta réponse et vraiment merci beaucoup!

C'est vrai je me suis trompé en le mettant ici.

Je vais essayé d'appliquer ce que t as dis merci pour ton aide§!:)

  • Partager sur Facebook
  • Partager sur Twitter
24 janvier 2021 à 20:44:46

Bonjour,

Déplacement vers un forum plus approprié

Le sujet est déplacé de la section Langage C++ vers la section Langage C

Mauvais titre

Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

Pour modifier votre titre, éditez le premier message de votre sujet.

(titre originel : programme en c)

Liens conseillés

  • Partager sur Facebook
  • Partager sur Twitter
26 janvier 2021 à 16:13:07

Hey,

Je suis pas expert en C, mais tout d'abord :

printf("______________________________________________________\n");
    printf("Voulez vous prendre ou ajouter un composant?\n");
    printf(" 'P' Prendre un composant\n");
    printf(" 'A' ajouter un composant\n");
    printf(" 'Q' quitter\n");


Il ne te manquerait pas un scanf ici ?

Ensuite, pour parcourir les éléments d'un tableau, tu peux utiliser une boucle for.

Par exemple :

int main()
{
    int i = 0;

    char c[] = "salut"; //ton char fait 10 cases
    for(i = 0; i < strlen(c) ; i ++)
    {
        printf("%c\n", c[i]);
    }
}

Ce code te permet d'afficher "salut" lettre par lettre. Tu parcours ainsi ton "tableau de char".

Si jamais tu veux modifier un élément tu peux par exemple implémenter un if :

    for(i = 0; i < strlen(c) ; i ++)
    {
        if (c[i] == 'u')
        {
            printf("%c\n", 'r');
        }
        else
        {
            printf("%c\n", c[i]);
        }

    }

Ici, si l'élément contenu dans la case [i] vaut 'u', alors on le remplace par 'r'. Tu peux utiliser le même système pour ton histoire de maintenancier qui retire du matériel. Si il retire un ondulateur en case [i], alors cette case vaudra "none". Ainsi tu pourra compter le nombre d'élément manquant avec une boucle for. J'espère avoir bien compris la question...

-
Edité par Bunnntyyy 26 janvier 2021 à 16:13:41

  • Partager sur Facebook
  • Partager sur Twitter
26 janvier 2021 à 17:33:14

FunlY-Fla a écrit:

Si jamais tu veux modifier un élément tu peux par exemple implémenter un if :

    for(i = 0; i < strlen(c) ; i ++)
    {
        if (c[i] == 'u')
        {
            printf("%c\n", 'r');
        }
        else
        {
            printf("%c\n", c[i]);
        }

    }

Ici, si l'élément contenu dans la case [i] vaut 'u', alors on le remplace par 'r'. 

Ton code affiche un 'r' au lieu d'un 'u' mais il ne le remplace pas !

  • Partager sur Facebook
  • Partager sur Twitter
26 janvier 2021 à 18:55:28

rouloude a écrit:

FunlY-Fla a écrit:

Si jamais tu veux modifier un élément tu peux par exemple implémenter un if :

    for(i = 0; i < strlen(c) ; i ++)
    {
        if (c[i] == 'u')
        {
            printf("%c\n", 'r');
        }
        else
        {
            printf("%c\n", c[i]);
        }

    }

Ici, si l'élément contenu dans la case [i] vaut 'u', alors on le remplace par 'r'. 

Ton code affiche un 'r' au lieu d'un 'u' mais il ne le remplace pas !

Le tout est dans l'idée :-°:lol:

  • Partager sur Facebook
  • Partager sur Twitter
26 janvier 2021 à 20:19:34

FunlY-Fla a écrit:


Le tout est dans l'idée :-°:lol:

pas l'idée de recalculer strlen(c) à chaque tour de boucle j'espère.



  • Partager sur Facebook
  • Partager sur Twitter
26 janvier 2021 à 20:29:25

michelbillaud a écrit:

FunlY-Fla a écrit:


Le tout est dans l'idée :-°:lol:

pas l'idée de recalculer strlen(c) à chaque tour de boucle j'espère.

Non non, il faut le déclarer au préalable, mais c'était un simple exemple, ca ne m'as pas paru important de le déclarer avant

  • Partager sur Facebook
  • Partager sur Twitter
26 janvier 2021 à 21:34:06

Pourtant, c'est important.

Et surtout c'est important de savoir pourquoi.

  • Strlen fait un parcours pour trouver la fin de la chaîne.
  • Pour une chaîne de 100 caractères, ça fera 100 étapes (101, mais bon)
  • Dans une boucle comme tu l'avais écrite, c'est fait pour chaque caractère
  • Donc 100 x 100 = 10.000 etapes.

Alors qu'avec 

int taille = strlen(chaine);
for (int i = 0; i < taille; i++) {

}

La taille n'est calculée qu'une fois, donc 100 étapes au lieu de 10 000. Une paille.

Ordres de grandeur : 100 ml, même pas la moitié d'une bière. 10 000 ml = 10 litres.

Et puis déclarer la variable de boucle dans la boucle

     for (int i = ....

-
Edité par michelbillaud 27 janvier 2021 à 7:58:17

  • Partager sur Facebook
  • Partager sur Twitter