Deuxième plus grand [QCM 2002]

Oui, dans certains cas, les fonctions d'entrée-sortie du C++ (c-à-d cin & cout) peuvent être jusque 9 fois plus lentes que les fonctions équivalentes en C ({scan,print}f).

Et puis ... "itaille" => ?

Soit dit en passant ... "for (unsigned int i=0; i > i;" (condition corrigée) est une ligne qui a beaucoup de chances de planter.

Exemple : taille = 42 ; entrée = 1 2 1
Le programme va donner n'importe quelles valeurs à i, étant donné que std::cin ne modifie pas i si il y a eof.

Oui oui, c'est normal : ma condition, pour une raison que j'ignore, n'affiche pas " > " de mon cin ), j'ai donc dédoublé pour l'affichage, mais on se sera tous compris.

Et si j’emploie la technique for (...) c'est bien dans l'optique de la résolution des problèmes prologin : pour un programme clien concret j'aurais agit autrement. Mais je pars du principe que le serveur de prolo est un bon client.

« Je débute encore suffisamment dans le domaine pour ne pas pouvoir me passer de leur aide ( d'autant que la communauté est très fournie et que certains membres comme tu le dis bien sont assez calés dans le domaine ) »

3% de calés, 97% de gens qui vont te donner des réponses incomplètes, très mal expliquées, voire tout simplement fausses. Le forum du SdZ est une infamie.

Developpez.com est plus "pro", donc on y trouve bien moins ce genre de spécimens.

« Pour le non-initié ( celui qui ne compte aucun parent informaticien donc... ) c'est le seul moyen d'apprendre la programmation »

Hum, non, un des premiers langages que j'ai appris était le PHP (honte à moi), et c'était en piochant des "cours" sur plein de sites web différents et surtout en expérimentant moi-même.

Si on remonte encore plus loin, mon premier contact avec la prog' était du... Visual Basic for Applications, que j'ai appris en lisant juste la doc' de Microsoft. Honte à moi bis. Pardonnez-moi, j'étais au début du collège.

Après c'est sûr que le SdZ a une grosse grosse visibilité, le faisant passer pour le "seul moyen".

Epsilon : tiens, merci, je connaissais pas cette méthode.
Ca me fait penser, programmatiquement parlant il y a une raison pour cette lenteur de "cin >>" ? Ca m'étonne quand même qu'il puisse y avoir un facteur 9 avec scanf.

En théorie std::cin devrait être plus rapide pour la simple raison que le type de valeur à lire est connu à la compilation alors que scanf doit lire la format string.
En pratique, les fonctions C sont plus optimisées que les fonctions C++, pour la simple raison que le C est présent depuis beaucoup plus longtemps et qu'il est plus utilisé.

@lgorythme: \< : & lt ;

@epsilon: Mais il y a encore une occurrence de "::" !

Je propose plutôt :

1
2
#include 
#define DOUBLEPTS : ## : // Désolé, je ne sais pas ne pas rester poli ...

int main() {
std DOUBLEPTS cout }

Ô mon Dieu...

Qu’infligez vous au C++ ?

Attention, attention... :

1
std::cout

Hop !!!

1
using namespace std;

cout

Pire :

1
2
3
bla::ble::gha::pfuu::argh::rhaaa a;
bla::ble::gha::pfuu::argh::rhaaa b;
bla::ble::gha::pfuu::argh::rhaaa c;

int f(bla::ble::gha::pfuu::argh::rhaaa);
bla::ble::gha::pfuu::argh::rhaaa g();

Mieux :

1
typedef bla::ble::gha::pfuu::argh::rhaaa YOUPI;

YOUPI a;
YOUPI b;
YOUPI c;

int f(YOUPI);
YOUPI g();

Voilà pour le troll.

Moi les '::' je trouve ça pas mal...

On sait exactement ce qu'on fait. Après faut être malin et pas avoir peur d'utiliser typedef ou autre.

Pour information, avant de te montrer désagréable et plein de préjugés, sache que je n'utilise jamais le fameux " using namespace ".

( c'est d'ailleurs pour cette raison que j'ai apporté ma contribution à Wikipédia en postant ici, ayant été choqué par le seul exemple proposé : http://fr.wikipedia.org/wiki/Hello_world#C.2B.2B_.28_sans_utiliser_la_directive_using_namespace_std_.29 )

Je ne fais que présenter la solution aux allergiques.

Et je me permet d'ajouter que lorsque l'on code UNIQUEMENT avec la SL les risques de conflits restent assez limités... ( d'autant plus que mes noms de variable/classe/fonction sont toujours en français...).

Rooo, ça va si on ne peut même plus taquiner, surtout quand on voit la raison de ce sujet. :p
Sinon, je vais faire mon puriste, mais le « Hello, world! » de Wikipedia n'est pas la version communément admise, et pis : elle n'est pas valide en C++03.
Donc bon, je ne suis pas sûr que ça te rachète.

Tu parles de laquelle des versions ? La mienne ( sans using namespace std; )ou l'originale ( avec ) ?

Et pour quelle raison n'est-elle pas valide ?

Aucune des deux n'est valide C++03. C'est pas compliqué de trouver pourquoi… la version préférée de Stroustrup est :

1
2
3
4
5
6
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello, world!\n";
    }

Ah oui xD ça change vraiment tout !

Mais par ailleurs quand tu vois la manière dont Stroustrup indente son code...

Enfin bref voilà je suis pas fan de la manière dont il indente !

C'est donc la partie Settings => Editor => Source Formatter de Code::Blocks 10.05 que tu peux choisir ton indentation automatique : il te propose plusieurs styles prédéfinis dont celui de Stroustrup.

Voici pour l'exemple :

1
2
3
4
5
6
7
8
int Foo(bool isBar)
{
    if (isBar) {
        bar();
        return 1;
    } else
        return 0;
}

Ma version préférée est celle de gnu ( toujours selon les styles proposés ) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
int Foo(bool isBar)
{
  if (isBar)
    {
      bar();
      return 1;
    }
  else
    return 0;
}

EDIT : l'économiseur de tabulation automatique des messages du forum m'a explosé mon indentation. A toi de voir sur Code::Blocks si jamais tu l'as.

Non, je ne vois pas l'utilité de Code::Blocks c'est juste lent et pas pratique.
Et non, le standard ne dit rien par rapport à l'indentation. -_-'
J'attends que Ekleog passe pour qu'il essaye de deviner tout seul, c'est vrai que c'est pas évident, mais c'est marrant qu'un programme si simple ne soit même pas codé correctement par certains.

(Ayant une paresse profonde de lire deux fois tous les messages pour répondre uniquement aux parties n'ayant pas déjà été répondues, je vais répondre au fil de la lecture.)

"using namespace std;" -> OMG.
"typedef bla::ble::gha::pfuu::argh::rhaaa YOUPI;" -> "using bla::ble::gha::pfuu::argh::rhaa;" || "namespace lib = bla::ble::gha::pfuu::argh;"

"lorsque l'on code UNIQUEMENT avec la SL" -> La SL n'est pas la seule lib' du c++, hein ? (Lu, java.)

epsilon012: Pour l'erreur, je connaissais déjà, désolé. (D'ailleurs, il me semble qu'on en avait déjà parlé sur ce forum, non ?)
Par contre, ce n'est pas à strictement parler invalide. C'est juste une opération inutile.
(N'empêche, le coup de l'indentation sera à ressortir à la finale. Du style, qu'un orga dise à un candidat qui lui demande de l'aide en c++ que son problème est l'indentation, ça serait pas mal, non ?)

@lgorythme: Indice : Regarde la dernière instruction.

@Ekleog: Je pense à une autre erreur que l'absence de retour à la ligne he.
Donc en fait, il y a deux erreurs, pas qu'une. À moins que tu parles de l'autre erreur, mais je ne me souviens pas qu'on en ait déjà discuté. :\
alex3er l'a trouvé, quoi, il a eut l'idée du moins, l'erreur est :
error: 'endl' is not a member of 'std'
Question : où est déclaré std::endl ? \<ostream>
Or contrairement à C++11, C++03 n'oblige pas \<iostream> à inclure \<ostream>.

epsilon: Je parle de l'autre, qui correspond à la dernière instruction du main. (L'absence de retour à la ligne, on ne peut pas la connaître sur le forum, vu qu'on n'a pas le fichier original, si ?)

Mais, par contre, je ne pensais pas à cette erreur ... ! (Le return, quoi.)

Je n'ai jamais dit que la standard parlait de l'indentation, j'ai juste dit que Code::Blocks proposait des style d'indentations automatique différents ( pour éviter de devoir faire les tab à la main, il nous mâche le boulo pour que ce soit plus lisible ).

Et en ce qui me concerne j’apprécie Code::Blocks : je ne trouve pas que ce soit un mauvais IDE (j'ai cependant changé le compilo par défaut pour prendre la dernière version de MinGW, la 4.5, que C::B ne possède pas).

Par contre j'ai plus rien compris de votre délire depuis mon dernier message.

@Ekleog : c'est une indice à propos de quelle question ?

Et vous parliez de quelle erreur ?

Et je me permet d'ajouter face à vos incessantes railleries que je débute mais que la programmation et l'algorithmique sont quand même pour moi une véritable passion. J’essaie d'apprendre comme je peux ce qui me manque, je ne suis pas ignorant par volonté, mais par manque de connaissances ( je pense pas qu'il y est une phrase plus paradoxale que celle-ci ).

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.