Exercice de tableau redimension
Fermé
ninrin
Messages postés
9
Date d'inscription
jeudi 3 mai 2018
Statut
Membre
Dernière intervention
16 mai 2018
-
16 mai 2018 à 19:38
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 25 mai 2018 à 12:43
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 25 mai 2018 à 12:43
A voir également:
- Redim algorithme
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Tableau de raccourcis clavier - Guide
3 réponses
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 17 mai 2018 à 10:58
Modifié le 17 mai 2018 à 10:58
Salut ninrin,
ton compilateur avec Codeblocks devrait être gcc, et par défaut il est paramétré par Codeblocks pour générer des warnings (et bien sûr des erreurs de compilation), et donc ta tentative de compilation de ton programme devrait te dire ceci :
Utilise ces informations pour corriger ton code.
Quelques indications en réponse à tes question :
-Il faut donc crée un tableau non dimensionner au début pour le redimensionner par la suite, j'ai donc ecrit au début, int T[0], pensez vous que c'est correct?
Non. C'est sans doutes juste un pointeur sur int qu'on te demande de déclarer, que tu utilises une fois que tu connais le nombre d'éléments pour allouer l'espace nécessaire avec malloc. Tu pourras ensuite passer d'un élément à l'autre avec l'opérateur d'indexation
-Je reste bloqué sur la ligne 15, je ne sais pas comment redimensionner un tableau... la fonction "redim" ne doit sûrement pas existé, avez vous une solution? Pareil pour retrancher -1 à nb, j'ai un gros doute sur mon codage.
En C, si tu dois allouer de l'espace mémoire avec malloc pour 10 éléments int, il te faut une taille de
-Pour la ligne 19, j'ai un doute, si ce n'est pas plûtot "i++" au lieu de "i+1" lol.
Là tu exagères vraiment. Vois ton cours ou ton manuel sur les boucles for et sur l'incrémentation de variables.
-Ligne 22 j'ai mis le pointeur "&" pour insérer i dans T.
Ton scanf n'est pas dans la boucle. Il ne sera donc exécuté qu'une fois.
L'opérateur
-j'ai pas bien saisis le "i Suivant" en algorithme, alors j'ai retranscris en C "i++"?
Si tu utilises une boucle for, ses 3 arguments vont te permettre de définir la valeur de départ de i, la condition de sortie et l'incrémentation de i à chaque itération.
Alors, à cet endroit, tu auras juste besoin d'une accolade fermante.
Dal
ton compilateur avec Codeblocks devrait être gcc, et par défaut il est paramétré par Codeblocks pour générer des warnings (et bien sûr des erreurs de compilation), et donc ta tentative de compilation de ton programme devrait te dire ceci :
$ gcc -Wall 35367100.c
35367100.c: In function ‘main’:
35367100.c:15:5: error: ‘redim’ undeclared (first use in this function)
redim T("%d", &nb-1);
^
35367100.c:15:5: note: each undeclared identifier is reported only once for each function it appears in
35367100.c:15:11: error: expected ‘;’ before ‘T’
redim T("%d", &nb-1);
^
35367100.c:16:21: error: expected ‘;’ before ‘)’ token
for (i = 0; nb-1)
^
35367100.c:19:9: error: expected ‘;’ before ‘i’
i+1;
^
35367100.c:22:18: error: array subscript is not an integer
scanf("%d", T[&i]);
^
35367100.c:11:9: warning: variable ‘T’ set but not used [-Wunused-but-set-variable]
int T[0];
^
35367100.c:10:10: warning: unused variable ‘flag’ [-Wunused-variable]
bool flag;
^
Utilise ces informations pour corriger ton code.
Quelques indications en réponse à tes question :
-Il faut donc crée un tableau non dimensionner au début pour le redimensionner par la suite, j'ai donc ecrit au début, int T[0], pensez vous que c'est correct?
Non. C'est sans doutes juste un pointeur sur int qu'on te demande de déclarer, que tu utilises une fois que tu connais le nombre d'éléments pour allouer l'espace nécessaire avec malloc. Tu pourras ensuite passer d'un élément à l'autre avec l'opérateur d'indexation
[ ]comme si tu avais déclaré un tableau.
-Je reste bloqué sur la ligne 15, je ne sais pas comment redimensionner un tableau... la fonction "redim" ne doit sûrement pas existé, avez vous une solution? Pareil pour retrancher -1 à nb, j'ai un gros doute sur mon codage.
En C, si tu dois allouer de l'espace mémoire avec malloc pour 10 éléments int, il te faut une taille de
sizeof(int) * 10et pas de
sizeof(int) * (10 - 1), sinon tu déborderas d'espace mémoire alloué en stockant le 10ème élément
-Pour la ligne 19, j'ai un doute, si ce n'est pas plûtot "i++" au lieu de "i+1" lol.
Là tu exagères vraiment. Vois ton cours ou ton manuel sur les boucles for et sur l'incrémentation de variables.
-Ligne 22 j'ai mis le pointeur "&" pour insérer i dans T.
Ton scanf n'est pas dans la boucle. Il ne sera donc exécuté qu'une fois.
L'opérateur
&permet d'obtenir l'adresse de quelque chose. Tu l'utilises dans scanf, car scanf a besoin de l'adresse de la variable dont le contenu mémoire doit être modifié. Ce n'est donc pas à l'index que tu dois appliquer l'opérateur. Imagine que l'adresse mémoire de i soit 3220574636 et que tu as dimensionné ton tableau pour 10 éléments (heureusement, le compilateur génère une erreur de compilation, car il considère qu'une adresse mémoire n'est pas un type entier utilisable pour un index de tableau) ... cela devrait donc être
scanf("%d", &T[i]);...
-j'ai pas bien saisis le "i Suivant" en algorithme, alors j'ai retranscris en C "i++"?
Si tu utilises une boucle for, ses 3 arguments vont te permettre de définir la valeur de départ de i, la condition de sortie et l'incrémentation de i à chaque itération.
Alors, à cet endroit, tu auras juste besoin d'une accolade fermante.
Dal
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 17 mai 2018 à 11:11
Modifié le 17 mai 2018 à 11:11
J'ajouterai qu'un algorithme n'est pas un programme informatique et qu'il ne fait que décrire une séquence d'opérations logiques, lesquelles peuvent être exprimées dans un langage de programmation sous une forme propre, qui peut être fortement différente, tout en exprimant les mêmes idées.
Tu ne dois pas te focaliser sur la recherche d'une traduction de chaque "mot", mais sur l'expression correcte des idées véhiculées par l'algorithme dans le langage de programmation.
Tu ne dois pas te focaliser sur la recherche d'une traduction de chaque "mot", mais sur l'expression correcte des idées véhiculées par l'algorithme dans le langage de programmation.
ok , donc voici une version "amélioré" de la traduction en C :
J'aurais besoin d'aide pour la ligne 26 de malloc, avec un error: assignement to expression with array. Je suis largué, c'est la 1ère fois que j'utilise les fonction d'allocation dynamique
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> int nb; int flag =1; int T[0]; int main(void) { int flag =1; if(flag) { printf("vrai\n"); } else { printf("faux\n"); } printf("Entrez le nombre de valeurs:\n"); scanf("%d", &nb); T = malloc(sizeof(int)); for (i = 0; nb-1 ; i++) { printf("entrez le no\n"); scanf("%d", &T[i]); } flag = vrai; for (i = 1; nb-1) { if(T <> T(i-1))+1 { flag = faux; } } if(flag) { printf("Les nombvres sont consecutifs\n"); } else { printf("Les nombres ne sont pas consécutifs\n"); } return 0; }
J'aurais besoin d'aide pour la ligne 26 de malloc, avec un error: assignement to expression with array. Je suis largué, c'est la 1ère fois que j'utilise les fonction d'allocation dynamique
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
25 mai 2018 à 12:43
25 mai 2018 à 12:43
Comme dans ton code initial, tu déclares T comme un tableau, alors que je t'indiquais que tu devais le déclarer comme pointeur sur
Voilà un code illustrant comment utiliser un pointeur sur
Le code, et les commentaires devraient le permettre de saisir les choses.
T n'est pas de type tableau, mais
Dal
intpour l'utiliser avec malloc.
Voilà un code illustrant comment utiliser un pointeur sur
intpour allouer dynamiquement un espace de stockage et accéder aux éléments de cet espace avec l'opérateur
[ ]:
#include <stdio.h> #include <stdlib.h> int main(void) { int * T; /* T est une variable contenant un pointeur sur int */ /* on réserve avec malloc un espace mémoire de la * taille de 3 int, et on affecte l'adresse de cet * espace mémoire à la variable T */ T = malloc(sizeof(int) * 3); /* si l'allocation mémoire a échoué, on termine * le programme */ if (T == NULL) { printf("Erreur d'allocation mémoire\n"); return 1; } /* on demande à l'utilisateur combien il veut stocker * d'entiers (simulation) */ int nb = 3; /* on se sert du pointeur T et de l'opérateur * [ ] pour accéder aux emplacements de stockage * disponibles */ int i; printf("Saisissez %d entiers svp :\n", nb); for (i = 0; i < nb; i++) scanf("%d", &T[i]); printf("Merci, voici les nombres entiers saisis :\n"); for (i = 0; i < nb; i++) printf("nombre n°%d : %d\n", i, T[i]); /* on libère la mémoire pointée par T */ free(T); return 0; }
Le code, et les commentaires devraient le permettre de saisir les choses.
T n'est pas de type tableau, mais
[ ]permet une itération sur les éléments stockés en mémoire à partir de l'adresse du premier élément, grâce à l'arithmétique de pointeurs, la taille d'un
intétant connue du compilateur.
Dal