#1151 Le 26/10/2011, à 19:47
- kamui57
Re : /* Topic des codeurs [6] */
déjà ici ya une faute d'étourderie, sinon rolinh a tout dit.
while ((choix=='R') || (choix='r'));
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#1152 Le 26/10/2011, à 19:55
- Rolinh
Re : /* Topic des codeurs [6] */
Une question quand même:
int main ()
c'est de la provocation ça dans ton 2e bout de code?
Hors ligne
#1153 Le 26/10/2011, à 19:55
- Вiɑise
Re : /* Topic des codeurs [6] */
/me fouille
quelle fonction c'était >_<
Et vérifier qu'ils mettent pas plus de caractères que je le veuille, je ne sais pas faire.
Hors ligne
#1154 Le 26/10/2011, à 19:56
- Вiɑise
Re : /* Topic des codeurs [6] */
Une question quand même:
int main ()
c'est de la provocation ça dans ton 2e bout de code?
Nan c'est un code plus vieux.
Sinon… stp ne parle pas par énigmes, je ne veux pas "deviner" mais apprendre. Ne t'en fais pas chuis assez grande pour m'exercer autant que nécessaire ensuite.
Oué nan décidément je trouve pas de fonction pour vider le buffer qui fonctionne… Et google me dit de faire fflush (stdin)
Dernière modification par Вiɑise (Le 26/10/2011, à 20:00)
Hors ligne
#1155 Le 26/10/2011, à 19:59
- Rolinh
Re : /* Topic des codeurs [6] */
quelle fonction c'était >_<
Comment ça ne parle pas par énigme? Je ne comprend pas. J'essaie de te donner des pistes, pas de te mâcher le travail.
De quelles infos as-tu besoin?
Hors ligne
#1156 Le 26/10/2011, à 20:02
- Вiɑise
Re : /* Topic des codeurs [6] */
Вiɑise a écrit :quelle fonction c'était >_<
Comment ça ne parle pas par énigme? Je ne comprend pas. J'essaie de te donner des pistes, pas de te mâcher le travail.
De quelles infos as-tu besoin?
<code>empty_buf (void) </code>je l'utilise comme ça ?
ou je fais <code> empty_buf (scanf)</code>
Bah je demande pas des pistes mais la réponse directement. Sinon ça prend des plombes par forum interposé.
Hors ligne
#1157 Le 26/10/2011, à 20:06
- Rolinh
Re : /* Topic des codeurs [6] */
Et google me dit de faire fflush (stdin)
Et grim esquisse une petite phrase qui te fait dire que c'est mal ici.
Il me semble que l'on est pourtant bien réactif sur ce topic nan?
La fonction tu l'appelles comme cela:
empty_buf();
Dernière modification par Rolinh (Le 26/10/2011, à 20:06)
Hors ligne
#1158 Le 26/10/2011, à 20:09
- Вiɑise
Re : /* Topic des codeurs [6] */
Вiɑise a écrit :Et google me dit de faire fflush (stdin)
Et grim esquisse une petite phrase qui te fait dire que c'est mal ici.
Il me semble que l'on est pourtant bien réactif sur ce topic nan?
La fonction tu l'appelles comme cela:empty_buf();
1- oui c'est pour ça que ça me fait rire
2- fais
compilation :
biaise@Tonton:~/Documents/DUT/c/programmes perso/CH5$ gcc -o 5-3 5-3.c
/tmp/ccSTciaF.o: In function `main':
5-3.c:(.text+0xc0): undefined reference to `empty_buf'
collect2: ld returned 1 exit status
grr
yep mais après on peut causer toute la soirée alors que je suis pas censée passer autant de temps juste sur le C. ^^'
bon à table…
Hors ligne
#1159 Le 26/10/2011, à 20:16
- kamui57
Re : /* Topic des codeurs [6] */
T'as défini la fonction empty_buf dans ton code ?
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#1160 Le 26/10/2011, à 20:17
- Rolinh
Re : /* Topic des codeurs [6] */
Il faut que tu déclares le prototype de la fonction empty_buf() avant de l'appeler sinon le compilo ne sait pas à quoi tu fais référence.
En gros, tu écris:
void empty_buf(void);
avant ta fonction main (il y a d'autres solutions mais je ne veux pas t'embrouiller).
Sinon, pour tes options de compilation, utilises au grand minimum -Wall.
gcc -Wall biaise.c -o biaise
Hors ligne
#1161 Le 26/10/2011, à 20:24
- Pylades
Re : /* Topic des codeurs [6] */
int nb_alea=0;
Ça va peut-être changer, mais pour le moment un unsigned char est amplement suffisant pour compter de 0 à 99.
printf("Devinez un nombre entre 0 et 99 : \n");
Et puts, c’est pas fait pour les chiens…
if (rep>nb_alea) printf("C'est moins !\n"); else if (rep<nb_alea) printf("C'est plus !\n");
C’est un peu bancal, t’aurais meilleur compte à utiliser un ternaire.
puts(rep > nb_alea ? "C’est plus." : "C’est moins.");
Bien sûr, ça nécessite d’avoir testé l’égalité avant, ce qui est de toutes façons plus logique.
while ((choix=='R') || (choix='r'));
Essaie plutôt ceci :
while (getchar() == 'r' && getchar() == '\n');
int main ()
* PAN *
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1162 Le 26/10/2011, à 20:25
- Elzen
Re : /* Topic des codeurs [6] */
À ma fac, apparemment (c'était avant que j'y arrive, vu que j'ai fait un DUT avant d'embrayer sur la L3, donc j'n'ai pas vu leur apprentissage du C, donc j'n'ai pas vu ça moi-même), ils apprennent à mettre -Wall et -pedantic. Ce qui n'est pas mal ^^
Sinon, aucune réaction à propos de mon article, ça veut dire que j'n'ai pas dit de bêtises, ou que personne n'a lu ?
Edit : @Πυλάδης : pour le coup, le ternaire, on n'y gagne pas grand chose en clarté, surtout pour débuter en C. Par contre, avec, le cas où rep est égal à nb_alea est zappé. Donc je pense que Вiɑise fait bien de faire à sa façon.
Et ton while ne tient pas compte du R, qu'on reçoit par exemple quand on a mis le caps lock sans s'en rendre compte.
Pour main(void), sur le principe j'suis d'accord, après, à titre personnel, je n'considère pas ça comme une priorité. Et plus j'n'aime pas les « * PAN * ». Faut pas attendre à ce que les débutants fassent du super beau code dès le début.
Pour puts, je soutiens, sauf pour la formulation
Dernière modification par ArkSeth (Le 26/10/2011, à 20:32)
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#1163 Le 26/10/2011, à 20:29
- kamui57
Re : /* Topic des codeurs [6] */
ArkSeth : j'l'ai pas trouvé... dans informatique ya Singe, Scripts et compagnie et dans actu y a Allègrement vôtre.
Dernière modification par kamui57 (Le 26/10/2011, à 20:31)
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#1164 Le 26/10/2011, à 20:32
- Rolinh
Re : /* Topic des codeurs [6] */
Oula, Πυλάδης, je vais être obligé de te reprendre sur plusieurs points.
(développement suit...)
Hors ligne
#1165 Le 26/10/2011, à 20:33
- Elzen
Re : /* Topic des codeurs [6] */
Ah, ouais, pardon
J'l'ai posté dans la partie forum, et j'ai oublié de faire le lien dans la partie blog.
Bon, t'façon, vu que c'est en clair depuis hier, ça a déjà du être indexé, donc voilà le lien direct, et j'm'empresse d'aller rajouter ça
Edit : d'ailleurs, justement, j'hésite entre informatique et actu… les gens qui ont lu, j'mets ça où, à votre avis ?
Dernière modification par ArkSeth (Le 26/10/2011, à 20:38)
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#1166 Le 26/10/2011, à 20:40
- kamui57
Re : /* Topic des codeurs [6] */
"ont fournit les avancées décisives ayant permit la réalisation de l'informatique telle qu'on la connais "
→ont fourni, ayant permis, on la connaît
"des systèmes non-UNIX visant le grand public." → smallcaps ?
"qu'il s'agit de l'une des grandes familles de programmation, basée sur le concept de fonction mathématiques" → manque un point
"Dennis Ritchie a reprit" → a repris
"donc capable d'effectuer d'un contrôle avancé" → pas de d'
" les outils qui ont permit → permis"
jverrais plus ça dans actu parce que me semble que c'est pas des explications de concepts comme tes trucs d'info.
Dernière modification par kamui57 (Le 26/10/2011, à 20:43)
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#1167 Le 26/10/2011, à 20:48
- Elzen
Re : /* Topic des codeurs [6] */
J'pensais plus à une relecture sur le contenu, mais merci quand même ^^ (J'fais de plus en plus de fautes de frappe, moi, c'est catastrophique )
(J'ai corrigé, et j'ai aussi rajouté « concept de fonction en mathématiques », j'trouve ça plus clair comme ça)
D'accord pour actu, en effet. Et s'il y a d'autres remarques sur le sujet, du coup, ce sera peut-être mieux là-bas, on est un peu HS ici et j'n'ai pas assez de commentaires ^^ (et puis Вiɑise a p't'être besoin de la place, et j'veux voir la réponse de Rolinh à Πυλάδης )
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#1168 Le 26/10/2011, à 20:48
- Pylades
Re : /* Topic des codeurs [6] */
Par contre, avec, le cas où rep est égal à nb_alea est zappé.
Justement (je l’ai dit, en plus), ça oblige à avoir une construction un peu plus logique.
Et ton while ne tient pas compte du R, qu'on reçoit par exemple quand on a mis le caps lock sans s'en rendre compte.
C’était pour ne pas surcharger. Mais on peut très bien faire comme ça :
while (plop = getchar(), (plop == 'r' || plop == 'R') && getchar() == '\n');
Dernière modification par Πυλάδης (Le 26/10/2011, à 20:48)
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1169 Le 26/10/2011, à 20:54
- Rolinh
Re : /* Topic des codeurs [6] */
Вiɑise a écrit :int nb_alea=0;
Ça va peut-être changer, mais pour le moment un unsigned char est amplement suffisant pour compter de 0 à 99.
Pourquoi un char? C'est aberrant. De plus, c'est une fausse idée de croire que si tu stockes dans un unsigned char (sur moins de bits qu'un int donc) tu y gagneras en performance (raisonnement type "un char occupe moins de place car les registres sont de 32 bits (exemple) de même que les entrées de la pile"). En fait, c'est même la plupart du temps le contraire (à moins que tu travailles avec une arithmétique modulo 256). J'ai un peu la flemme d'aller fouiller mais si tu y tiens, je peux te donner un exemple tiré de mon cours de programmation système de l'année dernière avec des bouts de codes en C et ce que ça donne en assembleur.
C’est un peu bancal, t’aurais meilleur compte à utiliser un ternaire.
puts(rep > nb_alea ? "C’est plus." : "C’est moins.");
Ouais, voilà une belle démonstration de code rendu illisible...
Sinon, pour l'histoire du printf, pas besoin d'être si dur. C'est aussi un peu une question de religion car en pratique, niveau perf, c'est kifkif mais si, et je suis d'accord, c'est plus correct d'utiliser puts pour des chaînes non-formatées.
(bon, en fait j'ai fait plus court que prévu mais j'avais un peu la flemme de sortir mon exemple avec l'assembleur )
Hors ligne
#1170 Le 26/10/2011, à 20:57
- Rolinh
Re : /* Topic des codeurs [6] */
et j'veux voir la réponse de Rolinh à Πυλάδης
)
Bon, j'étais partit pour faire mon développement de manière bien plus complète pis j'ai abandonné mais là tu m'obliges à reprendre ma réponse
Dernière modification par Rolinh (Le 26/10/2011, à 20:57)
Hors ligne
#1171 Le 26/10/2011, à 21:04
- Elzen
Re : /* Topic des codeurs [6] */
Une affectation dans un while, je trouve déjà ça moche, mais alors une affectation d'origine extérieure suivie de plusieurs tests sur la variable affectée suivit d'une autre attente d'entrée extérieure, je trouve juste ça horrible
Pour le fait d'avoir testé l'égalité avant… mouais, j'pense que les deux reviennent au même. De toute façon, dans un cas comme dans l'autre, je trouve le truc plus « lisible » avec des if/else qu'avec un ternaire. Il s'agit ici d'un exercice d'apprentissage, pas d'une recherche d'optimisation.
Bon, j'étais partit pour faire mon développement de manière bien plus complète pis j'ai abandonné mais là tu m'obliges à reprendre ma réponse
Te sens pas obligé quand même
Le code rendu illisible, j'n'irais pas jusque là. Ça l'est moins, et donc ç'n'est à mon avis pas à conseiller pour du code de débutant(e), mais ça reste lisible quand même.
(Sinon, article lié dans actu, et aussi sur le flux RSS (en antidaté de sa date de parution))
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#1172 Le 26/10/2011, à 21:18
- xapantu
Re : /* Topic des codeurs [6] */
[
Πυλάδης a écrit :C’est un peu bancal, t’aurais meilleur compte à utiliser un ternaire.
puts(rep > nb_alea ? "C’est plus." : "C’est moins.");
Ouais, voilà une belle démonstration de code rendu illisible...
Mouais, les conditions en ternaire comme ça, je trouve que c'est assez lisible et ça simplifie beaucoup le code... Bon, après, faut pas non plus que la condition fasse trois lignes, mais je pense que même quand elle est plus longue, stocker le résultat dans un bool (ou un int) et ensuite refaire une condition ternaire est plus lisible que de se balancer un if et un else. En tout cas j'aime bien, moi
Hors ligne
#1173 Le 26/10/2011, à 21:31
- Rolinh
Re : /* Topic des codeurs [6] */
Donc, pour reprendre sur l'histoire du char et de la brouette de l'int:
Voilà un exemple de code qui calcule un checksum:
int
chksum(int *data)
{
char i; /* parce qu'un char occupe moins de place, blabla... */
int sum = 0;
for (i = 0; i < 64; i++) {
sum += data[i];
}
return sum;
/* NOTREACHED */
}
Et voilà ce que ça donne en assembleur (c'était pour de l'ARM7TDMI dans notre cas):
cheksum
MOV r2, r0 ; r2 = data
MOV r0, #0 ; sum = 0
MOV r1, #0 ; i = 0
chksum_loop
LDR r3, [r2, r1, LSL #2] ; r3 = data[i]
ADD r1, r1, #1 ; r1 = i + 1
AND r1, r1, #0xff ; i = (char) r1
CMP r1, #0x40 ; le paquet contient 64 mots
ADD r0, r3, r0 ; sum += r3
BCC chksum_loop ; if (i<64) loop
MOV pc, r14
pc est le program counter, le BCC c'est une opération de branchement, LSL c'est un shift logique de bits vers la gauche, LDR c'est un chargement. Enfin bon, ce que font les instructions est expliqué en commentaire (après le ; ).
Maintenant, si dans ton code tu avais fait
int i;
en lieu et place de
char i;
le code assembleur ressemblerait à ceci:
chksum
MOV r2, r0 ; r2 = data
MOV r0, #0 ; sum = 0
MOV r1, #0 ; i=0
chksum_loop
LDR r3, [r2, r1, LSL #2] ; r3 = data[i]
ADD r1, r1, #1 ; r1 = i + 1
CMP r1, #0x40 ; le paquet contient 64 mots
ADD r0, r3, r0 ; sum += r3
BCC chksum_loop ; if (i < 64) loop
MOV pc, r14
Tu peux donc constater que dans le second cas, on a évité cette ligne:
AND r1, r1, #0xff ; i = (char) r1
Bref, tout ceci pour dire que tout ça dépend de plusieurs paramètres et qu'il est faux de croire que stocker une donnée sur moins de bits est forcément avantageux. Cela dépend fortement des opérations que tu fais sur tes données aussi.
@xapantu: je n'ai rien contre les opérateurs ternaires et je trouve même cela plutôt bien. En revanche, le mettre comme ça directement dans un puts...
Hors ligne
#1174 Le 26/10/2011, à 21:37
- Вiɑise
Re : /* Topic des codeurs [6] */
Je le craignais, vous commencez à débattre et au final j'sais plus quoi faire.
Bon jvais déjà voir si j'ai pigé comment utilisé empty_buf…
*sommeil*
Oué bah faut croire que je l'ai mal fait
biaise@Tonton:~/Documents/DUT/c/programmes perso/CH5$ gcc -o 5-3 5-3.c -Wall
/tmp/ccj6T3l0.o: In function `main':
5-3.c:(.text+0xc0): undefined reference to `empty_buf'
collect2: ld returned 1 exit status
Dernière modification par Вiɑise (Le 26/10/2011, à 21:41)
Hors ligne
#1175 Le 26/10/2011, à 21:41
- Elzen
Re : /* Topic des codeurs [6] */
Bah tout marche, et on débat surtout sur la lisibilité des différentes méthodes, donc je dirais que le mieux, c'est que tu regardes les différentes réponses et que tu prennes le truc qui te paraît le plus simple Et comme tu débutes et pas nous, et donc que tu es plus à même de répondre à la question, tu nous informes de ce que tu as choisi ^^
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne