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

  FORUM HardWare.fr
  Programmation
  C

  3 exo en C

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

3 exo en C

n°1514045
davidenko
Posté le 13-02-2007 à 12:37:35  profilanswer
 

Bonjour,
j'ai trois exercice à faire sur C sur le chapitre sur les IF et SWITH...pour les deux premiers exos ,j'ai juste besoin d'une confirmation et le 3eme une aide complète...
 
1) Ecrire et programmer l’algorithme suivant :
 
    - Lire le jour (j)
 
    - Lire le mois(m)
 
    - Lire l’année (a)
 
Parmi les choix suivants afficher :
 
    1-> nom_jour/numéro_jour/mois/année
 
    2- > numéro_jour/mois/année
 
    3 -> mois/année
 
    4-> année
 
sinon afficher "Mauvais choix !!!".
 
Afficher "Fin de programme".
 
--->Bon il faut faire un wswitch ok, mais au niveau du jour il faut créer deux variables c ca?une pour le nomd du jour(ex=mercredi) et une pour la date du jour(ex:25). j'ai un doute car dans l'énoncé ils disent le jour avec comme variable j seulement... Donc peut être ya t'il une autre solution?
 
2) l'utilisateur me donne un rayon r. et apres je calcule la circonférence du cercle. mais ils disent d'affichier le résultat(la circonférence) avec deux chiffres apres la virgule...donc comment faire pour affichier le résultat avec seulement deux chiffres décimaux?
 
3) Lire une variable n.
 
Suivant n, afficher la figure suivante :
 
- Ex : pour n = 4
 
1
 2
  3
   4
 
--> voilà je n'ai aucune idée de comment faire. apparemment il faut utiliser un if ou un switch car c'est un exo du chapitre if/swith... mais moi à mon avis il faut faire un boucle car n peut valoir 2 comme 500...
les espaces me gènent également... si quelq'un pouvait me donner une piste ou carrement la solution complète, je le remercie.

mood
Publicité
Posté le 13-02-2007 à 12:37:35  profilanswer
 

n°1514053
Trap D
Posté le 13-02-2007 à 12:54:31  profilanswer
 

Pour le troisième exercice, regarde attentivement comment est construit l'affichage, regarde en fonction du numéro de la ligne affichée le nombre d'espaces et le nombre affiché, essaye de trouver un lien entre ces trois nombres, ensuite fas une boucle effectivement.

n°1514061
davidenko
Posté le 13-02-2007 à 13:12:12  profilanswer
 

et pour les deux premiers

n°1514098
0x90
Posté le 13-02-2007 à 14:40:13  profilanswer
 

pour le second, lit la documentation de printf ...


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1514265
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-02-2007 à 20:32:12  profilanswer
 

davidenko a écrit :


    1-> nom_jour/numéro_jour/mois/année


A mon avis, faute de frappe :  
 
    1-> num_jour/numéro_jour/mois/année
 
sinon, c'est trop complexe si tu ne connais pas les fonctions de la bibliothèques.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1514386
davidenko
Posté le 14-02-2007 à 10:05:13  profilanswer
 

donc il faut créer deux variables pour le jour?

n°1514578
Sve@r
Posté le 14-02-2007 à 15:32:53  profilanswer
 

davidenko a écrit :

donc il faut créer deux variables pour le jour?


Ben en fait, il existe une formule mathématique qui permet de trouver le n° du jour dans la semaine à partir de la date mais elle est assez compliquée (je ne la connais pas par coeur). Et comme le dit Emmanuel, cette formule a été intégrée dans les fonctions de gestion de date de la librairie standard mais leur utilisation nécessite un certain niveau de connaissance du C qui dépasse le simple apprentissage des structures if/switch/for/while.
 
De plus l'affichage du jour de la semaine (ex mercredi) n'apporte rien dans l'apprentissage du if/switch donc il est raisonnable de dire qu'il s'agit d'une erreur de l'énoncé et que t'as absolument pas besoin de te préoccuper de cette valeur...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1514602
MagicBuzz
Posté le 14-02-2007 à 15:51:24  profilanswer
 

Emmanuel Delahaye a écrit :

1-> num_jour/numéro_jour/mois/année


euh... num_jour et numéro_jour c'est quoi la diff à ce moment ?

n°1514611
-ThX-
Not here anymore
Posté le 14-02-2007 à 16:02:54  profilanswer
 

Mouais. Pour le "nom" du jour, deux optiques :
 
1) Un tableau statique à 7 éléments, donc chaque "case" contient un char[] avec le nom du jour
 
2) L'approche "crade, pas optimisée, pas pédagogique" du switch :
 

Code :
  1. // jour compris entre 1 inclus et 7 inclus
  2. switch (jour) {
  3. case 1:
  4.    nom_jour[] = "lundi";
  5.    break;
  6. case 2:
  7.    (...)
  8. default:
  9.    // ne devrait pas arriver
  10. }


 
Vu la tête de l'énoncé, la solution 2 est probablement celle qui est attendue

n°1514620
MagicBuzz
Posté le 14-02-2007 à 16:08:23  profilanswer
 

-ThX- a écrit :

Mouais. Pour le "nom" du jour, deux optiques :
 
1) Un tableau statique à 7 éléments, donc chaque "case" contient un char[] avec le nom du jour
 
2) L'approche "crade, pas optimisée, pas pédagogique" du switch :
 

Code :
  1. // jour compris entre 1 inclus et 7 inclus
  2. switch (jour) {
  3. case 1:
  4.    nom_jour[] = "lundi";
  5.    break;
  6. case 2:
  7.    (...)
  8. default:
  9.    // ne devrait pas arriver
  10. }


 
Vu la tête de l'énoncé, la solution 2 est probablement celle qui est attendue


dans les deux cas, comment à partir de "27 mars 1873" je peux savoir si c'est un vendredi ou un samedi ? je pense que c'est surtout ça la question ;)
en gros, faut compter combien de jours se sont écoulés depuis le 1/1/1, savoir si c'était un lundi ou un dimanche, et faire un modulo 7 dessus. mais là ça commence à devenir complexe et n'a aucun intérêt pédagogie.
 
Par contre, le prof vous aurais pas parlé une lib "date.h" avec la fonction qui tue genre "char* NomDuJourDeLaSemaine(int jour, int mois, int annee)" ?

mood
Publicité
Posté le 14-02-2007 à 16:08:23  profilanswer
 

n°1514624
-ThX-
Not here anymore
Posté le 14-02-2007 à 16:14:31  profilanswer
 

Plutot que de compter à partir du 1/1/1970, implémenter une fonction calendrier perpétuel, mais ça dépasse largement le cadre du cours à mon avis

n°1514628
MagicBuzz
Posté le 14-02-2007 à 16:16:51  profilanswer
 

-ThX- a écrit :

Plutot que de compter à partir du 1/1/1970, implémenter une fonction calendrier perpétuel, mais ça dépasse largement le cadre du cours à mon avis


je compte depuis l'an 1, qui est la date de référence pour le calendrier (donc c'est le calendrier perpétuel...)

n°1514630
-ThX-
Not here anymore
Posté le 14-02-2007 à 16:18:41  profilanswer
 

pour le 3ème (de bonne humeur) :
 

Code :
  1. int n; // Le "n" de l'énoncé
  2. int i, j; // des compteurs de boucle
  3. for (i=1; i<=n ; ++i)
  4. {
  5.     for (j=1; j<=n; ++j)
  6.     {
  7.         printf (' ');
  8.     }
  9.  
  10.     printf ("%d\n", i);
  11. }

n°1514633
MagicBuzz
Posté le 14-02-2007 à 16:20:19  profilanswer
 

y'a pas de lpad() en C ? (fouteur de merde inside)

n°1514636
-ThX-
Not here anymore
Posté le 14-02-2007 à 16:22:02  profilanswer
 

L'énoncé indique bien que c'est un exo niveau débutant. Donc on réinvente la roue

n°1514638
MagicBuzz
Posté le 14-02-2007 à 16:23:05  profilanswer
 

ben donc on fait des cout, printf() c'est bien trop évolué pour un débutant :evil:

n°1514639
-ThX-
Not here anymore
Posté le 14-02-2007 à 16:24:59  profilanswer
 

omg
 
cout c'est du c++ ( std::cout ). printf c'est du c.

n°1514640
MagicBuzz
Posté le 14-02-2007 à 16:29:20  profilanswer
 

argh, merde :D me suis fait avoir.
 
j'aurais pu dire console.writeline aussi hein :o
ou même console.out.append()


Message édité par MagicBuzz le 14-02-2007 à 16:30:02
n°1514723
davidenko
Posté le 14-02-2007 à 19:01:48  profilanswer
 

thx
merci
mais il est pas bon ton programme
car ca fais
    1
    2
    3
    4
pour n=4
dans ta duexieme boucle c'est pas plutot j<=i-1
?

n°1514746
MagicBuzz
Posté le 14-02-2007 à 20:44:41  profilanswer
 

effectivement :) Thx y sait plus coder :o ;)

n°1514867
davidenko
Posté le 15-02-2007 à 08:03:48  profilanswer
 

sinon pour le deuxieme comment on affiche un résultat avec deux chiffre apres la virgule
c'est pas printf("%.2f",x) ???
 
pour le premier je peux faire une variable genre:
nom_jour de type caractère
num_jour de type int
non?

n°1514868
davidenko
Posté le 15-02-2007 à 08:04:04  profilanswer
 

je précise qu'on n'a pas encore vu les tableau...
 
programmationc.free.fr
tout est ici

n°1515086
Sve@r
Posté le 15-02-2007 à 15:16:37  profilanswer
 

MagicBuzz a écrit :

je compte depuis l'an 1, qui est la date de référence pour le calendrier (donc c'est le calendrier perpétuel...)


Bravo - Et le jump de 10 jours qui a été fait au XVII° siècle par Grégoire pour permettre au calendrier de rattrapper le soleil tu le gères comment ???


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1515089
Sve@r
Posté le 15-02-2007 à 15:18:40  profilanswer
 

davidenko a écrit :

sinon pour le deuxieme comment on affiche un résultat avec deux chiffre apres la virgule
c'est pas printf("%.2f",x) ???


Exact
 

davidenko a écrit :

pour le premier je peux faire une variable genre:
nom_jour de type caractère
num_jour de type int
non?


Gaffe car dans une variable de type "caractère" tu ne peux y faire rentrer qu'un seul caractère !!!
Pour gérer les chaînes, faut utiliser des "tableaux" de char mais comme t'as pas encore vu les tableaux...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1515109
MagicBuzz
Posté le 15-02-2007 à 16:13:10  profilanswer
 

Sve@r a écrit :

Bravo - Et le jump de 10 jours qui a été fait au XVII° siècle par Grégoire pour permettre au calendrier de rattrapper le soleil tu le gères comment ???


J'ai pas donné d'algo hein.
J'ai juste dit que pour connaître le jour de la semaine d'une date donnée, il fallait partir du 1° janvier de l'an 1, et compter le nombre de jours écoulés depuis. Et c'est ça un calendrier perpétuel.
 
C'est ensuite à l'algo de tenir compte des règles et exceptions lors de ce calcul...

n°1515330
davidenko
Posté le 16-02-2007 à 09:10:07  profilanswer
 

J'ai deux questions:
 
1) j'ai finalement réussi à faire le troisieme exercice avec la figure complexe... mais je n'ai utilisé que deux boucles for imbriqués. Mais l'exercice fait partie des exercice du chapitre sur IF/SWITCH..or je n'ai pas utilisé de if ni de switch...alors 3 possibilités:
-soit mon prof s'est trompé
-soit il a voulu faire un piège en le mettant exprès là où il ne devrait pas être
-soit il y a bien une facon de le faire avec if et switch...
 
2) pour le type char c'est
char c[]
mais entre les crochets c'est quoi qu'il faut mettre? je pensais que c'était le nombre de caractère mais comme je vien de voir qu'on ne peut mettre qu'un seul caractère dans un char, ca doit donc être autre chose...merci!

n°1515379
Trap D
Posté le 16-02-2007 à 10:29:17  profilanswer
 

AMHA c'est un piège ou il s'est trompé d'exercice car si il vous oblige à faire des if/switch là-dedans c'est très pervers.

n°1515384
MagicBuzz
Posté le 16-02-2007 à 10:34:51  profilanswer
 

1/ tu peux effectivement le faire avec des if, mais ça demande de la duplication de code, et ça limite la profondeur du traîtement (t'as autant de if que le nombre possible que tu peux passer en paramètres). c'est donc extrêment crade, et même si c'est ça que le prof s'attends, ne le fait pas : c'est vraiment la dernière chose qu'il faut faire quand tu code. ça peut à la limite servir quand tu fais une appli qui nécessite un maximum de performances, mais même dans ce cas il vaut mieux trouver d'autres moyens d'optimiser que de faire ça.
 
2/ les [] indiquent que tu crée un tableau. donc c'est effectivement le nombre de char que tu veux avoir dans ton tableau. si t'as pas besoin de plus d'un caractères, alors ne met pas de crochets pour travailler directement avec un char et non un array de chars.

n°1515386
MagicBuzz
Posté le 16-02-2007 à 10:36:08  profilanswer
 

1/ ou alors, tu peux faire avec un if et un goto, mais ça reste toujours aussi crade :D

n°1515390
davidenko
Posté le 16-02-2007 à 10:41:12  profilanswer
 

donc si je fais
 
char c[20] ca veut dire que je créé un tableau de char de taille 20?

n°1515395
davidenko
Posté le 16-02-2007 à 10:47:40  profilanswer
 

sinon pour mon 2eme exo
je n'ai qu'à faire ca:
char nomjour[20]
et demander a lutilisateur de rentrer le nom du jour

n°1515431
MagicBuzz
Posté le 16-02-2007 à 11:31:38  profilanswer
 

ouais, c'est sûr que c'est une solution

n°1515444
lkolrn
&lt;comment ça marche?&gt;
Posté le 16-02-2007 à 11:42:07  profilanswer
 

Calendrier perpétuel... wokai... :sweat:  
 
J'ai l'impression que c'est beaucoup plus simple quand même :

1) Ecrire et programmer l’algorithme suivant :
 
    - Lire le jour (j)
 
    - Lire le mois(m)
 
    - Lire l’année (a)

+ 3 scanf()

Parmi les choix suivants afficher :
 
    1-> nom_jour/numéro_jour/mois/année
 
    2- > numéro_jour/mois/année
 
    3 -> mois/année
 
    4-> année

+ 1 switch() pour faire son choix,
+ 2 autres switch() (dans les cas 1 et 2 à l'intérieur du switch principal) pour trouver un numéro à partir d'un nom de jour ("lundi"=1, "mardi"=2,... par exemple),
+ printf() associés
 
PS : ya jamais eu question de trouver le nom du jour "27 mars 1873", il parle seulement de numéro de jour

sinon afficher "Mauvais choix !!!".

dans le 1er switch(), celui du choix : + printf() dans l'instruction default
 
+ des if de contrôle à droite à gauche
 
 
Sinon [] = tableau, char c[20] ça veut dire un tableau c de type char contenant jusqu'à 20 caractères + 1 caractère de fin, le '\0', spécifique aux chaînes de caractères (comme char c[20] par ex). Il est invisible à l'affichage mais il compte quand même (il est même primordial), par contre on ne le rajoute pas à la main (gestion auto).
 
Edit
Pour le nom du jour, tu regardes celui qui est composé du plus grand nombre de caractères et tu trouves la longueur n qui va toujours bien pour stocker un nom de jour (en Français of course), soit char nomjour[n];
 
Edit2
char c[10] : chaîne de 10 caractères + '\0' :jap:


Message édité par lkolrn le 16-02-2007 à 12:11:46
n°1515448
MagicBuzz
Posté le 16-02-2007 à 11:47:31  profilanswer
 

:heink:
 
on m'aurait menti, ou si le \0 est normalement ajouté automatiquement en mémoire par C à l'adresse 20 ? (donc tu as les 20 adresses 0-19 dispo pour écrire tes 20 chars, plus un 21° créé automatiquement qui contient la fin de chaîne...)
ça me semble plus logique et naturel : t'es pas censé avoir à gérer toi-même la représentation en mémoire de ton bordel. si tu codes "proprement" tu ne joueras de toute façon pas avec un pointeur basé sur un offset, mais l'indexation de ton tableau, et dans ce cas le \0 est inutile, je ne vois donc pas pourquoi tu devrais t'emmerder à le gérer.

n°1515453
davidenko
Posté le 16-02-2007 à 11:57:05  profilanswer
 

merci j'ai compris
 

n°1515469
davidenko
Posté le 16-02-2007 à 12:26:29  profilanswer
 

les if de controle à droite à gauche c'est pour quoi?

n°1515471
davidenko
Posté le 16-02-2007 à 12:31:39  profilanswer
 

Pour le troisième:
 
int n,i,j;
do  
{  
 printf("donner un nombre entier supérieur à 0" );
 scanf("%d",&n);
}
while(n<=0);
 
for(i=1;i<=n;i++)
{
 for(j=1;i<=i-1;j++)
 {
  printf(" " );
 }
 printf("%d\n",i);
}

n°1515472
lkolrn
&lt;comment ça marche?&gt;
Posté le 16-02-2007 à 12:40:22  profilanswer
 

MagicBuzz a écrit :

si tu codes "proprement" tu ne joueras de toute façon pas avec un pointeur basé sur un offset, mais l'indexation de ton tableau, et dans ce cas le \0 est inutile, je ne vois donc pas pourquoi tu devrais t'emmerder à le gérer.

Qui a dit qu'on devait gérer le '\0' ? Il vient se rajouter à la chaîne (j'ai rectifié plus haut char c[20] contient jusqu'à 20 caractères + '\0')
Sinon c'est HS, mais... je vois pas ce qu'il y a de sale à manipuler (pointeur + offset) plutôt qu'index, str[a] <=> *(str+a) [:airforceone]
 
 
Edit

davidenko a écrit :

les if de controle à droite à gauche c'est pour quoi?

Pour éviter des erreurs, tu contrôles que tes valeurs de jour/mois/année sont bien initialisées par exemple


Message édité par lkolrn le 16-02-2007 à 12:46:50
n°1515477
davidenko
Posté le 16-02-2007 à 12:56:23  profilanswer
 

MODO POUVEZ VOUS SUPPRIMER CE TOPIC SVP

n°1515479
lkolrn
&lt;comment ça marche?&gt;
Posté le 16-02-2007 à 13:09:13  profilanswer
 

:sweat:
 

davidenko a écrit :

for(i=1;i<=n;i++)
{
 for(j=1; i <= i-1 ; j++)
 {
  printf(" " );
 }
 printf("%d\n",i);
}

C'est sla oui... [:skyx@v]
 
Là ça marche :

Code :
  1. for (i=0; i < n; i++)
  2. {
  3. for (j=0; j < i; j++)
  4.   printf(" " );
  5. printf("%d\n", i+1);
  6. }

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
  FORUM HardWare.fr
  Programmation
  C

  3 exo en C

 

Sujets relatifs
[C] Des accolades "just pour le fun" ? 
Plus de sujets relatifs à : 3 exo en C


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)