Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1483 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Débutant en C...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Débutant en C...

n°2205520
shize815
Posté le 05-10-2013 à 21:44:58  profilanswer
 

Bonjour messieurs-dames, je suis nouveau sur ce fofo et je me suis inscrit pour une raison simple.
 
Après avoir perfectionné mon anglais pendant 2 ans en fac (d'anglais donc), je m'attaque à Epitech, content de ne pas avoir a me soucier de mon TOEIC et, jusque la du moins, décidé à apprendre le C avec ferveur !
 
Sauf que là, c'est la grosse débandade. Alors qu'on m'avait dit qu'aucune connaissance ni en maths ni en info n'étaient requises pour l'école puisque qu'on apprenait tout sur le tas pendant la fameuse "piscine", je suis complètement largué alors qu'on finit a peine la première des trois semaines...
Des le début j'entendais mes voisins parler de récursives, d'appels de fonctions et de pointeurs, et moi à côté je passe la journée à tourner en rond dans les exos que je suis incapable de finir...
 
Je commence à piger le fonctionnement de "base" du c, j'intègre une partie du vocabulaire, mais je galère, on nous jette directement dedans sans aucune explication ou théorie, sauf que du coup c'est pas du tout équitable parce que contrairement à beaucoup, j'ai ni bac S (donc pour les exos ou je dois coder une factorielle, je peux me brosser.) ni connaissances en C, j'avais jamais touché une console avant lundi et je rame comme pas permis...
 
Du coup je me demandais ou je pourrais trouver des petites leçons de C en ligne, mais des leçons bien spécifiques, je veux pas qu'on m'apprenne a utiliser des pointeurs ou des trucs compliqués comme ça, j'ai d'abord besoin, avant ça, qu'on m'apprenne la manière de raisonner pour coder. De la "méthodo" en quelques sortes...
 
J'ai un projet à présenter pour demain ou je dois coder des "B" pour en faire un carré a taille variable dont les coins sont des 'C' et des 'A', et en soi c'est pas très compliqué je pense qu'avec la bonne manière de découper mon projet étape par étape je peux m'en sortir, mais les raisonnements logiques avec un Bac L et 2 ans de fac d'anglais c'est vrai que j'ai quand même perdu la main quoi...
 
 
Voilà donc la j'ai un peu raconté ma vie (la piscine est une période très éprouvante moralement aussi donc je devais avoir besoin de vider mon sac ^^) mais en gros voilà le topo. J'aurais besoin qu'on me montre comment raisonner en C, comment penser en C. Après, et après seulement, je me concentrerai sur les récursives, les appels de fonction, les pointeurs, les tableaux et autres réjouissances... (Encore que, les appels de fonctions, ça commence à rentrer.)
 
Si vous avez pris le temps de me lire (et j'ai conscience qu'il y a matière à se décourager avant la fin), merci de votre temps/attention :) bye !

mood
Publicité
Posté le 05-10-2013 à 21:44:58  profilanswer
 

n°2205521
Profil sup​primé
Posté le 05-10-2013 à 22:45:38  answer
 

Citation :

coder des "B" pour en faire un carré a taille variable dont les coins sont des 'C' et des 'A',


 
Soit plus explicite.

n°2205522
shize815
Posté le 05-10-2013 à 23:08:09  profilanswer
 

Coder des char(66) si tu préfères pour donner en gros un carré qui se définit comme ça :
Carré(int x, int y)
 
Si x = 3
Y = 4
 
Ça donne  
 ABC
 B  B
 B  B
 CBA
 
En gros voilà. Mais je veux pas la solution je suis la pour chercher pas pour me faire servir, j'ai juste besoin d'une aide concernant la logique informatique, la façon de démanteler un énoncé pour construire ma fonction pièce par pièce.. Je sais que c'est la clé mais je sais pas comment faire...

n°2205523
Profil sup​primé
Posté le 05-10-2013 à 23:17:11  answer
 

shize815 a écrit :

Coder des char(66) si tu préfères pour donner en gros un carré qui se définit comme ça :
Carré(int x, int y)
 
Si x = 3
Y = 4
 
Ça donne  
 ABC
 B  B
 B  B
 CBA
 
En gros voilà. Mais je veux pas la solution je suis la pour chercher pas pour me faire servir, j'ai juste besoin d'une aide concernant la logique informatique, la façon de démanteler un énoncé pour construire ma fonction pièce par pièce.. Je sais que c'est la clé mais je sais pas comment faire...


 
 
je peux te dire qu'un carré les dimensions des côtés son identiques donc c'est Carré(int size)
 
Après je sais pas de suite mais j'ai la nuit pour y réfléchir.

n°2205526
Terminapor
I'll see you rise.
Posté le 05-10-2013 à 23:29:26  profilanswer
 

Epitech.. :D
 
Sinon, pour ton problème, cherche du côté des boucles for.
 
Une boucle for te permet de répéter un bout de code plusieurs fois, elle se décompose comme ça :  
 

Code :
  1. for ( [initialisation] ; [condition] ; pas )
  2. {
  3. // Ton code à exécuter ici
  4. }


 
En général, tu verras la boucle for dans ce genre :  
 

Code :
  1. for (int i=0; i < 2 ; i++)
  2. {
  3. // Le code
  4. }


 
Le principe dans ce cas est simple :  
 
On initialise une variable i à 0 (attention, dans ce cas la variable i n'existe qu'à l'intérieur de ta boucle, en dehors de celle-ci elle n'existe plus, cf le scope)
On vérifie si i est bien inférieur à 2. Si ce test est faux, alors on arrête la boucle, sinon, on exécute le code à l'intérieur, puis on exécute le pas (i++, qui signifie on incrémente i, équivalent à i+=1 et i = i+1).
 
En somme, dans ce cas tu va exécuter le code 2 fois :  
 
Une fois i=0
Une fois i=1
Lorsque i passe à 2, on arrête.
 
Un exemple pour dessiner une ligne de * en C, on peut configurer le nombre d'étoile :
 

Code :
  1. int nb_etoiles = 6;
  2. for (int i=0;i<nb_etoiles;i++)
  3. {
  4.   printf("*" );
  5. }


 
Un autre pour afficher i à chaque étape (séparés par un espace)

Code :
  1. for (int i=0;i<5;i++)
  2. {
  3.   printf("%i ",i);
  4. }


 
Ca te sortira 0 1 2 3 4 sur ta console. (printf est formaté, tu peux facilement afficher des entier via %i, des nombre décimaux via %f  / %d (float ou double), etc..)
 
 
Dans ton cas, tu vas devoir utiliser une double boucle for (c'est plus simple à concevoir comme ça)
Essais avec une double boucle for de faire un carré d'étoile. Lorsque tu auras pigé le truc, tu pourras facilement faire ton exercice.


---------------
Perhaps you don't deserve to breathe
n°2205527
shize815
Posté le 05-10-2013 à 23:52:09  profilanswer
 

En fait j'ai dit carré mais c'est une forme a 4 côté, rectangle ou carré quoi ^^
 
Ouais sauf qu'en fait la bas on a une "norme" a respecter, très restrictive mais qui force a se creuser les méninges, la commande For est interdite, et la seule fonction a laquelle on ait droit est my_putchar.
Sinon on a droit aux while, aux if et aux else !
 
Sinon, je vois que tu te moques d'Epitech... À moi cette école m'a l'air très bien, très exigeante mais ça permet une meilleure productivité au final, enfin je pense :)
Après si c'est pour le prix... Ça peut faire sourire mais je me dis qu'avec 100% d'anciens étudiants engagés en CDI a 2.000€ net minimum dès la sortie (ils s'y engagent par contrat lors de l'inscription), je vois plus ça comme un investissement qu'autre chose ^^ mais c'est vrai que c'est cher.  
Je comprends que des gens comme toi, qui ont déjà des connaissances de bases, puissent préférer d'autres écoles, mais j'aime bien son fonctionnement et son ambiance :)

n°2205528
shize815
Posté le 05-10-2013 à 23:53:05  profilanswer
 

Je précise que, si For est interdite durant toute la scolarité, on aura droit à d'autres fonctions que my_putchar après la piscine... Une fois qu'on les aura codées nous-même.

n°2205530
Profil sup​primé
Posté le 06-10-2013 à 00:12:01  answer
 

Moi j'ai fait ça, mais ça compile pas.
 
L'idée est la quoi.
 

Code :
  1. #include <stdio.h>
  2.  
  3.  
  4. struct Matrix_Type {
  5.  int size;
  6. };
  7.  
  8.  
  9. void afficher (struct Matrix_Type Matrix) {
  10.  
  11.  char code = 'B';
  12.  
  13.  for (int Line=1; Line<=Matrix->size; Line++)
  14.    {
  15.      for (in Col=1; Col<= Matrix->size; Col++)
  16.  
  17.        {
  18.          if ((line == 1) & (col == 1)) {
  19.            printf("A" );
  20.          };
  21.          else if ((col = 1) | (col = Matrix->size)) {
  22.            printf("B" );
  23.          };
  24.          else if ((line = Matrix->size) & ((col = 1) | (col = Matrix->size))) {
  25.            printf("C" );
  26.          };
  27.        }
  28.    }
  29. }
  30.  
  31.  
  32.  
  33.  
  34. };
  35.  
  36.  
  37.  
  38. int main(void) {
  39.  
  40.  struct Matrix_Type Matrix;
  41.  
  42.  
  43.  printf("Entrez la dimension du carré :" );
  44.  
  45.  Matrix->size = 5;
  46.  
  47.  afficher(Matrix);
  48.  
  49.  return (0);
  50. };


 
 
 

n°2205531
Profil sup​primé
Posté le 06-10-2013 à 00:18:16  answer
 

L'alternative à for, c'est while, et for n'est q'une facilité du while.

n°2205532
shize815
Posté le 06-10-2013 à 00:19:32  profilanswer
 

Oulah c'est bien trop compliqué pour mon niveau ça ^^ je sais pas ce qu'est Struct. Ni Void ni <stdio> et j'ai pas le droit à printf. Tout un challenge ^^ je dois me démerder avec my_putchar, int, while, if et else ! Haha

mood
Publicité
Posté le 06-10-2013 à 00:19:32  profilanswer
 

n°2205533
Profil sup​primé
Posté le 06-10-2013 à 00:23:13  answer
 

L'important se sont les condition d'affichage.

n°2205534
Terminapor
I'll see you rise.
Posté le 06-10-2013 à 00:25:42  profilanswer
 

Tu peux aussi coder ça avec un while effectivement :

 
Code :
  1. int i = 0;
  2. while (i < xx)
  3. {
  4. // ton code
  5. i++;
  6. }
 

Ou en récursif  :

 
Code :
  1. void Func(int i)
  2. {
  3.   if (i >= xx)
  4.     return;
  5.   // ton code
  6.   Func( i+1 );
  7. }
 

Mais commence par faire avec des boucles for pour comprendre le principe, ensuite tu pourras chercher un moyen de faire sans for.
Pour ce qui est de my_putchar, faudrait voir la fonction pour juger.

 

Jovalise : Il manque les espaces et retours à la ligne dans ton implémentation ;)

 

Pour ce qui est d'Epitech, j'en ai entendu parler et au final, on paye pour faire de l'autodidactie, chose qui est faisable gratuitement chez soi, qui plus et on m'a raconté qu'avec un peu de pognon en plus, on validait son année plus facilement.. :whistle:

 

Mais bon, c'est pas vraiment le sujet du topic :D

 

edit : Ok je viens de voir les messages pendant que je rédigait, my_putchar permet d'afficher un caractère sur la console ?


Message édité par Terminapor le 06-10-2013 à 00:26:31

---------------
Perhaps you don't deserve to breathe
n°2205536
shize815
Posté le 06-10-2013 à 00:37:37  profilanswer
 

C'est ça pour my_putchar, un caractère à la fois ;)
Ouais je vais m'entraîner avec while et je verrai bien, merci en tout cas !
 
Haha oui c'est une manière de voir les choses mais c'est de l'autodidacte très poussif, jamais je me ferai 15h/jour d'exos au dessus de mes capacités en autodidacte ^^ et puis t'es encadré et tout ça, après si t'es assez consciencieux pour te pousser au Max tout seul, tout ce qui tu perds c'est l'ambiance mais effectivement ça justifie pas le prix ;) comme je t'ai dit, ce qui le justifie c'est surtout la perspective d'emploi dès la sortie.
Ils ont le bras long chez Epitech, ils se grattent les pieds sans se baisser si tu veux ^^ mais bref, oui c'est pas le sujet ^^
 
Du coup bon, je vais essayer de maintenir le cap quitte a ne pas rendre mes exos a temps.. Faut que j'arrive à choper la logique de coder en C, c'est surtout ça. Ça viendra...  
Rassurez moi, au début vous en avez chié aussi ? Vous faisiez que des petites fonctions bidon ?
 
Remarque c'est pas vraiment comparable, généralement on m'a dit que ceux qui codent apprennent directement avec une librairie alors que nous on doit se contenter de my_putchar donc c'est différent mais bon...

n°2205537
Terminapor
I'll see you rise.
Posté le 06-10-2013 à 00:51:45  profilanswer
 

Voilà, donc suffit de remplacer avec un while :  

Code :
  1. int  i=0;
  2. while (i < 5 )
  3. {
  4. my_putchar('*'); // On affiche le caractère *, les simples guillemets sont important, ça veut dire que c'est qu'un caractère et pas une chaine, une chaine est un tableau de caractère finissant par le code spécial '\0' (0 en décimal)
  5.   i++;
  6. }


 
Ou si tu veux, en récursif (tu appelle la même fonction plusieurs fois)  
 

Code :
  1. void Afficher(int i)
  2. {
  3.   if (i == 5)
  4.     return;
  5.   my_putchar('*');
  6.   Afficher(i+1);
  7. }
  8. int main()
  9. {
  10.    Afficher(0);
  11. }


 
Pour le retour à la ligne, c'est le caractère spécial '\n'.
Si tu fais dans une boucle my_putchar('*'); my_putchar('\n'); ça t'affichera une colonne d'étoiles.
 
Et oui, en prog au début on galère jusqu'à avoir le déclic (ce que tu cherche, la logique derrière la prog), faut te trouver un truc ludique à faire et ça viendra :D
 
Quand tu commences, en général tu te sers de la librairie standard (stdio, stdlib) pour avoir accès aux fonctions comme printf / scanf (écrire sur la console / saisir du texte), la gestion des fichiers, les allocations mémoire, les fonctions et tout le tralala.
Les libraires sont dispo via la commande #include (#include <stdio.h> pour printf/scanf et les fichiers par exemple), si jamais t'es tenté :D


---------------
Perhaps you don't deserve to breathe
n°2205541
Profil sup​primé
Posté le 06-10-2013 à 01:45:44  answer
 

Code :
  1. void afficher (int size_X, int size_Y)
  2. {
  3.  int Line = 1;
  4.  int Col = 1;
  5.  
  6.  while (Line <= size_Y)
  7.    {
  8.      while (Col <= size_X)
  9.  
  10.        {
  11.  
  12.          if (((Line == 1) && (Col == 1)) || ((Line == size_Y) && (Col == size_X)))
  13.            {
  14.              putchar('A');
  15.            }
  16.          else if (((Line == 1) && (Col == size_X)) || ((Line == size_Y) && (Col == 1)))
  17.            {
  18.              putchar('C');
  19.            }
  20.          else if (((Col == 1) || (Col == size_X)) || (Line == 1) || (Line == size_Y))
  21.            {
  22.              putchar('B');
  23.            }
  24.          else
  25.            {
  26.              putchar(' ');
  27.            }
  28.  
  29.  
  30.          Col++;
  31.  
  32.        };
  33.      putchar('\n');
  34.      Col = 1;
  35.      Line++;
  36.    };
  37. };
  38.  
  39.  
  40. int main(void) {
  41.  
  42.  int Matrix_X = 24;
  43.  int Matrix_Y = 24;
  44.  
  45.  
  46.  
  47.  
  48.  afficher(Matrix_X, Matrix_Y);
  49.  
  50.  return (0);
  51. };


Message édité par Profil supprimé le 06-10-2013 à 18:46:24
n°2205572
gilou
Modérateur
Modzilla
Posté le 06-10-2013 à 13:05:55  profilanswer
 

shize815 a écrit :

Je précise que, si For est interdite durant toute la scolarité, on aura droit à d'autres fonctions que my_putchar après la piscine... Une fois qu'on les aura codées nous-même.

L'interdire durant toute la scolarité serait d'une stupidité absolue.
 
Tu peux utiliser cette équivalence:
 
for (A; B; C) { code; }  équivaut à { A; while (B) { code; C; } }
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2205575
superbibou
Posté le 06-10-2013 à 13:35:25  profilanswer
 

Crée une fonction qui t'affiche les caractères ligne par ligne, tu lui envoies 3 parametres, le premier caractere, celui du milieu et le dernier. Tu l'appelles autant de fois que tu as de lignes en changeant les parametres envoyés.

n°2205582
Profil sup​primé
Posté le 06-10-2013 à 14:19:29  answer
 

C'est pas mal comme idée, enfin, elle me diverti. Mais je suis pas certain de vouloir mettre la moitié d'un algo à un bout du code et la moitié à l'autre.  :D

n°2205592
gilou
Modérateur
Modzilla
Posté le 06-10-2013 à 14:58:58  profilanswer
 

shize815, dans un premier temps, ça peut ressembler à ceci:
Imprimer un rectangle, c'est imprimer la première ligne, puis imprimer les lignes du milieu, puis imprimer la dernière ligne
Imprimer une ligne, c'est imprimer le premier caractère, puis les caractères du milieu, puis le dernier caractère, puis le caractère de retour à la ligne
 

Code :
  1. void Rectangle(int largeur, int hauteur) {
  2.     if ( (largeur < 2) || (hauteur < 2) ) {
  3.         return;
  4.     }
  5.     int ligne_courante;
  6.     PremiereLigne (largeur);
  7.     ligne_courante = 2;
  8.     while (ligne_courante < hauteur) {
  9.         MilieuLigne(largeur);
  10.     }
  11.     DerniereLigne(largeur);
  12. }
  13. void PremiereLigne(int largeur) {
  14.     int caractere_courant;
  15.     putchar('A');
  16.     caractere_courant = 2;
  17.     while (caractere_courant < largeur) {
  18.         putchar('B');
  19.     }
  20.     putchar('C');
  21.     putchar('\n');
  22. }
  23. void DerniereLigne(int largeur) {
  24.     int caractere_courant;
  25.     putchar('C');
  26.     caractere_courant = 2;
  27.     while (caractere_courant < largeur) {
  28.         putchar('B');
  29.     }
  30.     putchar('A');
  31.     putchar('\n');
  32. }
  33. void MilieuLigne(int largeur) {
  34.     int caractere_courant;
  35.     putchar('B');
  36.     caractere_courant = 2;
  37.     while (caractere_courant < largeur) {
  38.         putchar(' ');
  39.     }
  40.     putchar('B');
  41.     putchar('\n');
  42. }


 
Ensuite, tu peux regrouper cela en une version plus condensée:
 

Code :
  1. void Rectangle(int largeur, int hauteur) {
  2.     if ( (largeur < 2) || (hauteur < 2) ) {
  3.         return;
  4.     }
  5.     int ligne_courante;
  6.     Ligne (largeur, 'A', 'B', 'C');
  7.     ligne_courante = 2;
  8.     while (ligne_courante < hauteur) {
  9.         Ligne (largeur, 'B', ' ', 'B');
  10.     }
  11.     Ligne (largeur, 'C', 'B', 'A');
  12. }
  13. void Ligne(int largeur, char premier, char milieu, char dernier) {
  14.     int caractere_courant;
  15.     putchar(premier);
  16.     caractere_courant = 2;
  17.     while (caractere_courant < largeur) {
  18.         putchar(milieu);
  19.     }
  20.     putchar(dernier);
  21.     putchar('\n');
  22. }


 
A+,

Message cité 1 fois
Message édité par gilou le 06-10-2013 à 14:59:58

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2205596
Profil sup​primé
Posté le 06-10-2013 à 16:08:50  answer
 

Pourquoi vous écrivez tous votre code dans des balises cpp ?

n°2205602
Terminapor
I'll see you rise.
Posté le 06-10-2013 à 18:09:44  profilanswer
 

Parce que c'est pas du Ada ? :whistle:


---------------
Perhaps you don't deserve to breathe
n°2205607
Profil sup​primé
Posté le 06-10-2013 à 18:20:00  answer
 

Terminapor a écrit :

Parce que c'est pas du Ada ? :whistle:


 
j'utilise la balise code avec c en argument.

n°2205609
Terminapor
I'll see you rise.
Posté le 06-10-2013 à 18:32:06  profilanswer
 


Non, la balise était code=ada, vérifie :D


---------------
Perhaps you don't deserve to breathe
n°2205612
Profil sup​primé
Posté le 06-10-2013 à 18:48:57  answer
 

Ah ouais, mince.  [:prozatibo:1]

n°2205619
shize815
Posté le 06-10-2013 à 19:58:33  profilanswer
 

Rebonsoir, je bloque complètement a un truc tout con. Je dois coder un sapin, soit une superposition de triangle.
Donc je code mes triangles a taille variable  mais ça fait juste un escalier vu qu'il manque les espaces, donc je code mes espaces (des triangles à l'envers donc) pour mettre mes triangles derrière. Sauf que je sais pas comment aligner les deux, il me met mon triangle "invisible" (fait d'espaces) au dessus et mon escalier de caractères que je voulais changer en triangle en dessous, du coup bah ça se change pas en triangle.
 
Comment faire ? Je pense que c'est à cause d'un '\n' mal placé mais je vois pas comment les bouger sans simplement virer les escaliers... Et si je mélange les deux fonctions (mon escalier invisible inversé et mon escalier visible donc), j'ai peur de faire de la merde et en plus je dépasserais largement les 25 lignes/fonction autorisées...
 
Donc des idées ? ^^

n°2205621
Dion
Acceuil
Posté le 06-10-2013 à 20:00:08  profilanswer
 

shize815 a écrit :

En fait j'ai dit carré mais c'est une forme a 4 côté, rectangle ou carré quoi ^^
 
Ouais sauf qu'en fait la bas on a une "norme" a respecter, très restrictive mais qui force a se creuser les méninges, la commande For est interdite, et la seule fonction a laquelle on ait droit est my_putchar.
Sinon on a droit aux while, aux if et aux else !
 
Sinon, je vois que tu te moques d'Epitech... À moi cette école m'a l'air très bien, très exigeante mais ça permet une meilleure productivité au final, enfin je pense :)
Après si c'est pour le prix... Ça peut faire sourire mais je me dis qu'avec 100% d'anciens étudiants engagés en CDI a 2.000€ net minimum dès la sortie (ils s'y engagent par contrat lors de l'inscription), je vois plus ça comme un investissement qu'autre chose ^^ mais c'est vrai que c'est cher.  
Je comprends que des gens comme toi, qui ont déjà des connaissances de bases, puissent préférer d'autres écoles, mais j'aime bien son fonctionnement et son ambiance :)


 [:autruche]  

shize815 a écrit :

Je précise que, si For est interdite durant toute la scolarité, on aura droit à d'autres fonctions que my_putchar après la piscine... Une fois qu'on les aura codées nous-même.


 
Non
 
 
Et tu ferais mieux de travailler avec tes camarades en galère à 2m de toi, c'est un peu le but de la piscine


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°2205623
shize815
Posté le 06-10-2013 à 20:04:25  profilanswer
 

Oui sauf que c'est déjà eux qui m'aident depuis le premier jour et je commence à culpabiliser de leur demander de l'aide tout le temps... Surtout qu'expliquer au lieu de donner la solution est bien plus long.
Mais je suppose que je vais retourner leur demander oui...
 
Autant pour moi pour For, je croyais avoir lu ça dans la norme.
Un problème avec l'autruche ?

n°2205624
Dion
Acceuil
Posté le 06-10-2013 à 20:08:29  profilanswer
 

Tu devais avoir beaucoup fumé pour imaginer un contrat de la sorte :D
 
Et si ce sont toujours les même qui t'aident tu peux
- aller en voir d'autres :o
- continuer à voir les même et réaliser qu'expliquer permet d'appréhender + de subtilités et qu'un jour ils ne connaîtront pas la réponse  
 
Et il doit te rester 3 heures et demi pour le sapin, tu es en retard :o


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°2205652
superbibou
Posté le 06-10-2013 à 22:53:50  profilanswer
 

gilou a écrit :

shize815, dans un premier temps, ça peut ressembler à ceci:
Imprimer un rectangle, c'est imprimer la première ligne, puis imprimer les lignes du milieu, puis imprimer la dernière ligne
Imprimer une ligne, c'est imprimer le premier caractère, puis les caractères du milieu, puis le dernier caractère, puis le caractère de retour à la ligne
 

Code :
  1. void Rectangle(int largeur, int hauteur) {
  2.     if ( (largeur < 2) || (hauteur < 2) ) {
  3.         return;
  4.     }
  5.     int ligne_courante;
  6.     PremiereLigne (largeur);
  7.     ligne_courante = 2;
  8.     while (ligne_courante < hauteur) {
  9.         MilieuLigne(largeur);
  10.     }
  11.     DerniereLigne(largeur);
  12. }
  13. void PremiereLigne(int largeur) {
  14.     int caractere_courant;
  15.     putchar('A');
  16.     caractere_courant = 2;
  17.     while (caractere_courant < largeur) {
  18.         putchar('B');
  19.     }
  20.     putchar('C');
  21.     putchar('\n');
  22. }
  23. void DerniereLigne(int largeur) {
  24.     int caractere_courant;
  25.     putchar('C');
  26.     caractere_courant = 2;
  27.     while (caractere_courant < largeur) {
  28.         putchar('B');
  29.     }
  30.     putchar('A');
  31.     putchar('\n');
  32. }
  33. void MilieuLigne(int largeur) {
  34.     int caractere_courant;
  35.     putchar('B');
  36.     caractere_courant = 2;
  37.     while (caractere_courant < largeur) {
  38.         putchar(' ');
  39.     }
  40.     putchar('B');
  41.     putchar('\n');
  42. }


 
Ensuite, tu peux regrouper cela en une version plus condensée:
 

Code :
  1. void Rectangle(int largeur, int hauteur) {
  2.     if ( (largeur < 2) || (hauteur < 2) ) {
  3.         return;
  4.     }
  5.     int ligne_courante;
  6.     Ligne (largeur, 'A', 'B', 'C');
  7.     ligne_courante = 2;
  8.     while (ligne_courante < hauteur) {
  9.         Ligne (largeur, 'B', ' ', 'B');
  10.     }
  11.     Ligne (largeur, 'C', 'B', 'A');
  12. }
  13. void Ligne(int largeur, char premier, char milieu, char dernier) {
  14.     int caractere_courant;
  15.     putchar(premier);
  16.     caractere_courant = 2;
  17.     while (caractere_courant < largeur) {
  18.         putchar(milieu);
  19.     }
  20.     putchar(dernier);
  21.     putchar('\n');
  22. }


 
A+,


 
c'est l'idée, mais l'idée c'était aussi de juste lui donner l'idée, pas le code tout fait.

n°2205660
gilou
Modérateur
Modzilla
Posté le 06-10-2013 à 23:54:44  profilanswer
 

Vu son post initial j'ai préféré faire du pédagogique.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Débutant en C...

 

Sujets relatifs
[C#] DébutantAide programmation C++ (débutant)
Algorithme débutant C++ adressage IP[C] débutant a=b différent de b=a ?
Débutant, problème master mind en C.Débutant aide C++
Débutant need Help en C[C] Petites questions (débutant)
[RESOLU]Debutant en C++, petite question a propos d'un programme[C#] Questions de débutant...
Plus de sujets relatifs à : Débutant en C...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR