Help qcm pour débutant en C - C - Programmation
Marsh Posté le 27-08-2003 à 23:42:49
tu veux qu'on commente la pertinence de tes questions
<br>Quelles sont les deux manières de passer des paramètres à une fonction ?<br>
<INPUT TYPE="checkbox" NAME="quest1" VALUE="rep1"> Par bibliothèque (via un fichier .h) <BR>
<INPUT TYPE="checkbox" NAME="quest1" VALUE="rep2"> Par adresse (via un pointeur)<BR>
<INPUT TYPE="checkbox" NAME="quest1" VALUE="rep3"> Par valeur (via le nom d'une variable)<BR>
3 en C, il n'existe qu'une seule manière, par valeur
ce qui n'a rien à voir avec le nom d'une variable et une adresse n'implique pas un pointeur. très maladroit
<br>Que contient un pointeur ?<br>
<INPUT TYPE="radio" NAME="quest2" VALUE="rep4"> L'adresse du premier octet d'une variable
<INPUT TYPE="radio" NAME="quest2" VALUE="rep5"> Une valeur comprise entre 0 et 1024
<INPUT TYPE="radio" NAME="quest2" VALUE="rep6"> Une copie de la valeur d'une variable
1 mais le C ne parle jamais d'octet, mais de byte au sens "plus petite unité adressable". toute variable C fais au moins 1, avec sizeof(char) == 1 (sans unité)
<br>Quels sont les types de variables adressables de la même manière que les pointeurs ?<br>
<INPUT TYPE="checkbox" NAME="quest4" VALUE="rep13"> Les entiers long non signés <BR>
<INPUT TYPE="checkbox" NAME="quest4" VALUE="rep14"> Les listes chaînées<BR>
<INPUT TYPE="checkbox" NAME="quest4" VALUE="rep15"> Les tableaux<BR>
<INPUT TYPE="checkbox" NAME="quest4" VALUE="rep16"> Les chaines de caractères<BR>
???? toute variable a une adresse.
<br>Quel est la valeur d'un pointeur après sa déclaration mais avant son affectation ?<br>
<INPUT TYPE="radio" NAME="quest5" VALUE="rep17"> 0
<INPUT TYPE="radio" NAME="quest5" VALUE="rep18"> Indéfini
<INPUT TYPE="radio" NAME="quest5" VALUE="rep19"> 1
<INPUT TYPE="radio" NAME="quest5" VALUE="rep20"> La première adresse libre
2
et en C, NULL n'est pas défini comme étant 0
<br>Quelles opérations ne sont pas autorisées sur les pointeurs ?<br>
<INPUT TYPE="radio" NAME="quest7" VALUE="rep25"> Aucune <br>
<INPUT TYPE="radio" NAME="quest7" VALUE="rep26"> La multiplication, la division, la soustraction, les décalages <br>
<INPUT TYPE="radio" NAME="quest7" VALUE="rep27"> La multiplication, l'addition, la soustraction, les décalages <br>
<INPUT TYPE="radio" NAME="quest7" VALUE="rep28"> La multiplication, la division, les opérations logiques, les décalages <br>
2 et 4, la soustraction est quelque chose d'hasardeux
<br>Que se passe-t-il si l'on passe un pointeur de cette manière : "fonction_parametre(*y);" ?<br>
<INPUT TYPE="radio" NAME="quest6" VALUE="rep21"> Compilation ok, execution normale <br>
<INPUT TYPE="radio" NAME="quest6" VALUE="rep22"> Compilation ok, execution interrompue ("erreur de segmentation" ) <br>
<INPUT TYPE="radio" NAME="quest6" VALUE="rep23"> Echec de la compilation, pas d'execution possible <br>
<INPUT TYPE="radio" NAME="quest6" VALUE="rep24"> Echec de la compilation, execution normale <br>
<br>
dépend du prototype, on ne peut pas répondre
Marsh Posté le 27-08-2003 à 23:43:59
Tu ferais bien de créer un topic HTML, parceque là, il y en a besoin
Marsh Posté le 27-08-2003 à 23:44:36
<br>Quelle bibliothèque en C permet l'allocation dynamique de la mémoire ?<br>
<INPUT TYPE="radio" NAME="quest8" VALUE="rep29"> Aucune <br>
<INPUT TYPE="radio" NAME="quest8" VALUE="rep30"> La bibliothèque alloc.h <br>
<INPUT TYPE="radio" NAME="quest8" VALUE="rep31"> La bibliothèque stdio.h <br>
<INPUT TYPE="radio" NAME="quest8" VALUE="rep32"> La bibliothèque malloc.h <br>
<br>
aucune
<stdlib.h> est le seul entête à être défini par le standard
<br>Retrouver plusieurs des bonnes manières de passer des paramètres en C :<br>
<INPUT TYPE="checkbox" NAME="quest9" VALUE="rep33"> fonction_parametre(&x,y); <BR>
<INPUT TYPE="checkbox" NAME="quest9" VALUE="rep34"> fonction_parametre(**x,&*y) <br>
<INPUT TYPE="checkbox" NAME="quest9" VALUE="rep35"> fonction_parametre(x,&*y)<BR>
<br>
???
<br>D'où peut on appeler une fonction en C?<br>
<INPUT TYPE="checkbox" NAME="quest10" VALUE="rep36"> Depuis le main() <BR>
<INPUT TYPE="checkbox" NAME="quest10" VALUE="rep37"> Depuis la définition des prototypes <br>
<INPUT TYPE="checkbox" NAME="quest10" VALUE="rep38"> Depuis une autre fonction<BR>
<INPUT TYPE="checkbox" NAME="quest10" VALUE="rep39"> Depuis le disque dur<BR>
??? 3 implique 1
Marsh Posté le 28-08-2003 à 00:00:16
kadreg a écrit : Tu ferais bien de créer un topic HTML, parceque là, il y en a besoin |
suis n00b fo m'excuser, ty fait comment pour mettre le code html en html dans le forum
Marsh Posté le 28-08-2003 à 00:01:38
jeoff a écrit : |
t'as quel niveau/expérience en C sinon?
Marsh Posté le 28-08-2003 à 00:04:04
un an d'iut mais perso j'appelle pas ca de l'xp dans le codage
en fait les prof veulent pour le debut d'année qu'on leur fournisse un bout de cour pour les premiere année
seulement j'ai pas dit que javait tout compris de a à z
niveau estimé à débutant ++
Marsh Posté le 28-08-2003 à 00:06:21
t'en vas pas apprendre des fausses idées aux autres alors
Marsh Posté le 28-08-2003 à 00:17:36
Taz a écrit : tu veux qu'on commente la pertinence de tes questions |
Merci pour ta contribution
PS on fait comment pour integrer tout ca en html parceque le source c illisible
Marsh Posté le 28-08-2003 à 00:19:15
Taz a écrit : t'en vas pas apprendre des fausses idées aux autres alors |
loin de moi cette idée
c pour ca que j'essaye de faire valider tout ce que je donne comme info
Marsh Posté le 28-08-2003 à 00:30:14
Taz a écrit : Quelle bibliothèque en C permet l'allocation dynamique de la mémoire |
Marsh Posté le 28-08-2003 à 07:19:00
Citation : vi mais on peut bien passer un parametre par adresse |
il n'y a qu'un mode: par valeur
Citation : ok je mettrait "byte", le truc de l'unité indivisible c une bonne remarque |
ce n'est pas une bonne remarque, c'est une propriété canonique
Citation : enfin je veut dire dans lesquels on peut se balader de "case en case" la question est vraiment mal posée je reconnais, jvais les embrouiller ces pauvres premiere année |
ben partout. tu peux de déplacer byte par byte à l'intérieur d'un int. je changerais de question si j'étais toi
Citation : je preciserai Indéfini(NULL) bonne remarque |
c'est la valeur de NULL qui est laissé à l'implémentation, mais un pointeur, comme tout autre variable a une valeur indéfini à sa création
Citation : oui mais authorisée donc seule la 4 sera considerée comme correcte dans le qcm |
alors ne dis pas autorisée, mais légale
Citation : Ben nous on nous a appris avec malloc.h et g retrouvé ca dans un cours de C sur le net aussi donc c peut etre pas du C ANSI mais ca a l'air repandu, a ton avis jmet quoi comme réponse sachant que nos profs vont leur parler de malloc.h ??? |
tu les envoies chier et tu mets <stdlib.h>
Citation : Depuis une autre fonction que le main() |
c'est bête comme question, main est une fonction comme les autres. aucune raison de la distinguer des autres
Marsh Posté le 28-08-2003 à 07:23:47
en C99
Citation : The standard headers are: |
(pareil en C ANSI, sauf qu'il y a quelques ajouts en C99)
Marsh Posté le 28-08-2003 à 11:06:02
Citation : NULL n'est pas défini comme étant 0 |
Parfois si. C'est pour cela que des fois un fois NULL casté en quelque chose ...
Pour ton QCM, il faut voir 2 choses :
- la réponse strictement exacte
- la réponse attendue par le professeur
La 2° est la bonne réponse ...
La difficulté consiste à deviner ce qu'a voulu dire l'auteur, et ce qu'il attend comme réponse. En l'occurence, je ne pense pas qu'il sous entend que l'élève connaisse la norme, donc, AMHA, faut faire profil bas et répondre certaines choses, même si on peut à juste titre polémiquer (sur a peu près toutes les fonctions d'ailleurs).
Marsh Posté le 28-08-2003 à 11:32:23
HelloWorld a écrit :
|
tout à fait d'accord, étant donné que ce qcm s'adresse à des débutants, je pensse qu'une bonne partie des réponses doivent être simplifiée pour permettre à la majorité de comprendre les principes de base de la programmation, maintenant il est clair que si toutes les références ne sont pas standard, je précise que ce sont celle que les profs nous apprennent pour débuter et ainsi avoir les bases.
Marsh Posté le 28-08-2003 à 11:43:08
Taz a écrit : il n'y a qu'un mode: par valeur]tu peut dévelloper (un pointeur c bien un passage de paramètre par adresse nan ??? ou alors on a pas la meme idée du mot valeur, ca signifie quoi dans ton cas parceque la c total
alors ne dis pas autorisée, mais légalej'en prends note merci
c'est bête comme question, main est une fonction comme les autres. aucune raison de la distinguer des autres |
Merci
Marsh Posté le 28-08-2003 à 11:44:15
HelloWorld a écrit :
|
tu penses bien que quand je parle de définition je parle de la norme
mais dans les implémentations, il doit bien exister une architecture avec des plages d'adresses pieges, ou NULL serait différent de 0
Marsh Posté le 28-08-2003 à 13:03:18
jeoff a écrit (à propos de <<il n'y a qu'un mode>>, Taz) : |
Taz a raison et on a déjà palabré 10.000 fois sur la question. Le C ne passe jamais d'arguments par adresse, toujours par valeur, aussi paradoxal que ça puisse sembler, de prime abord, au pays des pointeurs.
Pourquoi?
L'expression passage (d'argu à une fonction) par adresse a un sens précis: au moment de l'appel, la fonction ne clone pas la variable-argument dans un nouvel espace mémoire (nouvelle adresse), elle utilise son adresse telle quelle et bosse directement dedans et avec.
Le C++ peut procéder ainsi grâce aux références (type& ), mais le C ne procède jamais ainsi: tous les arguments sont passés par valeur, c'est-à-dire clonés dans une nouvelle adresse au moment de l'appel -- y compris si l'argument en question se trouve être un pointeur, aspect tout à fait contingent.
En résumé: le fait qu'un pointeur représente une adresse ne fait pas de lui un argument passé par adresse.
Marsh Posté le 28-08-2003 à 14:05:46
Citation : Taz a raison et on a déjà palabré 10.000 fois sur la question. Le C ne passe jamais d'arguments par adresse, toujours par valeur, aussi paradoxal que ça puisse sembler, de prime abord, au pays des pointeurs. |
ok vu comme ca je comprends mieux mais comprenez bien que si je met dans le qcm que l'on passe tout les arguments par valeur, les pauvres premières années, comme ils n'auront pas ces éléments de réponses, ils ne vont pas comprendre a quoi servent les pointeurs.
Disons que là on atteint les limites entre la théorie du langage et son "fonctionnement technique" dans la ram.
Marsh Posté le 28-08-2003 à 14:08:45
moi j'ai fais de cours de C pour débutant, et j'ai bien insisté la dessus et sur le fait qu'un pointeur vers type, est un type à part entière, et ils ont bien mieux compris
Marsh Posté le 28-08-2003 à 14:26:28
jeoff a écrit : |
Si tu fais autrement ca va les embrouiller encore plus, car ils risquent d'avoir une mauvaise approche de ce qu'est un pointeur...
Marsh Posté le 28-08-2003 à 14:41:05
bon alors jfait comment la, j'adopte la ligne de conduite iut avec approche théorique où bien la ligne de conduite hfr plus technique.
Sachant que mon boulot doit etre un complement de cours donc avant ils auront eut l'enseignement "iut avec approche théorique".
Sinon vous avez des liens pour vos cours techniques ???
Les 2-3 que j'ai sont orientés théorique (ce sont ceux du rezo de l'iut)
Marsh Posté le 28-08-2003 à 15:38:23
la meilleur facon dont jai decouver comment le c fonctionnait exactement (passage par valeur etc,...) c qd j'ai decompile un de mes prog en C
Marsh Posté le 28-08-2003 à 15:43:54
euh quand tu décompile tu tombe sur de l'asm et je lis très mal l'asm
d'ailleurs je cherche un bouquin d'asm (on en trouve plus en librairie chez moi sniff, jsuis trop jeune)
Marsh Posté le 28-08-2003 à 18:37:03
jeoff a écrit : bon alors jfait comment la, j'adopte la ligne de conduite iut avec approche théorique où bien la ligne de conduite hfr plus technique. |
La seule ligne de conduite c'est de pas dire de conneries. Ce qu'on t'a expliqué plus haut n'est pas de l'enculage de mouche. Le sens de "passage d'arguments par adresse" tel que nous l'avons décrit est parfaitement établi dans les usages, y compris chez les moins techniciens d'entre nous. Conserver le sens usuel d'une expression consacrée et empêcher des confusions graves dans l'esprit de tes "apprenants", c'est pas une histoire de théorie ou de technicité, moi j'appelle ça purement du pragmatisme.
Marsh Posté le 28-08-2003 à 19:23:04
EDIT orthographe (tu me rapelle un certain Mr Prof sur ppc Acut )
Pas la peine de s'enerver, jsuis le cul entre deux chaises avec ce que je voit ici et ce que j'ai appris cette année alors voilà pourquoi j'hésite.
Encore merci pour vos remarques et désolé si je fait tache.
Je vais tâcher de trouver une url qui pourra répondre à toutes mes questions.
Marsh Posté le 28-08-2003 à 19:33:42
jeoff a écrit : Pas la peine de s'enerver, jsuis le cul entre deux chaises avec ce que je voit ici et ce que j'ai appris cette année alors voilà pourquoi j'hésite. |
* Je m'énerve pas je t'esplique.
* Sinon pour les circonflexes c'est l'inverse (je fais tache / je vais tâcher). Quitte à faire un effort sur l'accentuation, autant le faire au bon endroit...
Désolé.
Je sors.
(Il sort.)
Marsh Posté le 29-08-2003 à 08:57:08
bordel taz mais les profs doivent pleurer quand tu es dans leurs cours
Marsh Posté le 29-08-2003 à 11:42:10
Malheureusement, on a très souvent pas besoin d'être calé pour s'appercevoir qu'un prof dit des conneries ...
Marsh Posté le 29-08-2003 à 12:09:09
HelloWorld a écrit : Malheureusement, on a très souvent pas besoin d'être calé pour s'appercevoir qu'un prof dit des conneries ... |
vous imaginez ma tête quand un prof me sort: "je comprends ton programme devrait pas compiler, tu castes pas le retour de malloc" alors moi je fais le benêt qui sait rien
faire comprendre à un prof l'étendu de son ignorance n'est pas la meilleur chose à faire, je le sais par expérience
Marsh Posté le 29-08-2003 à 12:11:17
La bibliothèque stdlib.h
et puis ton questionnaire, c'est un QCM, alors "y a pas de retrouver les 2 reponses" ou alors, tu ferais bien de mettre autant de réponse que de choix (pour les op sur les pointeurs)
Marsh Posté le 29-08-2003 à 14:27:49
Citation : faire comprendre à un prof l'étendu de son ignorance n'est pas la meilleur chose à faire, je le sais par expérience |
C'est assez compréhensible. Un prof accepte difficilement de se faire enseigner quelque chose par un élève, surtout dans sa matière. Y'a quelques exceptions (au moins une).
Je conseille moi aussi à tous les jeunes étudiant de s'écraser, et venir pleurer ici. Au pire aller voir le prof à la fin en tête à tête, mais jamais devant la classe (ça me parraît compréhensible).
Mais là ou j'ai le plus constaté ce phénomène de "l'élève ne peut pas avoir raison" c'est lors d'une soutenance devant un jury ou chaque prof veut montrer aux autres qu'il est une bête dans son domaine et toi là au milieu tu sers à les faire mousser.
Marsh Posté le 29-08-2003 à 16:35:35
Bon j'ai enfin réussi a remettre la main sur un cours javascript pour comptabiliser le score de l'etudiant a l'issue du qcm
Merci pour votre aide à tous (mention spéciale a Taz et Acut)
Je risque de fréquenter plus souvent la partie prog des forums hfr pour l'année (scolaire) à venir, j'espère que au cours de celle-ci je pourrai aider d'autres personnes, si progrès de ma part il y a.
A bientot.
Marsh Posté le 29-08-2003 à 23:19:00
HelloWorld a écrit : [quote] |
En effet, c'est plutôt moisi ça
Marsh Posté le 27-08-2003 à 23:02:00
voila je crée un QCM pour verifier les connaissances des premières année en IUT info sur le thème :
LES PASSAGES DE PARAMETRES
si vous pouviez y jetez un coup d'oeil pour vérifier qu'il n'y ait pas de fautes graves de ma part ce serait sympa
Merci
EDIT 3 nouvelles questions pour remplacer les questions bancales/mal venues.
Quelles sont les deux manières de passer des paramètres à une fonction ?
Par bibliothèque
Par adresse
Par valeur
Que contient un pointeur ?
L'adresse du premier "byte" d'une variable
Une valeur comprise entre 0 et 1024
Une copie de la valeur d'une variable
Quelles sont les caractéristiques du passage de paramètres par pointeur ?
Programmation plus élégante, plus professionnelle
Aucun
Syntaxe simple et uniforme
Solution plus simple de certains problèmes de programmation
Communication et échange de données entre fonctions
Possibilité d'allocation dynamique de la mémoire
Quel est la valeur d'un pointeur après sa déclaration mais avant son affectation ?
0
Indéfini
1
La première adresse libre
Quelles opérations ne sont pas légales sur les pointeurs ?
Aucune
La multiplication, la division, la soustraction, les décalages
La multiplication, l'addition, la soustraction, les décalages
La multiplication, la division, les opérations logiques, les décalages
Quelle bibliothèque définie par le standard permet en C l'allocation dynamique de la mémoire ?
Aucune
La bibliothèque alloc.h
La bibliothèque stdlib.h
La bibliothèque malloc.h
D'où peut on appeler une fonction en C?
Depuis un tableau à double entrées
Depuis la mémoire
Depuis la définition des prototypes
Depuis une fonction (main() ou autre)
Depuis le disque dur
Retrouver 2 manières d'exprimer la même chose en C sachant que l'initialisation de la variable est : int tab[10];
tab
&tab[0]
&&tab
Pourquoi peut-il être nécessaire de fournir des paramètres à une fonction?
Pour lui fournir des données dont la portée se limite à une autre partie du code
Pour accélerer son traitement
Pour renvoyer un résultat
Pour limiter l'occupation de la mémoire
Pourquoi est-il nécessaire d'utiliser des fonctions ?
Pour accélerer l'exécution
Pour une réutilisation du code
Pour alléger la mémoire (portée des variables)
Pour rendre le code plus lisible
Message édité par jeoff le 29-08-2003 à 16:11:04