[c]boucle avec 3 tentatives

boucle avec 3 tentatives [c] - C - Programmation

Marsh Posté le 19-10-2005 à 15:47:07    

Salut  :hello: tout le monde, voila mon probleme, je voudrais savoir comment on fait une boucle à tentative. Jdois creer un programme bancontact et l'utilisateur doit rentrer son numero de compte et il a droit 3 fois a l'erreur pour rentrer dans le boncontact.  

Reply

Marsh Posté le 19-10-2005 à 15:47:07   

Reply

Marsh Posté le 19-10-2005 à 15:58:14    

Code :
  1. nbEssai = 0 ;
  2. do{
  3. nbEssai++;
  4. }while( codeFaux(code) && nbEssai < 3 )


avec codeFaux une fonction qui renvoi 1 si le code est faux 0 sinon


---------------

Reply

Marsh Posté le 19-10-2005 à 16:00:59    

merci je vais essayer ca :jap:  

Reply

Marsh Posté le 19-10-2005 à 16:18:16    

Encore une autre question, je dois faire un bancontact dans lequel l'utilisateur doit rentrer son code bancaire si le code est juste il rentre dedans ou sinon il ne peut pas rentrer et il a doit a trois essais.il doit rentrer son numero de comptes en 2 temps, d'abord il doit taper les 10 premiers chiffres ensuite les 2 derniers.  

Reply

Marsh Posté le 19-10-2005 à 16:58:21    

Hmm. Les boucles, c'est la base de la base. :/
 
Va falloir te débrouiller tout seul je pense, sinon tu ne t'en sortiras jamais.

Reply

Marsh Posté le 19-10-2005 à 17:04:46    

infodebutant a écrit :

Encore une autre question, je dois faire un bancontact dans lequel l'utilisateur doit rentrer son code bancaire si le code est juste il rentre dedans ou sinon il ne peut pas rentrer et il a doit a trois essais.il doit rentrer son numero de comptes en 2 temps, d'abord il doit taper les 10 premiers chiffres ensuite les 2 derniers.


On va peut être pas te filer tout ton projet ligne par ligne...
 
Un conseil, commence par apprendre à programmer, parce que ce tu demandes, c'est le B.A. BA.
 
Il existe des livres, des tutoriels en ligne...
 
Pour le C, des références sur mon site (ma signature). Mais je pense que ton problème se situe au-delà du langage. Visiblememnt, tu n'as jamais fait d'algorithmique...
 
Il y a toujours un petit problème de poule et d'oeuf en informatique :

  • Comment apprendre l'algorithmique si on ne connais pas de langage pour vérifier ?
  • Comment apprendre un langage si on a pas des bases d'algorithmique ?


En fait il faut faire un peu des deux en commençant par un langage simple (le C est-il un langage simple ? Bonne question !).
 
1 - C: on abordre les bases sans algo.
2 - ALGO: on aborde les bases sans langage (par exemple : IF)
3 - C : on apprend à coder if() et on implémente un algo simple à base de if()  
etc. : IF-ELSE, SWITCH-CASE, REPEAT-UNTIL, WHILE, FOR-NEXT
 
Il y a un beau site à créer sur ce principe... C'est quand les vacances ?
 
 
 


---------------
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/
Reply

Marsh Posté le 19-10-2005 à 18:01:32    

infodebutant a écrit :

Salut  :hello: tout le monde, voila mon probleme, je voudrais savoir comment on fait une boucle à tentative. Jdois creer un programme bancontact et l'utilisateur doit rentrer son numero de compte et il a droit 3 fois a l'erreur pour rentrer dans le boncontact.


Bah c'est pas compliquer... Prend un papier et un crayon et reflechis aux étapes qu'il te faudrai pour realiser tout ça.
L'algorythmique est un outil nécéssaire pour s'en sortir en programmation.
 
Mais en gros le principe de ce genre de boucle c'est que le test de la boucle est du type : "essai < maximum ET code = pasOk"
et que dans la boucle le code est MAJ si nécéssaire.


Message édité par MEI le 19-10-2005 à 18:02:13

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 20-10-2005 à 16:45:59    

Lol je fais de l'algorythme et du c,je suis en 1ere annee d'informatique mais je galere u peu pour l'instant je ne suis pas encore habitué avec les boucles :jap:  en tout cas merci pour votre aide  

Reply

Marsh Posté le 20-10-2005 à 16:47:49    

voila mon programme qi n'est pas encore termine, maintenant il me manque plus qu a mettre les 3 essais  
 
do
{
system("cls" );
printf("Bonjour\n" );
printf("Veuillez entrer les 10 premiers chiffres de votre compte bancaire\n" );
scanf("%d",&compte1);
printf("Veuillez entrer les 2 derniers chiffres de votre compte bancaire\n" );
scanf("%d",&compte2);
 
while(compte1>97)    
{
 compte1=compte1-97;
}
}
while(compte1 != compte2);

Reply

Marsh Posté le 20-10-2005 à 17:43:44    

infodebutant a écrit :

voila mon programme qi n'est pas encore termine, maintenant il me manque plus qu a mettre les 3 essais  
 
do
{
system("cls" );
printf("Bonjour\n" );
printf("Veuillez entrer les 10 premiers chiffres de votre compte bancaire\n" );
scanf("%d",&compte1);
printf("Veuillez entrer les 2 derniers chiffres de votre compte bancaire\n" );
scanf("%d",&compte2);
 
while(compte1>97)    
{
 compte1=compte1-97;
}
}
while(compte1 != compte2);


 
 
Tu ne serais pas à l'inpres toi? :D
Me semble que j'ai eu le même exercice en première que toi...  
n'utilise pas des int mais des double déjà sinon dépassement de capacité, sous Visual Studio 6.0 un int ne fait que 4 bytes.

Code :
  1. double compte1, compte2;
  2. short tentative = 0;
  3. do
  4. {
  5.    system ("cls" );
  6.    printf("Bonjour\\n" );
  7.    printf("Veuillez entrer les 10 premiers chiffres de votre compte bancaire\\n" );
  8.    scanf("%lf",&compte1);
  9.    printf("Veuillez entrer les 2 derniers chiffres de votre compte bancaire\\n" );
  10.    scanf("%lf",&compte2);
  11.    tentative++;
  12. } while (tentative < 3 && (compte1%97) != compte2);


 
la relève n'est vraiment pas la ... c'est un jeu d'enfant ce genre de truc, comment ça sera en deuxième ou en troisième.

Message cité 1 fois
Message édité par moi23372 le 20-10-2005 à 17:52:42
Reply

Marsh Posté le 20-10-2005 à 17:43:44   

Reply

Marsh Posté le 20-10-2005 à 17:49:45    

moi23372 a écrit :

n'utilise pas des int mais des double déjà sinon dépassement de capacité, sous Visual Studio 6.0 ça va jusque 65535 (4 bytes).


 
[:le poney de mr pink]
long, pas double.
 
Et dans ce cas aussi faut changer le pattern dans le scanf() (%ld).

Message cité 1 fois
Message édité par Elmoricq le 20-10-2005 à 17:50:17
Reply

Marsh Posté le 20-10-2005 à 17:52:06    

J'allais le dire.
Mais int ca va plus loin que 65535 normallement. A moins que mon compilo me les changes tout seul :??:


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 20-10-2005 à 17:54:45    

Elmoricq a écrit :

[:le poney de mr pink]
long, pas double.
 
Et dans ce cas aussi faut changer le pattern dans le scanf() (%ld).


 
Visual Studio 6
 
short => 2 bytes
int    => 4 bytes
long  => 4 bytes
double => 8 bytes (si je ne me trompe pas pour le double)
 
malheureusement sous visual studio 6, un int équivaut (d'après ce que mes profs me disait à l'époque) à un long. Ce qui n'est bien entendu pas le cas sous d'autre compilateur (sous unix)

Reply

Marsh Posté le 20-10-2005 à 17:57:10    

short : 2 bytes  
int : 4 bytes  
long : 4 bytes  
 
float : 4 bytes  
double : 8 bytes  
long double : 8 bytes  
 
pour avoir du 8 bytes en entier faut du _int64 spécifique à Visual Studio.


Message édité par MEI le 20-10-2005 à 17:57:38

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 20-10-2005 à 17:59:54    

c'est pour ça qu'un double fait l'affaire ;-) suffit de le caster en int alors...

Code :
  1. double compte1, compte2;
  2. short tentative = 0;
  3. do
  4. {
  5. system ("cls" );
  6. printf("Bonjour\n" );
  7. printf("Veuillez entrer les 10 premiers chiffres de votre compte bancaire\n" );
  8. scanf("%lf",&compte1);
  9. printf("Veuillez entrer les 2 derniers chiffres de votre compte bancaire\n" );
  10. scanf("%lf",&compte2);
  11. tentative++;
  12. } while (tentative < 3 && (int)(compte1%97) != compte2);

Message cité 3 fois
Message édité par moi23372 le 20-10-2005 à 18:01:31
Reply

Marsh Posté le 20-10-2005 à 18:56:43    

moi23372 a écrit :

c'est pour ça qu'un double fait l'affaire ;-) suffit de le caster en int alors...

Code :
  1. double compte1, compte2;
  2. short tentative = 0;
  3. do
  4. {
  5. system ("cls" );
  6. printf("Bonjour\n" );
  7. printf("Veuillez entrer les 10 premiers chiffres de votre compte bancaire\n" );
  8. scanf("%lf",&compte1);
  9. printf("Veuillez entrer les 2 derniers chiffres de votre compte bancaire\n" );
  10. scanf("%lf",&compte2);
  11. tentative++;
  12. Si je suis bien a l'inpres  :D  et merci pour la solution.
  13. } while (tentative < 3 && (int)(compte1%97) != compte2);



Reply

Marsh Posté le 20-10-2005 à 18:59:13    

moi23372 a écrit :

c'est pour ça qu'un double fait l'affaire ;-) suffit de le caster en int alors...

Code :
  1. double compte1, compte2;
  2. short tentative = 0;
  3. do
  4. {
  5. system ("cls" );
  6. printf("Bonjour\n" );
  7. printf("Veuillez entrer les 10 premiers chiffres de votre compte bancaire\n" );
  8. scanf("%lf",&compte1);
  9. printf("Veuillez entrer les 2 derniers chiffres de votre compte bancaire\n" );
  10. scanf("%lf",&compte2);
  11. tentative++;
  12. } while (tentative < 3 && (int)(compte1%97) != compte2);



 
 
Si je suis bien a l'inpres  :D  et merci pour la solution.

Reply

Marsh Posté le 20-10-2005 à 21:24:00    

infodebutant a écrit :

Si je suis bien a l'inpres  :D  et merci pour la solution.


 
Me semblait bien, ils n'ont pas changé les exercices depuis deux ans (et oui je suis en troisième). En tout cas tu as intéret à t'y mettre. Car sinon tu vas vite être dépassé en C. Et c'est très important de bien réussir sa première, sinon c'est suicidaire pour la deuxième, et je ne te parle même pas de la troisième ou est on est carrement plus que débordé.

Reply

Marsh Posté le 21-10-2005 à 09:10:23    

moi23372 a écrit :

c'est pour ça qu'un double fait l'affaire ;-) suffit de le caster en int alors...

Code :
  1. double compte1, compte2;
  2. short tentative = 0;
  3. do
  4. {
  5. system ("cls" );
  6. printf("Bonjour\n" );
  7. printf("Veuillez entrer les 10 premiers chiffres de votre compte bancaire\n" );
  8. scanf("%lf",&compte1);
  9. printf("Veuillez entrer les 2 derniers chiffres de votre compte bancaire\n" );
  10. scanf("%lf",&compte2);
  11. tentative++;
  12. } while (tentative < 3 && (int)(compte1%97) != compte2);



 
 
On n'a pas le droit de faire du modulo sur un double (ça n'a pas de sens)
Il faut commencer par caster "compte1" en int avant de lui appliquer le modulo
=> remplacer "(int)(compte1%97)" par "((int)compte1%97)" !!!

Reply

Marsh Posté le 21-10-2005 à 09:38:42    

Sve@r a écrit :

On n'a pas le droit de faire du modulo sur un double (ça n'a pas de sens)


Si, mais il faut utiliser fmod()...
 


---------------
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/
Reply

Marsh Posté le 21-10-2005 à 09:39:16    

Sve@r a écrit :

On n'a pas le droit de faire du modulo sur un double (ça n'a pas de sens)
Il faut commencer par caster "compte1" en int avant de lui appliquer le modulo
=> remplacer "(int)(compte1%97)" par "((int)compte1%97)" !!!


 
 
Ouais mais si on met dans un double parce que dans un long ça rentre pas (à plus forte raison dans un int  [:pingouino] ), alors utiliser un cast c'est un peu réintroduire le problème qu'on a tenté de contourner.
 
 [:elmoricq]

Reply

Marsh Posté le 21-10-2005 à 10:15:39    

Elmoricq a écrit :

Ouais mais si on met dans un double parce que dans un long ça rentre pas (à plus forte raison dans un int  [:pingouino] ), alors utiliser un cast c'est un peu réintroduire le problème qu'on a tenté de contourner.
 
 [:elmoricq]


 
Evidemment... c'est un peu idiot mon idée  :lol:  :lol:  

Reply

Marsh Posté le 21-10-2005 à 16:05:44    

est-il déshonorant d'utiliser un long long c99 ?

Reply

Marsh Posté le 21-10-2005 à 16:11:06    

++fab a écrit :

est-il déshonorant d'utiliser un long long c99 ?


Non, mais selon l'implémentation, il y a quelques pièges.


---------------
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/
Reply

Marsh Posté le 21-10-2005 à 17:03:00    

des implémentations buggés ?  ... ou des pièges ?

Reply

Marsh Posté le 21-10-2005 à 20:02:57    

++fab a écrit :

des implémentations buggés ?  ... ou des pièges ?


Il y a un problème avec ce code :  


#include <stdio.h>
 
#define MAX 9223372036854775807LL
 
int main (void)
{
   printf ("C99: MAX = %lld\n", MAX);
   printf ("MS : MAX = %I64d\n", MAX);
   
   return 0;
}


Je viens de tester ça avec Code::Blocks (Mingw) et ça donne


C99: MAX = -1
MS : MAX = 9223372036854775807


Ce qui montre que Mingw utilise la DLL msvcrt.dll (MicroSoft Visual C Run-Time) livrée avec Windows XP, qui n'est pas C99, pour implémenter sa bibliothèque standard.
 
Prudence...


Message édité par Emmanuel Delahaye le 22-10-2005 à 11:07:30

---------------
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/
Reply

Marsh Posté le 21-10-2005 à 22:04:06    

Sve@r a écrit :

On n'a pas le droit de faire du modulo sur un double (ça n'a pas de sens)
Il faut commencer par caster "compte1" en int avant de lui appliquer le modulo
=> remplacer "(int)(compte1%97)" par "((int)compte1%97)" !!!


 
ha bon, pourtant ça marche, c'est un copié collé de mon logiciel de première année compilé et testé... En tt cas sous visual Studio ça marche...

Reply

Marsh Posté le 22-10-2005 à 10:38:05    

++fab a écrit :

des implémentations buggés ?  ... ou des pièges ?


Donc un pb d'implémentation d'après ED.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed