Questions d'informatique pour un concours
Bonjour, j'aurais quelques questions à vous poser à propos d'un concours que je dois passer.
D'abord, je voudrais savoir si quelqu'un peut m'expliquer ce qu'est un type ordinal ?
Puis, je sais que ça se rapporte à des type de données telle que chaîne de caractères, réel, énuméré, enregistrement mais lequel est du type ordinal ?
Question à propos des compilateurs : lesquelles sont vrais ?
a) Un compilateur permet de réduire la taille d'un programme et ainsi d'optimiser la place sur le disque dur
b) Un compilateur peut permettre de produire des programmes pour un ordinateur différent de celui sur lequel il s'éxécute
c) Le résultat issu d'un compilateur n'est en général pas directement exécutable
a mon avis, est vrai seulement b)
en fait, je me demande si c) n'est pas aussi vrai, car je sais que certains compilateur comme celui de visual basic, génère une entension en .exe après compilation. En cherchant sur internet, j'ai vu que cela s'appelait l'éditions de liens quand un .exe est généré, donc que cela ne ferait pas partie du terme compilation.
Donc au final, je ne sais pas si la véritable définition d'un compilateur n'est pas seulement de produire un programme en langage machine ou encore assembleur.
Soit un entier a codé sur 32 bits en représentation non signée ; on suppose que l'on éxecute le programme suivant :
a <- 1
for i = 1 to 16 do
a <- a*4
done
print a
Que va afficher ce programme ?
a) toujours 0, quel que soit le langage
b) toujours 1, quel que soit le langage
c) toujours 4249967296, quel que soit le langage
d) ce programme va générer un dépassement de capacité pour a qui sera ou ne sera pas détecté en fonction du langage utilisé
e) aucune des 4 réponses proposés
A mon avis, ce sera c) car 2^32 = 4249967296, donc a pourra prendre les valeurs comprises entre 0 et 2^32 - 1 soit 4249967295, mais je me demande si quand il y a dépassement, on ne recommence pas à compter, ce qui donnera 0 si on ajoute 4249967295 à 1 si a est codé sur 32 bits en non signé, cela est possible ?
Sur une machine disposant d'entiers signés et d'un processeur 32 bits, que va donner la multiplication de 123456789*123456789 :
a) 15241578750190521
b) -1757895751
c) 2537071545
d) cela va générer une erreur
e) cela dépend du langage employé pour effectuer l'opération
A mon avis, cela ne dépend pas du type de processeur car sous un intel 32 bits et avec la calculatrice windows, on obtient a) alors je dirais réponse a) est je raison ?
Merci beaucoup
PS : désolé, j'ai posté 2 fois
Re: Questions d'informatique pour un concours
Bonjour,
Citation:
Envoyé par jeje00
Question à propos des compilateurs : lesquelles sont vrais ?
a) Un compilateur permet de réduire la taille d'un programme et ainsi d'optimiser la place sur le disque dur
b) Un compilateur peut permettre de produire des programmes pour un ordinateur différent de celui sur lequel il s'éxécute
c) Le résultat issu d'un compilateur n'est en général pas directement exécutable
Réponse : merci de définir ce qu'on entends par compilateur.
Globalement, un compilateur est un ensemble d'outils permettant de passer d'un langage source à un langage cible.
Considérant ceci :
a est fausse, bien évidemment.
b est vraie, car il est précisé "un" compilateur, et non pas "les compilateurs"
c : que veut dire "en général" ? Strictement plus de 50 % du temps ?
Il faut savoir qu'aujourd'hui, la plupart de ce que les développeurs appellent compilateur intègrent un éditeur de lien, qui permet donc de produire des exécutables "directement". En revanche, il est tout à fait possible de faire de la compilation séparée, et donc de recourir explicitement à un éditeur de liens une fois les sources compilées.
Ensuite, qu'appelle-t-on "directement exécutable" ?
Si on prends un langage comme le Java, le produit de la compilation est un programme exploitable par une machine virtuelle. Dans ce cas précis, on peut considérer que le programme n'est pas directement exploitable.
Sauf que si on code en Java, on a pensé à installer la machine virtuelle sur la machine d'exploitation, et le programme est donc directement exploitable ...
Citation:
Envoyé par jeje00
Soit un entier a codé sur 32 bits en représentation non signée ; on suppose que l'on éxecute le programme suivant :
a <- 1
for i = 1 to 16 do
a <- a*4
done
print a
Que va afficher ce programme ?
a) toujours 0, quel que soit le langage
b) toujours 1, quel que soit le langage
c) toujours 4249967296, quel que soit le langage
d) ce programme va générer un dépassement de capacité pour a qui sera ou ne sera pas détecté en fonction du langage utilisé
e) aucune des 4 réponses proposés
Les processeurs disposent d'un flag de débordement de capacité. Il est donc possible d'écrire un langage utilisant ce flag et prévenant du débordement de capacité.
je me demande même si cela n'est pas possible en assembleur. Pour le savoir, il faut aller poser la question sur le forum consacré à ce langage.
Citation:
Envoyé par jeje00
Sur une machine disposant d'entiers signés et d'un processeur 32 bits, que va donner la multiplication de 123456789*123456789 :
a) 15241578750190521
b) -1757895751
c) 2537071545
d) cela va générer une erreur
e) cela dépend du langage employé pour effectuer l'opération
A mon avis, cela ne dépend pas du type de processeur car sous un intel 32 bits et avec la calculatrice windows, on obtient a) alors je dirais réponse a) est je raison ?
Non.
Cela dépend de la gestion de ce qui se passe lors d'une multiplication qui ne tient plus sur un seul registre.
Voici ce que font la plupart des langages : chaque nombre est codé sur un registre. Afin d'éviter les débordements, le résultat de la multiplication de ces deux entiers est sur deux registres (donc sur 64 bits dans le cas présent).
En revanche, rien ne t'interdit de créer un langage dont le résultat d'une multiplication de deux entiers 32 bits tient sur un registre 32bits. Dans ce cas, le nombre maximal est 2^32 -1, soit 4294967296, qui est bien inférieur à 15241578750190521.
Donc à mon sens la réponse est e.