Terme inconnu

Discutez d'informatique ici !
mydoudouitsk
Membre Relatif
Messages: 237
Enregistré le: 02 Jan 2008, 14:23

terme inconnu

par mydoudouitsk » 03 Déc 2010, 19:38

bonsoir, je viens de voir le corrigé d'un programme "mal fait" mais je ne comprends pas la correction: voici le programme sans la correction:

U=[0];
for k=1:5 do
U(k)=U(k-1)^2+1+k;
end
U

la correction: pour k = 1, U(k ;) 1) donne U(0), qui n'existe pas, donc k doit varier de 2 à 5, ou alors on
doit modier la ligne 3 et dénir U(k + 1) à partir de U(k) comme dans le programme 1.

Je ne comprends pas pourquoi U(0) n'existe pas...



Sylviel
Membre Transcendant
Messages: 6466
Enregistré le: 20 Jan 2010, 12:00

par Sylviel » 04 Déc 2010, 17:32

C'est une question de définition du pseudolangage.
Visiblement il considère que le premier indice de ton tableau est 1.
C'est une abherration car dans tous les langages informatique qui se respecte le premier indice d'un tableau est 0 et non 1...

Pour forcer la main du correcteur tu devrais écrire
U(0)=0;
au lieu de
U=[0]

Eventuellement tu peux spécifier en amont la nature de U genre
tableau U de longueur 6 (avec la syntaxe du prof)
U(0)=0;
Merci de répondre aux questions posées, ce sont des indications pour vous aider à résoudre vos exercices.

Sve@r

par Sve@r » 04 Déc 2010, 19:30

Sylviel a écrit:C'est une aberration car dans tous les langages informatique qui se respecte le premier indice d'un tableau est 0 et non 1...

C'est vrai que dans les langages actuels, dont la majorité est issue des concepts mis en place en C ou en Pascal, les tableaux [n] s'indicent de 0 à n-1. Mais est-ce vraiment une bonne chose ?
Question avantages par rapport à un tableau indicé de 1 à n, je ne vois pas trop qu'est-ce que ça change. Mais question inconvénients, j'en vois déjà deux:
- quand on affiche les éléments à la façon humaine (l'élément n° 1 est ...), il faut soit indicer i de 0 à n-1 et afficher i+1, soit indicer i de 1 à n et traiter l'élément [i-1]
- quand on parcours un tableau de la fin vers le début, il faut bien spécifier le début à n-1 style (for i=n-1; i >= 0; i--). De plus, i ne peut pas être mis en unsigned car sinon il passe à 0 puis, quand il se décrémente, repasse à la valeur maximale de son type et on a une jolie boucle qui part en torche infinie. Ou alors on écrit for (i=n; i > 0; i--) et on travaille sur l'élément i-1.

Ensuite, le basic des années 80 fait varier ses indices de tableaux de 1 à n. Ok, le basic des années 80 c'est pas une référence... mais le COBOL, langage lourd mais efficace (encore utilisé dans les banques aujourd'hui), fait lui-aussi varier ses indices de 1 à n.

Donc voilà. Travailler de 0 à n-1 c'est une habitude à prendre qui se prend très vite mais... est-ce vraiment ce qu'il y a de mieux ???

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 04 Déc 2010, 21:02

salut,

pour le 0, ca prend tout son sens en C. Apres, pour les langages + HL, c'est kiffe kiffe. J'ai envie de dire, commencer à 1 c'est qd même mieux, parce que bon "le premier element c'est l'indice 0..."

apres ya tous les ptites optimisations compilo pourrav pour les pauvres du bas niveau, mais c'est aussi à prendre en compte.

Bref, autant rester à 0, pour pas avoir les problemes de mapping en passant dun langage à l'autre.
la vie est une fête :)

Sylviel
Membre Transcendant
Messages: 6466
Enregistré le: 20 Jan 2010, 12:00

par Sylviel » 04 Déc 2010, 23:01

A ma connaissance le COBOL est quand même en train de passer dans les greniers... Je ne sais pas dans quelle banque ils l'utilisent, toutes celles où je connais du monde sont en C/C++ pour la production, à l'execption de la BNP qui est en ADA.

Je ne sais pas si c'est mieux, mais de fait dans la quasi totalité des langages on fonctionne ainsi donc reprocher à une élève d'avoir initialiser le tableau avec l'indice 0 me semble pour le moins surprenant.

L'avantage pratique, pour moi, d'aller de 0 à n-1 est d'écrire des boucles for (i=0;i
Merci de répondre aux questions posées, ce sont des indications pour vous aider à résoudre vos exercices.

Sve@r

par Sve@r » 04 Déc 2010, 23:49

Sylviel a écrit:A ma connaissance le COBOL est quand même en train de passer dans les greniers... Je ne sais pas dans quelle banque ils l'utilisent, toutes celles où je connais du monde sont en C/C++ pour la production, à l'execption de la BNP qui est en ADA.

En 2005, le Gartner Group estimait que 75% des données du monde des affaires étaient traitées par des programmes en COBOL et que 15% des nouveaux programmes développés le seront dans ce langage.
https://secure.wikimedia.org/wikipedia/fr/wiki/COBOL

De plus, en réfléchissant, c'est assez étonnant que les banques se mettent au C avec les problèmes qu'on connait sur l'imprécision des nombres décimaux quand on les écrit en binaire à virgule flottante (attention, c'est pas lié au C mais à la façon de coder les nombres décimaux et on retrouve les mêmes problèmes en C++, en php, en Perl ou en Python). Au-moins, le COBOL utilise un digit par chiffre et peut donc faire des calculs plus longs, certes, mais rigoureusement exacts. C'est vrai, comparé au C qui file comme une fusée, le COBOL ressemble un peu à la grosse locomotive vapeur qui traversait l'Ouest. Mais la grosse locomotive vapeur peut tirer aussi beaucoup de wagons...

Sylviel a écrit:Je ne sais pas si c'est mieux, mais de fait dans la quasi totalité des langages on fonctionne ainsi donc reprocher à une élève d'avoir initialiser le tableau avec l'indice 0 me semble pour le moins surprenant.

Ok, d'un point de vue informatique je suis d'accord avec toi (on voit quand-même plus de langages où les tableaux commencent à 0). Mais d'un point de vue philosophique, ça peut encore se discuter. En effet, faut pas oublier que les chiffres ont d'abord été inventés pour énumérer ce qui existe et le zéro, élément permettant de symboliser "ce qui n'existe pas" a mis énormément de temps à apparaitre. Et donc on peut penser que le prof a préféré accorder la notion informatique avec la notion mathématique qui sous-tend les nombres entiers, à savoir "le premier élément est indicé à 1" ce qui est, d'un point de vue humain, tout à fait logique...

Sylviel a écrit:L'avantage pratique, pour moi, d'aller de 0 à n-1 est d'écrire des boucles for (i=0;i<n,i++) (la quasi totalité des boucles en fait) sans avoir à écrire un inférieur ou égal qui peux être chiant à taper. Après c'est juste une question d'habitude.

Tiens, exact, j'y avais pas pensé. Avec un tableau de 1 à n, on doit boucler tant que i <= n alors qu'avec un tableau de 0 à n-1 on doit boucler tant que i<n. Et l'inférieur strict est plus rapide que le inférieur ou égal :we:

mydoudouitsk
Membre Relatif
Messages: 237
Enregistré le: 02 Jan 2008, 14:23

par mydoudouitsk » 05 Déc 2010, 14:07

Sylviel a écrit:C'est une question de définition du pseudolangage.
Visiblement il considère que le premier indice de ton tableau est 1.


Ok mais comment sait on que le premier indice est 1 et non 0?

Sylviel
Membre Transcendant
Messages: 6466
Enregistré le: 20 Jan 2010, 12:00

par Sylviel » 05 Déc 2010, 14:33

C'est une convention de langage.

@Sve@r : En banque je connais les gens qui bossent dans les maths financières où la modélisation probabilistique est majoritaire (donc la limite de précision on s'en ...) et la vitesse d'execution primordiale. Je n'ai même pas pensé que les banques avait d'autres logiciels :D. (j'suis matheux moi, pas informaticien ;-)
Merci de répondre aux questions posées, ce sont des indications pour vous aider à résoudre vos exercices.

Sve@r

par Sve@r » 05 Déc 2010, 16:34

Sylviel a écrit:@Sve@r : En banque je connais les gens qui bossent dans les maths financières où la modélisation probabilistique est majoritaire (donc la limite de précision on s'en ...) et la vitesse d'execution primordiale. Je n'ai même pas pensé que les banques avait d'autres logiciels :D.

Oui je comprends. Effectivement dans ton cas le C est ce qu'il y a de mieux. Mais moi, je voyais plutôt la banque de M. Toutlemonde qui reçoit son relevé mensuel. Et s'il voit
- dépense truc 2.25
- dépense chose 3.35
- total du mois 5.61
Là, il risque de hurler (sauf s'il voit "total du mois 5.59"...)

Sylviel a écrit: (j'suis matheux moi, pas informaticien ;-)

En fait, c'est lié à la conversion des nombres en binaire. Pour convertir un nombre entier, on le divise par 2 et on prend le reste. Mais la partie décimale, c'est l'inverse: on multiplie par 2 et on prend le chiffre avant la virgule
Exemple: 0.625
0.625 x 2 = 1.25 => on garde 1 et on laisse 0.25
0.25 x 2 = 0.5 => on garde 0 et on laisse 0.5
0.5 x 2 = 1.0 => on garde 1 et on s'arrête ici car décimal à 0 ce qui donne 0.625 (10)=0.101(2)

Mais parfois, ça ne s'arrête jamais.
Exemple 0.13
0.13 x 2 = 0.26
0.26 x 2 = 0.52
0.52 x 2 = 1.04
0.04 x 2 = 0.08
0.08 x 2 = 0.16
0.16 x 2 = 0.32
0.32 x 2 = 0.64
0.64 x 2 = 1.28
0.28 x 2 = 0.56
0.56 x 2 = 1.12
0.12 x 2 = 0.24
0.24 x 2 = 0.48
0.48 x 2 = 0.96
0.96 x 2 = 1.92
0.92 x 2 = 1.84
0.84 x 2 = 1.68
0.68 x 2 = 1.36
0.36 x 2 = 0.72
0.72 x 2 = 1.44
0.44 x 2 = 0.88
0.88 x 2 = 1.76
0.76 x 2 = 1.52
0.52 x 2 = 1.04 => cycle infini => 0.13 se code 0.001 0000 1010 0011 1101 0111 puis ça recommence [0000 1010 0011 1101 0111] [0000 1010 0011 1101 0111]... à l'infini.

Et donc quand on retranscris le nombre en décimal, on peut tomber sur des valeurs comme 0.1300000001 ou 0.129999999 ce qui pose ensuite des problèmes lorsque la précision est primordiale (comme les calculs financiers)

C'est pour ça que le COBOL a eu tant de succès dans les banques car dans ce langage on spécifie une position par chiffre => 0.13 se codera avec 3 digits (PIC 9V99) et les calculs se font digit par digit, exactement comme au primaire quand on apprend à calculer.

Maintenant, il existe des librairies de calcul dédiées à ce problème. Elles gèrent alors les décimaux comme le COBOL, avec un digit par chiffre...

mydoudouitsk
Membre Relatif
Messages: 237
Enregistré le: 02 Jan 2008, 14:23

par mydoudouitsk » 05 Déc 2010, 20:51

Sylviel a écrit:C'est une convention de langage.


Quand tu dis ça c'est que c'est admis ou c'est précisé dans le programme? parce que si ce n'est pas précisé comment c'est on sans la correction que justement ça ne commence pas par 0?

Sylviel
Membre Transcendant
Messages: 6466
Enregistré le: 20 Jan 2010, 12:00

par Sylviel » 05 Déc 2010, 21:07

Ben étant donné que tu écris ça en pseudo langage je pense que tu peux l'imposer, comme je te l'ai dit plus haut, en écrivant : u(0)=0. Dans un vrai langage tu n'as pas le choix, ça dépend du langage...
Merci de répondre aux questions posées, ce sont des indications pour vous aider à résoudre vos exercices.

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite