Forum d'entraide en sciences
Bienvenue sur le forum d'entraide en sciences ! Inscrivez-vous gratuitement pour accéder à l'intégralité du forum ou connectez-vous si c'est déjà fait !

Bonne visite !

Rejoignez le forum, c'est rapide et facile

Forum d'entraide en sciences
Bienvenue sur le forum d'entraide en sciences ! Inscrivez-vous gratuitement pour accéder à l'intégralité du forum ou connectez-vous si c'est déjà fait !

Bonne visite !
Forum d'entraide en sciences
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Pokémon EV06 : où acheter le Bundle Lot ...
Voir le deal

petite question en language C

+3
Duche
Julien
pøx
7 participants

Aller en bas

petite question en language C Empty petite question en language C

Message par pøx Sam 28 Mar 2009 - 13:38

Voilà je viens donc juste de débuter la programation en C et bon voilà, j'ai finit ma mini-calculatrice(les opérations de base plus des racines et des puissances et des calculs d'aire bon rien de difficile) mais je voulais juste demander pour savoir a ce moment là:

case 5:
printf("entrez le nombre: ");
scanf("%d", &nombre1);
if (nombre1 >=10)
{
resultat = pow(nombre1, 2) + 1;
}
else
{
resultat = pow(nombre1, 2);
}
printf("%d^2 = %d", nombre1, resultat);
break;

pourquoi quand ma demande d'un carré d'un nombre supérieur ou égal a 10 quand je demande le carré sa donne 10^2=99?(alors que 9^2=81)
bon comme vous avez pu constatez ya pas d'erreur(ou j'en ai pas vu et le compilateur non plus^_^) et j'ai rajouté un "if" dans le switch,
ma question est: pourquoi ai-je besoin de rajouter un "+1" à ma formule pour que sa donne le bon résultat?(c'est juste a titre indicatif si ya pas de raison sa sera comme ça^^)
pøx
pøx
Membre
Membre

Masculin Nombre de messages : 47
Age : 30
Localisation : Nord/Pas-de-Calais
Profession / Etudes : TSSI
Points : 5748
Date d'inscription : 26/03/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Julien Sam 28 Mar 2009 - 13:53

Bon ben tu vois que tu peux faire de la prog ! Very Happy

Bon, y a plusieurs remarques à faire mais si tu veux, poste tout le code pour te donner quelques conseils. Wink

Sinon, pour ton calcul de carré, pourquoi tu ne fais pas juste ça ?
case 5:
printf("entrez le nombre: ");
scanf("%d", &nombre1);
resultat = pow(nombre1, 2);
printf("%d^2 = %d", nombre1, resultat);
break;

En fait, je ne vois pas pourquoi tu distingues les nombres inférieurs à 10 et ceux supérieurs...
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par pøx Sam 28 Mar 2009 - 17:25

ba justement, quand je ne distingue pas les nombres, a 9 sa devient 81(9^2) mais a partir de 10 sa devient 99 (10^2-1) et 11 devient 120(11^2-1)
sinon si tu veux mon programme voilà je voulais faire comme il disait une "mini-calculatrice" à deux variable(nombres) donc si tu veux voir voilà:(pour l'opération a la case 7, c'ets idem que pour la puissance carré mais sa le fait pas pour la puissance cube je sais pas pourquoi???(d'ailleurs c'était ça l'origine de la question^^)
#include
#include
#include

int main()
{
long choix= 0;
printf("Bonjour\nQuelle operation voulait vous faire?\ Tapez un nombre.\n\n");
printf("1. Une addition\n\n");
printf("2. Une soustraction\n\n");
printf("3. Une multiplication\n\n");
printf("4. Une division\n\n");
printf("5. Une multiplication a la puissance Carre\n\n");
printf("6. Une multiplication a la puissance Cube\n\n");
printf("7. Une multiplication par une puissance quelquonque\n\n");
printf("8. Une racine carre\n\n");
printf("9. Un modulo(reste de division)\n\n");
printf("10. La circonference d'un cercle a partir d'un rayon(valeur tronquee)\n\n");
scanf("%d", &choix);
printf("vous avez choisit l'option %d", choix);
printf("\n\n\n");

long nombre1, nombre2, resultat;
switch (choix)

{

case 1:
printf("entrez le premier nombre: ");
scanf("%d", &nombre1);
printf("entrez le deuxieme nombre: ");
scanf("%d", &nombre2);
resultat = nombre1 + nombre2;
printf("%d + %d = %d", nombre1, nombre2, resultat);
break;

case 2:
printf("entrez le premiez nombre: ");
scanf("%d", &nombre1);
printf("entrez le deuxieme nombre");
scanf("%d", &nombre2);
resultat = nombre1 - nombre2;
printf("%d - %d = %d", nombre1, nombre2, resultat);
break;


case 3:
printf("entrez le premier nombre: ");
scanf("%d", &nombre1);
printf("entrez le deuxieme nombre: ");
scanf("%d", &nombre2);
resultat = nombre1 * nombre2;
printf("%d * %d = %d", nombre1, nombre2, resultat);
break;

case 4:
printf("entrez le premier nombre: ");
scanf("%d", &nombre1);
printf("entrez le deuxième nombre: ");
scanf("%d", &nombre2);
resultat = nombre1 / nombre2;
printf("%d / %d = %d", nombre1, nombre2, resultat);
break;

case 5:
printf("entrez le nombre: ");
scanf("%d", &nombre1);
if (nombre1 >=10)
{
resultat = pow(nombre1, 2) + 1;
}
else
{
resultat = pow(nombre1, 2);
}
printf("%d^2 = %d", nombre1, resultat);
break;

case 6:
printf("entrez le nombre: ");
scanf("%d", &nombre1);
resultat = pow(nombre1, 3);
printf("%d^3 = %d", nombre1, resultat);
break;

case 7:
printf("entrez le nombre: ");
scanf("%d", &nombre1);
printf("entrez la puissance");
scanf("%d", &nombre2);
if (nombre1 >= 10)
{
resultat = pow(nombre1, nombre2) + 1;
}
else
{
resultat = pow(nombre1, nombre2);
}
printf("%d^%d = %d", nombre1, nombre2, resultat);
break;

case 8:
printf("entrez nombre: ");
scanf("%d", &nombre1);
resultat = sqrt(nombre1);
printf(" racine carre de %d = %d", nombre1, resultat);
break;

case 9:
printf("entrez le premier nombre: ");
scanf("%d", &nombre1);
printf("entrez le deuxieme nombre: ");
scanf("%d", &nombre2);
resultat = nombre1 % nombre2;
printf("le reste de %d / %d = %d", nombre1, nombre2, resultat);
break;

case 10:
printf("entrez le rayon du cercle");
scanf("%d", &nombre1);
resultat = nombre1 * 2 * 3.14;
printf("la circonference du cercle vaut environ %d", resultat);
break;

default:
printf("je n'ai pas integre d'autres fonction sa ne sert a rien de taper d'autres nombres");
}
return 0;
}
pøx
pøx
Membre
Membre

Masculin Nombre de messages : 47
Age : 30
Localisation : Nord/Pas-de-Calais
Profession / Etudes : TSSI
Points : 5748
Date d'inscription : 26/03/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Julien Sam 28 Mar 2009 - 18:24

Oulah ! Je ne comprends pas pourquoi ça fait ça là !

J'ai testé ton programme, et avec le code de mon précédent message (donc sans distinction aucune), je n'ai aucun problème !

De plus, est-ce nécessaire de faire les cas 5 et 6 s'ils sont inclus dans le 7° cas ?
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Julien Sam 28 Mar 2009 - 18:41

D'autres petites remarques :
- rajoute un \n dès que tu donnes un résultat pour plus de clarté.
- essaie de faire en sorte que ton programme ne se quitte pas après un résultat sauf si l'utilisateur le demande. Si tu veux, englobe tous tes cas par un while avec dans ce while, la vérification de la valeur d'une variable. Si celle-ci vaut 1 (par exemple), on continue, sinon, on arrête le programme. Et pour gérer le changement de cette variable, au début du programme, tu l'initialises à 1 et si l'utilisateur tape 100, (on se retrouve dans le cas 100), alors, tu changes ta variable à 0 et le programme s'arrête.
- ajoute des exceptions (par exemple, une division par 0 est impossible, de même que la racine carrée d'un nombre négatif)
- le cas où tu calcules le modulo, tu pourrais l'améliorer en sortant le résultat entier de la division euclidienne.


Voilà quelques améliorations si tu veux. Après, si tu veux vraiment améliorer les capacités de ta calulatrice, y a plein d'autres choses à faire ! Smile

Mais sinon, c'est très bien pour un début. Wink
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par pøx Sam 28 Mar 2009 - 19:58

eh bien merci de tes encouragements^^(en tout cas c'est moins dur que ce que je pensais)
sinon le problème peut-il venir de codeblok(mon compilateur?)
sinon pour le système des "while" je n'ai pas encore vu cette notion(c'ets ce que je suis en train de voir mais je n'ai pas encore lu la rubrique)
pøx
pøx
Membre
Membre

Masculin Nombre de messages : 47
Age : 30
Localisation : Nord/Pas-de-Calais
Profession / Etudes : TSSI
Points : 5748
Date d'inscription : 26/03/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Julien Sam 28 Mar 2009 - 20:37

pøx a écrit:sinon le problème peut-il venir de codeblok(mon compilateur?)
Je ne sais pas. Pourquoi pas ! Je n'ai jamais utilisé cet IDE.

OK pour les while. Du coup t'as pas dû voir les if aussi pour gérer les exceptions dont je te parlais plus haut. Ca va venir. Wink
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par pøx Jeu 2 Avr 2009 - 8:56

Euh j'en avais une autre maintenant: Comment faire un programme qui quand on l'active peut complètement fermer l'ordinateur(équivalent de faire démarrer puis arrêter l'ordinateur)?
Sinon comment on pourrait faire dans un programme tel que celui-ci pour Changer le niveau de difficulté(j'entend par la que si l'utilisateur tape "1" par exemple la fourche est de 1/100, si il tape 2, difficulté moyenne et sa passe entre 1/1000 etc...(je sais déjà qu'il faut enlever le "const" mais après je manque cruellement de logique là(ou de connaissances en C^^)
long nombreMystere = 0, nombreEntre = 0, essai = 0;
const long MAX = 100, MIN = 1;


while
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; // formule pour avoir le nombre aléatoire)

do
{

printf("Quel est le nombre ? ");
scanf("%ld", &nombreEntre);
if (nombreMystere > nombreEntre)
{
printf("C'est plus !\n\n");
essai++;
}
else if (nombreMystere < nombreEntre)
{
printf("C'est moins !\n\n");
essai++;
}
else
{
essai++;
printf ("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", essai);
}

} while (nombreEntre != nombreMystere);
Solution?
pøx
pøx
Membre
Membre

Masculin Nombre de messages : 47
Age : 30
Localisation : Nord/Pas-de-Calais
Profession / Etudes : TSSI
Points : 5748
Date d'inscription : 26/03/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Julien Jeu 2 Avr 2009 - 11:25

pøx a écrit:Euh j'en avais une autre maintenant: Comment faire un programme qui quand on l'active peut complètement fermer l'ordinateur(équivalent de faire démarrer puis arrêter l'ordinateur)?
Il te faut faire de la programmation système là. Ou alors un script. Sous UNIX par exemple, tu crées un script en bash avec la commande qui va bien (halt, shutdown...), ensuite, tu rends exécutable le script et enfin, tu peux le lancer en ligne de commande.


Sinon comment on pourrait faire dans un programme tel que celui-ci pour Changer le niveau de difficulté(j'entend par la que si l'utilisateur tape "1" par exemple la fourche est de 1/100, si il tape 2, difficulté moyenne et sa passe entre 1/1000 etc...(je sais déjà qu'il faut enlever le "const" mais après je manque cruellement de logique là(ou de connaissances en C^^)
Il te faut faire comme dans la calculatrice : un switch avec des cases. Ainsi, au début, tu demandes à l'utilisateur de choisir le niveau et s'il choisit le niveau 3, tu mets ta variable à 10000 par exemple. Ensuite, tu déroules l'algorithme que t'as écrit.


Deux petits conseils : crée un nouveau sujet pour un nouveau programme. Wink
Et mets ton code en citation pour un affichage plus lisible. Smile
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Duche Jeu 2 Avr 2009 - 16:43

pøx a écrit:Euh j'en avais une autre maintenant: Comment faire un programme qui quand on l'active peut complètement fermer l'ordinateur(équivalent de faire démarrer puis arrêter l'ordinateur)?

Tu peux aussi appeler les commandes dos avec la fonction system("commande")
Pour connaitre les commandes dos et leur paramètres, il suffit d'ouvrir la console et de taper "help", t'auras tous les détails qu'il faut.


Et sinon, je dirais même plus, met ton code entre les balises [ code ] et [ /code ].
Pour passer de 100 à 1000 à 10000 ... tu peux aussi faire
Code:

int denominateur = 1;
for(int i=0;i<a+1;i++)
  denominateur *= 10;
Ou a est le niveau de difficulté.
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8264
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par pøx Jeu 2 Avr 2009 - 16:48

Oki je prends tout en note Smile
sinon duche, la commanbde DSOS que tu énonce, était-elle présente dans les précédentes versions(disons sous windows 98?)
Sinon pour la lisibilité je ferais mieux en quote la prochaine fois :p
pøx
pøx
Membre
Membre

Masculin Nombre de messages : 47
Age : 30
Localisation : Nord/Pas-de-Calais
Profession / Etudes : TSSI
Points : 5748
Date d'inscription : 26/03/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par porteuris Lun 6 Avr 2009 - 11:10

sinon pour shutdown dans ton programme fait :

system("shutdown -s"); pour éteindre l'ordinateur en cours ( -s pour éteindre ) seulement ça prend un certein temps donc il faut faire

system("shutdown -r -t 0); pour 0 seconde d'attente

par contre les machines windows bizzarement possédent 2 shutdown et parfois certaine appelle la 1er qui ne sert à rien sauf fermer des fichier en cours donc parfois il faut faire une petite recherche et donner le lien complet

/!\ pour le lien il faut mettre 2 antislash exemple
system("C:\\fichiers\\shutdown -s -t 0);
porteuris
porteuris
Membre
Membre

Masculin Nombre de messages : 224
Age : 31
Localisation : BETHUNE
Profession / Etudes : Lycéen 1°S -si
Points : 6370
Date d'inscription : 19/03/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par porteuris Lun 6 Avr 2009 - 11:25

par contre je me demander la question inverse comment programmé l'allumage du PC (et est-ce possible)
porteuris
porteuris
Membre
Membre

Masculin Nombre de messages : 224
Age : 31
Localisation : BETHUNE
Profession / Etudes : Lycéen 1°S -si
Points : 6370
Date d'inscription : 19/03/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Julien Lun 6 Avr 2009 - 15:17

porteuris a écrit:par contre je me demander la question inverse comment programmé l'allumage du PC (et est-ce possible)

C'est un PC qui tourne sur quel OS. Il est sur un réseau ou pas ? Tu peux regarder du côté du WakeOnLan avec le BIOS déjà. Sinon, il doit y avoir des programmes qui existent déjà pour faire ce genre de choses...
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par porteuris Mar 7 Avr 2009 - 6:16

windows comme OS et oui se qui m'interresseré c'est d'allumé les PC connécté en reseaux... Smile

sinon je vzeux bien savoir comment est-ce techniquement possible si ce n'est pas le cas
porteuris
porteuris
Membre
Membre

Masculin Nombre de messages : 224
Age : 31
Localisation : BETHUNE
Profession / Etudes : Lycéen 1°S -si
Points : 6370
Date d'inscription : 19/03/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Folkene Jeu 9 Avr 2009 - 8:03

Dans le cas ou ce n'est pas possible, il suffit de faire un boitier dtmf. C'est un petit montage (à monter soit même) dont le schéma tourne sur le net. Une fois monter tu le cales dans ton PC (fixe, car ça ne marche pas sur les portables vue la taille du boitier) et le reliant comme écrit dans la doc. Une fois l'ensemble réaliser tu tel sur ton fix et la magie ton fixe s'allume. J'ai réalisé ce montage l'an passé à l'école. La doc que tu trouvera sera certainement en anglais et le principe est celui du WakeUpOnLan. donc si tu l'as sur ton machine pas besoin du montage

Folkene
Membre
Membre

Masculin Nombre de messages : 44
Age : 36
Localisation : Marseille
Profession / Etudes : Etudiant
Points : 5581
Date d'inscription : 25/02/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par porteuris Ven 10 Avr 2009 - 13:54

OOuaaah!!! ça a pas l'air trés honereux tout ça ?
porteuris
porteuris
Membre
Membre

Masculin Nombre de messages : 224
Age : 31
Localisation : BETHUNE
Profession / Etudes : Lycéen 1°S -si
Points : 6370
Date d'inscription : 19/03/2009

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Julien Lun 13 Avr 2009 - 13:53

Tiens j'ai trouvé ça sur le WOL : http://www.siteduzero.com/tutoriel-3-37098-wake-on-lan.html
Julien
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22498
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Cocoggu Ven 4 Juin 2010 - 0:22

Pour ton problème principal, il est du au fait que la fonction pow() récupère deux variables de type double et renvoit aussi un double. Dans le cas présent il aurait été plus simple de faire :
Code:
resultat = nombre1 * nombre1;
Mais si la puissance n'était pas connue tu aurais du utiliser des doubles (ou des floats avec powf() ). En effet j'ai essayé de caster en double et vice versa mais le probleme subsiste...
Enfin pour résumer, l'erreur venait d'un problème de précision lors de la conversion des int en double.
Bonne nuit

Cocoggu
Membre
Membre

Masculin Nombre de messages : 6
Age : 32
Localisation : Angers - Nantes
Profession / Etudes : Etudiant en Informatique
Points : 5109
Date d'inscription : 03/06/2010

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par romainj1998 Ven 19 Aoû 2011 - 12:30

? je pige rien

romainj1998
Membre
Membre

Masculin Nombre de messages : 8
Age : 32
Localisation : france
Profession / Etudes : rien
Points : 4690
Date d'inscription : 19/08/2011

Revenir en haut Aller en bas

petite question en language C Empty Re: petite question en language C

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser