Devoir programmation en C. - C - Programmation
Marsh Posté le 25-05-2006 à 12:19:18
Citation : [0D] De la même manière, les demandes de résolutions d'exercices ne seront pas acceptées |
http://forum.hardware.fr/forum2.ph [...] 544&cat=10
De rien
Marsh Posté le 25-05-2006 à 12:43:33
rudy1895 a écrit : A rendre dans une semaine. entre 1 controle d'algèbre, analyse, proba stat, microeco, politique eco.. |
Hé oui, c'est la dure loi de la sélection des meilleurs...
rudy1895 a écrit : alors les gars il faut m'aider |
T'as raison, il le faut !!!
Je me sens déjà tout entier rempli de cette mission
rudy1895 a écrit : , je vous rendrait tous les services en maths que vous voulez, mais en C je suis vraiment trop une merde. |
Apparemment t'es pas non plus un crack de la conjugaison Bon heureusement qu'il te reste les maths...
rudy1895 a écrit : amusez vous bien. je sais qu'il y a des vrais bêtes dans le coin, j'ai un peu honte, ça va rire.. |
Oui, je ris déjà beaucoup à l'idée de voir ce que t'as déjà pondu...
Montre-nous ce que t'as fait et on te dira si c'est correct (comme on le fait déjà pour d'autres). Mais ne compte pas sur nous pour bosser à ta place... => http://forum.hardware.fr/forum2.ph [...] 40&print=0
Marsh Posté le 25-05-2006 à 13:18:56
rudy1895 a écrit : A rendre dans une semaine. entre 1 controle d'algèbre, analyse, proba stat, microeco, politique eco.. |
rudy1895 a écrit : alors les gars il faut m'aider |
rudy1895 a écrit : je vous rendrait tous les services en maths que vous voulez |
rudy1895 a écrit : amusez vous bien. |
Marsh Posté le 25-05-2006 à 13:33:54
ReplyMarsh Posté le 25-05-2006 à 13:49:26
LePhasme a écrit : Indices : |
... et beaucoup d'autres chapitres de ton livre de C...
Marsh Posté le 25-05-2006 à 14:23:38
ah la la..
bon va falloir que je bosse.
je vous poste ce que j'ai fait dans la journée.
si vous pouvez jeté un coup d'oeil c'est sympa..
Marsh Posté le 25-05-2006 à 14:26:27
rudy1895 a écrit : ah la la.. |
ca c'est deja une attitude plus constructive
Marsh Posté le 25-05-2006 à 14:41:49
rudy1895 a écrit : ah la la.. bon va falloir que je bosse. |
On est tous passés par là et on espère tous que tu réussiras
rudy1895 a écrit : si vous pouvez jeter un coup d'oeil c'est sympa.. |
On le fera...
Marsh Posté le 25-05-2006 à 15:14:34
Allez si tu veux je te le fais gratos, ca n'a pas l'air trop dur, j'en ai pour 3 heures, par contre je pourrais que le faire le weekend prochain donc si tu as le temps ....
Tu viens d'où ?
Marsh Posté le 25-05-2006 à 15:42:42
je lai fait avec seulement 2 informations par personnes. Désolé mais jai pas trvouver les accolades sur mon mac, ni le slash du retour chariot. Voici le chef-duvre..
#include <stdio.h>
#include <strings.h>
typedef Nmax=1000
personne struct ( char nom tab(15); char prenom tab(20)....)
main()
(/*déclaration des variables*/
int n, i
struct personne tab();
char recherche tab(20)
/*ecriture de chacune des personnes*/
for (i=0, i<NMAX, i++)
(printf("Nom : /n" );
gets(tab(i)nom);
printf("Prenom : /n" );
gets(tab(i)prenom);
)
/*Entrée et lecture des informations de recherche*/
printf("taper 0 pour une recherche par nom/n" );
printf ("taper 1 pour une recherche par prenom/n" );
scanf("%d", &n);
printf(« entrer les informations de recherche ») ;
gets(recherche()) ;
/*Recherche*/
if(n==1)
(for(i==0, i<NMAX, i++)
(if(strcmp (recherche, tab(i)nom==0))
c++;
else
printf(«personne (i)) ;
if(c==NMAX)
printf(« no result/n ») ;
)
else
(for(i==0, i<NMAX, i++)
(if(strcmp (recherche, tab(i)nom==0))
c++;
else
printf(«personne (i)) ;
if(c==NMAX)
printf(« no result/n ») )
n'hésitez pas à me faire des suggestions..
Marsh Posté le 25-05-2006 à 16:47:57
non j'ai pas compilé.
et ouai c'est du C.
d'ailleurs j'ai jamais réussit à compiler, il y a toujours des millions d'erreur. genre une virgule..
Marsh Posté le 25-05-2006 à 16:59:18
Marsh Posté le 25-05-2006 à 17:02:34
Tu sais qu'en C les talbeaux s'écrivent avec des [] et non pas avec des () comme en VB ?
C'est quoi ça "char recherche tab(20) " pour toi ?
Citation : amusez vous bien. je sais qu'il y a des vrais bêtes dans le coin, j'ai un peu honte, ça va rire.. |
Marsh Posté le 25-05-2006 à 17:03:42
Trap D a écrit : Tu sais qu'en C les talbeaux s'écrivent avec des [] et non pas avec des () comme en VB ? |
Citation : je lai fait avec seulement 2 informations par personnes. Désolé mais jai pas trvouver les accolades sur mon mac, ni le slash du retour chariot. Voici le chef-duvre.. |
les Crochets doivent en faire parti
Marsh Posté le 25-05-2006 à 17:08:28
Ouaip enfin ya pas mal d'erreurs qui sont rapides a voir...
Avis a la populasse : (roulement de tambour !!! )
- Comment faire une condition en C
if (condition) {
instruction 1;
}
else (condition) {
instruction 2;
}
etc....
C'est le meme type de structure pour une boucle while, di...while, for ou autres.
Apres c'est sur que si tu chopes pas les accolades tu va te taper des tonnes d erreur !!! Au pire tu fais un copier/coller des notres
*****************************************************
A savoir que ton main est deja écrit de travers J'propose un truc comme ca plutot. Mais j peux dire des conneries (dsl pas trouvé de photo de bartez )
*****************************************************
main = int main () {
.....
return 0
}
Voila, corrige les erreurs et renvoie le truc, j regarderais si je repasse... Et trouve les accolades !!!
ah oui j'oubliais :
google : "accolades mac" -> http://www.metacites.net/article143.html
[temps de recherche : 5 sec] avis aux amateurs.
Bon courage amigo
Marsh Posté le 25-05-2006 à 17:13:00
mdr Je@nb comment elle déchire ta signature de messages !!! UP
Et t'en penses quoi de "playstation" ???
Marsh Posté le 25-05-2006 à 18:02:23
rudy1895 a écrit : je lai fait avec seulement 2 informations par personnes. Désolé mais jai pas trouver les accolades sur mon mac, ni le slash du retour chariot. |
Hum... écrire du C sans accolade, ni crochet, ni backslash c'est un peu MI12...
rudy1895 a écrit : Voici le chef-duvre.. |
Pfou... c'est plus du code, c'est de la forêt vierge ton truc...
Bon, à nous de nous mettre au turbin...
rudy1895 a écrit : typedef Nmax=1000 |
typedef sert à créer des types nouveaux à partir de types connus. Tu veux peut-être dire "#define Nmax 1000" => convention: les macro sont en majuscules =>
#define NMAX 1000
rudy1895 a écrit : personne struct ( char nom tab(15); char prenom tab(20)....) |
Un tableau se définit "type identificateur [nb]" => char nom[15]; char prenom[20];
rudy1895 a écrit : main() |
int main()
rudy1895 a écrit : gets(tab(i)nom); |
gets(tab[i].nom)
Attention, la fonction "gets" est dangereuse car elle ne fait pas de contrôle de la chaîne entrée => si tu entres 150 caractères, gets() te les stockera vaillemment dans nom qui n'en fait que 15 (dont un réservé pour le '\0') => débordement
Vaut mieux utiliser fgets() à qui on donne la limite à ne pas dépasser
fgets(tab[i].nom, 15, stdin)
rudy1895 a écrit : gets(recherche()) |
Alors là... je suis bluffé. Tu fais saisir une fonction !!!
A moins que "recherche" renvoie une adresse où stocker les octets saisis par "gets", tu vas avoir un belle surprise à l'exécution...
rudy1895 a écrit : for(i==0, i<NMAX, i++) |
T'avais raison de dire qu'on allait rire. == est une comparaison. L'affectation se fait par "=" => for (i=0; i < NMAX; i++)
D'habitude on voit souvent le contraire "if (i = 0)" au lieu de "if (i == 0)". C'est la première fois que je vois "for (i==0; ...; ...)"
rudy1895 a écrit : if(strcmp (recherche, tab(i)nom==0)) |
Pb de parenthèses. Ton but est de comparer ce que te renvoie "strcmp()" avec "0" =>
if (strcmp(recherche, tab[i].nom) == 0)
rudy1895 a écrit : printf(«personne (i)) ; |
No comment...
printf("%s", tab[i].nom);
rudy1895 a écrit : n'hésitez pas à me faire des suggestions.. |
Une erreur par ligne... c'est plus des suggestions qu'il te faut, c'est un miracle...
rudy1895 a écrit : à ce point?? |
Faut vraiment, mais alors vraiment que tu ouvres un bouquin de C... et à la page "1" puis que tu lises la préface, l'intro et tout le reste. Et t'arrête surtout pas avant d'avoir lu les mots "imprimé le <...> sur les presses de <...>"
Déjà, commence par aller voir l'un où l'autre de ces deux liens
A la réflexion, n'hésite surtout pas à consulter les deux à la fois...
Marsh Posté le 25-05-2006 à 20:00:07
bon ok j'ouvre mon bouquin,
thanks sver..
je m'y met. merci pour les liens (ils sont plutot bien). je vous le programme dès qu'il est tout tout beau, comme ça, si quelqu'un est intérréssé par ce programme de recherche de merde..
enfin, bref juste une petite question, l'appel d'une structure, comment on fait ça ?
par exemple, j'ai entré 3 personnes avec mon
personne struct ( char nom tab[15]; char prenom tab[20])
la première personne ça sera : personne(nom[1], prenom[1]) ?
pas terrible parce que nom[1] ça appelle le 1st caractère du tableau nom[],
alors,
personne[1] ?
au fait merci pour les [{}]
Marsh Posté le 25-05-2006 à 22:04:20
Ok j te montre pour les strucutres
Dabord comme dans tous les programmes en C, il faut que tu la décrive cette struct.
Du style :
struct carnetAd{
char prénom;
char nom;
int age;
int etc...;
};
apres dans ton prog il faut que tu définisses que dans chaques éléments de ta structures tu vux lui faire correspondre des listes ou des tableaux.
struct carnetAd nom[nbNom];
ou nbNom corresponds au nombre de noms qu il y aura dans ton carnet d adresse.
Voila. La j viens de te définir tes structures. Pour info j bosses sur le mm type de programme sauf que moi j ai fini la partie saisie. J rentre dans la partie tri qui est grave corsée.
pour ta partie recherche de nom (par exemple) il faut juste que tu lui fasse chercher dans la partie "nom" de ta structure tous les noms qui s'écrivent avec les mm caractéree
Pour info : le nom numéro trois de ta structure s'appel "carnetAd.nom[3]"
Voila t'as tout
apres faut juste que tu lui fasse tester les chaines de caracteres rentrés et la chaine de caractere que tu rechercge...
Bon courage amigo
Marsh Posté le 25-05-2006 à 22:30:29
thanx l'homme fou.
c'est très clair. j'ai compris. mieux que mon bouquin de 1800 pages..
je m'en souviens avoir fait du tri avec les pointeurs et des jeux de cartes, je ne comprenais absolument rien, bah mon vieux bon courage..
Marsh Posté le 25-05-2006 à 23:16:51
rudy1895 a écrit : je lai fait avec seulement 2 informations par personnes. Désolé mais jai pas trvouver les accolades sur mon mac, ni le slash du retour chariot. Voici le chef-duvre.. |
|
Citation : n'hésitez pas à me faire des suggestions.. |
Changer d'orientation ?
Marsh Posté le 25-05-2006 à 23:29:56
Clemci a écrit : Ok j te montre pour les strucutres |
Hum... que voilà de truculentes strucutres...
Clemci a écrit : Dabord comme dans tous les programmes en C, il faut que tu la décrive cette struct. |
On dit plutôt "déclarer"...
Clemci a écrit : Du style : |
Hum... et tes noms et prénoms n'ont qu'un seul caractère ?
- Enchanté, je m'appelle J F
- Oh, ravi. moi c'est G T
!!!
Clemci a écrit : apres dans ton prog il faut que tu définisses que dans chaques éléments de ta structures tu vux lui faire correspondre des listes ou des tableaux. |
NON !
Déjà en C les indices partent de 0 donc le numéro trois aura l'indice "2"
En plus, "carnetAd" n'existe pas
"struct carnetAd", d'après ton exemple, est un nom de type pas un nom de variable
En l'occurrence, ce sera simplement "nom[2].nom" (super idée que de mettre des noms de variables identiques aux noms de membres !!!)
Pas la peine de donner des conseils si c'est pour raconter n'importe quoi...
Marsh Posté le 25-05-2006 à 23:41:05
Clemci a écrit : Ok j te montre pour les strucutres |
ok lol
merci d'avoir joué, repassez la semaine prochaine
Marsh Posté le 26-05-2006 à 02:11:47
il y a un truc que je saisis pas, tu utilises les structures alors que tu sais a peine de faire du C, la syntaxe du if, du while, les tableaux
Marsh Posté le 26-05-2006 à 02:15:31
weed a écrit : il y a un truc que je saisis pas, tu utilises les structures alors que tu sais a peine de faire du C, la syntaxe du if, du while, les tableaux |
Vi, c'est la nouvelle méthode. On te donne des bouts de C tout fait et tu les apprends par coeur. Comme les enfants qui apprennent à lire par syllabes au lieu d'apprendre à associer les lettres. Il y a plus de trucs à savoir donc t'as l'impression d'être plus calé que la génération précédente...
Marsh Posté le 09-06-2006 à 05:24:13
voici enfin le programme. merci à tous pour votre aide.
toujours un petit problème cependant, je peux l'executer mais à l'entrée des paramètres de recherche après avoir appuyer sur "enter" je me retrouve sur la page de mon programme..
si qqn pouvait m'aider, ça serait sympa à vous.
#include <stdio.h>
#include <string.h>
#define NMAX 10
#define NMAX 100
struct personne{
char nom[15];
char prenom[20];
char lieunaissance[20];
char datenaissance[15];
char numeropasseport[15];
char lieudelivrance[20];
char datedelivrance[15];};
int main()
{int n, c, i;
struct personne bank[NMAX];
char recherche[20];
char tmp[1];
/*entrée des personnes et remplissage du tableau de structures « bank »*/
for (i=0; i<NMAX; i++)
{printf("Nom:\n" );
fgets(bank[i].nom, 15, stdin);
printf("Prenom:\n" );
fgets(bank[i].prenom, 20, stdin);
printf("Lieu de naissance:\n" );
fgets(bank[i].lieunaissance, 15, stdin);
printf("Date de naissance:\n" );
fgets(bank[i].datenaissance, 20, stdin);
printf("Numero de passeport:\n" );
page 1.
fgets(bank[i].numeropasseport, 15, stdin);
printf("Lieu de delivrance:\n" );
fgets(bank[i].lieudelivrance, 20, stdin);
printf("Date de delivrance:\n" );
fgets(bank[i].datedelivrance, 15, stdin);
}
/*fin de l'entree des personnes"*/
printf("Taper 1 pour lancer une recherche par nom.\n" );
printf("Taper 2 pour lancer une recherche par prenom.\n" );
printf("Taper 3 pour lancer une recherche par lieu de naissance.\n" );
printf("Taper 4 pour lancer une recherche par date de naissance.\n" );
printf("Taper 5 pour lancer une recherche par numro de passeport.\n" );
printf("Taper 6 pour lancer une recherche par lieu de delivrance.\n" );
printf("Taper 7 pour lancer une recherche par date de delivrance.\n" );
scanf("%d",&n);
printf("Rentrer les elements de la recherche.\n" );
gets(recherche);
/*debut de la recherche*/
if (n==1)
{for (i=0; i<NMAX; i++)
{c=0;
/*comparaison et impression si succées */
if(strcmp(recherche, bank[i].nom)==0)
{printf("%s", bank[i].prenom);
printf("%s", bank[i].nom);
printf("%s", bank[i].lieunaissance);
printf("%s", bank[i].datenaissance);
printf("%s", bank[i].numeropasseport);
printf("%s", bank[i].lieudelivrance);
printf("%s", bank[i].datedelivrance);
c++;
}
if (c==0)
printf("no result\n" );
}
}
page 2.
else if(n==2)
{for (i=0; i<NMAX; i++)
{c=0;
if(strcmp(recherche, bank[i].prenom)==0)
{printf("%s", bank[i].prenom);
printf("%s", bank[i].nom);
printf("%s", bank[i].lieunaissance);
printf("%s", bank[i].datenaissance);
printf("%s", bank[i].numeropasseport);
printf("%s", bank[i].lieudelivrance);
printf("%s", bank[i].datedelivrance);
c++;
}
if (c==0)
printf("no result\n" );
}
}
else if(n==3)
{for (i=0; i<NMAX; i++)
{c=0;
if(strcmp(recherche, bank[i].lieunaissance)==0)
{printf("%s", bank[i].prenom);
printf("%s", bank[i].nom);
printf("%s", bank[i].lieunaissance);
printf("%s", bank[i].datenaissance);
printf("%s", bank[i].numeropasseport);
printf("%s", bank[i].lieudelivrance);
printf("%s", bank[i].datedelivrance);
c++;
}
if (c==0)
printf("no result\n" );
}
}
else if(n==4)
{for (i=0; i<NMAX; i++)
{c=0;
page 3.
if(strcmp(recherche, bank[i].datenaissance)==0)
{printf("%s", bank[i].prenom);
printf("%s", bank[i].nom);
printf("%s", bank[i].lieunaissance);
printf("%s", bank[i].datenaissance);
printf("%s", bank[i].numeropasseport);
printf("%s", bank[i].lieudelivrance);
printf("%s", bank[i].datedelivrance);
c++;
}
if (c==0)
printf("no result\n" );
}
}
else if(n==5)
{for (i=0; i<NMAX; i++)
{c=0;
if(strcmp(recherche, bank[i].numeropasseport)==0)
{printf("%s", bank[i].prenom);
printf("%s", bank[i].nom);
printf("%s", bank[i].lieunaissance);
printf("%s", bank[i].datenaissance);
printf("%s", bank[i].numeropasseport);
printf("%s", bank[i].lieudelivrance);
printf("%s", bank[i].datedelivrance);
c++;
}
if (c==0)
printf("no result\n" );
}
}
page 4.
else if(n==6)
{for (i=0; i<NMAX; i++)
{c=0;
if(strcmp(recherche, bank[i].lieudelivrance)==0)
{printf("%s", bank[i].prenom);
printf("%s", bank[i].nom);
printf("%s", bank[i].lieunaissance);
printf("%s", bank[i].datenaissance);
printf("%s", bank[i].numeropasseport);
printf("%s", bank[i].lieudelivrance);
printf("%s", bank[i].datedelivrance);
c++;
}
if (c==0)
printf("no result\n" );
}
}
else if(n==7)
{for (i=0; i<NMAX; i++)
{c=0;
if(strcmp(recherche, bank[i].datedelivrance)==0)
{printf("%S", bank[i].prenom);
printf("%S", bank[i].nom);
printf("%s", bank[i].lieunaissance);
printf("%s", bank[i].datenaissance);
printf("%s", bank[i].numeropasseport);
printf("%s", bank[i].lieudelivrance);
printf("%s", bank[i].datedelivrance);
c++;
}
if (c==0)
printf("no result\n" );
}
}
/*fin de la recherche*/
fclose (sortie);
return 0;
}
page 5.
Marsh Posté le 09-06-2006 à 08:41:25
rudy1895 a écrit : voici enfin le programme. merci à tous pour votre aide. |
Merci d'utiliser la balise code :
Pour le reste
- Ne pas utiliser gets(). C'est un bug.
- C'est bien d'utiliser fgets(), mais il faut nettoyer (supprimmer proprement le \n). Pour ça, je recommande :
Code :
|
avec :
Code :
|
D'autre part, tu devrais apprendre à écrire des fonctions et à utiliser switch-case...
Le fclose() de la fin ne correspond à rien...
Enfin, pour un code de test (validation d'un principe) , on a pas besoin de mettre autant de champs. Pour saisir 10 noms, il faut plusieurs minutes. Ou alors fait une lecture à partir d'un fichier texte que l'on peut facilement écrire avec un éditeur. Le plus simple : Un champ par ligne, un nombre de lignes fixe par enregistrement.
Par exemple :
|
Marsh Posté le 09-06-2006 à 09:34:29
utilises un debugger, lis les docs de chaque fonction que tu utilises, test les entrées et les sorties. Là tu pourra cerner ton erreur.
Marsh Posté le 09-06-2006 à 09:39:10
merci les gars. je vais faire tout ça.
et ouai je vais peut être mettre des fonctions ça m'eviteras de tout répéter 20 fois.
Marsh Posté le 09-06-2006 à 13:47:19
rudy1895 a écrit : et ouai je vais peut être mettre des fonctions ça m'eviteras de tout répéter 20 fois. |
ouais, c'est peut-être une solution qu'il conviendrait d'envisager
Marsh Posté le 10-06-2006 à 12:47:29
Sve@r a écrit : ouais, c'est peut-être une solution qu'il conviendrait d'envisager |
C'est meme indispensable
Marsh Posté le 14-06-2006 à 22:39:25
Oh putain, je viens de voir ce sujet d'anthologie.
Ma prog en C sans accolades, c'est un concept à creuser...
Marsh Posté le 15-06-2006 à 01:38:22
j'aime bien ca :
Code :
|
on lui apprend le else ?
Marsh Posté le 25-05-2006 à 12:14:39
A rendre dans une semaine. entre 1 controle d'algèbre, analyse, proba stat, microeco, politique eco..
ça va être chaud chaud chaud...
alors les gars il faut m'aider, je vous rendrait tous les services en maths que vous voulez, mais en C je suis vraiment trop une merde.
voila le programme à faire :
a l'aide d'un tableau de personnes (nom, prenom, date de naissance, lieu de naissane, n° passeport, date de délivrance du passeport), ecrire un programme C qui permet de rentrer les données des personnes rentré au clavier (on les rentre tous d'un coup), et qui ensuite, effectue une recherche automatique de toutes les personnes selon leur nom, ou prenom, ou date....
par exemple, tous les gars qui s'appellent patrick, ou franck..
amusez vous bien. je sais qu'il y a des vrais bêtes dans le coin, j'ai un peu honte, ça va rire..