CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] switch

iscario
iscario
Niveau 7
09 mars 2008 à 16:17:58

bonjour, je débute en C, je suis des cours dans mon cursus scolaire, mais je les trouve plutot lacunaire, donc je compte sur votre aide.

tout d'abord le switch :

est ce l'on peut mettre des conditions bouléenes dans les "case"?

Par exemple :

si d est un entier :

switch(d)
{
case >0
case <0
}

J'ai cherché vite fait sur le net, mais je n'ai aps trouvé de réponse explicite.
Je pense que l'on ne peut pas, mais j'aimerais en etre sûr.

:merci:

guyver2
guyver2
Niveau 10
09 mars 2008 à 16:21:29

non impossible

les elements d'un switch sont OBLIGATOIREMENT des constantes, c'est a dire soit des valeurs numeriques soit des constantes definies par des #define (et peut etre des variables definie avec const mais je suis pas sur)

si c'est pour tester > ou < autant faire un if-else

iscario
iscario
Niveau 7
09 mars 2008 à 16:53:49

d'accord, je m'en doutais... merci pour ta réponse.

sinon j'ai une autre question :

dans le cas d'un programme sur le second degré , j'ai ca :

x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);

comme je calcule les deux solutions forcément, est-ce que j'ai intéret pour optimiser le programme de faire ca plutot :

d=sqrt(d);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);

comme ca je me disais que l'on calculait qu'une fois "racine de d" au lieu de 2... Est-ce que ca apporte une amélioration (meme en réalité on s'en tape dans ce cas vu la puissance des pc)

dnob700
dnob700
Niveau 10
09 mars 2008 à 17:31:42

en terme de vitesse, dans tout les cas ça ne peut pas être pire (quoi que). Par contre, selon ton compilateur et les options que tu utilise, ça peut être moins précis (enfin très peu).

Parce que le sqrt(d) va être stocké dans la mémoire sur moins de bit (32 ou 64) qu'il ne l'est au cours d'un calcul intermédiaire (80).

Mais de toutes manières, le compilo peut être réglé pour faire toujours ça (tronquer les résultats intermédiaire à 64 bits) pour préserver la cohérence des calculs, ou alors, il peut voir cette optimisation et sortir le sqrt(d) pour ne le calculer qu'une seule fois et donc tu ne gagne même pas de temps. Ou alors, si tu ne réutilise pas d, il peut voir que ça ne sers à rien de le tronquer, etc.

Bref, il est quasiment impossible juste comme ça de te dire quel sera l'effet de ce changement.

L'optimisation de code est une tâche ardue, celle de calcul flottant est encore bien pire. L'idée de base c'est d'écrire ce qu'il faut de la manière la plus simple possible (ici, tu choisi celle des deux formes que tu préfère) et ensuite de laisser le compilo faire son boulot. Quand tu maîtrisera plus le langage, tu pourra commencer à regarder sérieusement ce que font les options de compilation et tu pourras même regarder les différences dans le code assembleur généré.

iscario
iscario
Niveau 7
09 mars 2008 à 17:38:49

d'accord merci bien pour ces précisions.

Encore une question pendant que j'y suis :

une fois que l'on a déclarer les bibliothèques, le programme doit-il commencer forcément par

int main();

ou le int est une option que l'on peut modifier et que je n'ai pas encore vue ?

dnob700
dnob700
Niveau 10
09 mars 2008 à 18:11:05

non, le int n'est pas une option. De toute manière, ça ne te servirai à rien de la changer. En fait, ça sers juste à dire au système d'exploitation que tout c'est bien passé (alors tu fait return 0; à la fin) ou qu'il y a eu un problème (tu renvoie autre chose que 0).

Très rarement on peut se servir de cette valeur pour autre chose, mais ce n'est pas recommandé.

guyver2
guyver2
Niveau 10
09 mars 2008 à 19:07:25

Très rarement on peut se servir de cette valeur pour autre chose, mais ce n'est pas recommandé.

tient donc? pourais tu en dire plus ? qui d'autre que le système peut avoir accès à cette valeur ?

dnob700
dnob700
Niveau 10
09 mars 2008 à 19:30:24

Par exemple, une fois j'ai écrit un programme que je voulais paralléliser en plusieurs sous tâche. Or, il se trouve que le résultat de chaque tâche était un petit entier.

Alors pour faire simple, j'ai récupéré la réponse de chaque processus dans leur valeur de retour. Sinon, j'aurais du utiliser des pipe par exemple pour faire une vrai communication inter process et ça aurait demandé plus de travail (ensuite c'est sûr que ça aurai été plus flexible, et d'ailleurs, j'ai fini par réécrire le programme de cette manière).

Seulement, le système peut modifier cette valeur de retour avec des masques de bits. Donc si la valeur retourné est trop grande, on ne peut pas forcément la récupérer.

Bref, ce n'est pas non plus une chose à faire, mais ça existe.

guyver2
guyver2
Niveau 10
09 mars 2008 à 19:43:24

ok d'accord, effectivement ça fait un peut crade comme methode ^^

iscario
iscario
Niveau 7
10 mars 2008 à 17:21:37

merci bien !

iscario
iscario
Niveau 7
10 mars 2008 à 19:08:27

c'est encore moi avec une nouvelle question.

Je ne suis pas sûr d'avoir bien compris a quoi sert la fonction getchar();

C'est pour obtenir un caractère depuis le clavier, non :question:

On pourrait uitliser un scanf(" ") à la place ou pas :question:

Ikki_2504
Ikki_2504
Niveau 11
10 mars 2008 à 20:36:22

getchar() écrit un caractère. L'avantage par rapport à scanf() est qu'elle est plus rapide :)

dnob700
dnob700
Niveau 10
10 mars 2008 à 22:43:19

Oui, on pourrait utiliser scanf à la place de getchar. Ça peut faire la même chose et je ne crois pas qu'il y ait de grosse différence de performance (de toutes manières, si tu veux lire beaucoup de données, il ne faut pas lire les caractères un à un).

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment