Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/07/2016, à 11:05

carambar

Tableaux à 2 dimensions en javascript

Salut,
Voilà l'énoncé :
-Calculs sur un tableau
«  Créer une fonction qui prend en paramètre un tableau (de 1 ou plusieurs cases) et qui renvoie la  somme des nombres contenus dans ces cases.
Si l’une de ces cases n’est pas un nombre elle doit renvoyer null." 
-Calculs sur un tableau à deux dimensions
Créer une fonction qui prend en paramètre un tableau à deux dimensions et qui renvoie la somme  de tous les nombres contenus dans ce tableau.
Si l’une de ces cases n’est pas un nombre ou si le tableau ne comporte qu’une dimension,elle doit renvoyer null.
   
 
-Affichage du tableau
Créer une fonction qui prend en paramètre un tableau et affiche son contenu de façon lisible dans
la console. Si le tableau est à deux dimensions, on doit afficher le    contenu de ses cases sous forme  de carré. Par exemple : 
5 10 3 9
0 56 710 
5 99 1 3
-Tri sur un tableau
Créer une fonction qui prend en paramètre un tableau (de 1 ou plusieurs cases) et qui renvoie un nouveau tableau dont les cases sont triées dans l’ordre 
Si l’une de ces cases n’est pas un nombre, elle doit renvoyer null. »
Tous ce que j'ai réussi à pondre c'est:

function Somme (tab) {
  tmp = 0;
  for (var i = 0; i < tab.length; i++) {
   tmp += tab[i];
  }
  return tmp;
}

var tab1 = [23, 54, 145, 47, 333];
somme1 = Somme(tab1);
alert(somme1);

S'agissant de la première partie, je coince déjà à : «  Si l’une de ces cases n’est pas un nombre elle doit renvoyer null ».
La seule nullité que je constate c'est la mienne !
Après des heures passées dessus, je suis à la limite d'abandonner, chose que je regretterais amèrement.
Quelqu'un serait il en mesure de me pondre ce code avec des commentaires explicatifs ?
N'allez pas imaginer qu'il s'agit de paresse et que je cherche un pigeon, mais je suis au bord de la capitulation.
Pour être complet, je vous explique la situation.
A 50 ans après des années dans les travaux publics en tant que manœuvre, je me retrouve confronté à un double problème de conjoncture économique défavorable et de soucis de santé liés à la pénibilité de mon job.
J'ai donc décidé de me réorienter dans les métiers de l'informatique et ai début juin intégré une formation en ligne, mais je suis entrain de douter sévère, on dit généralement de moi que je suis intelligent je pense même avoir prouvé que je n'étais pas stupide lorsqu'à 23 ans j'ai obtenu ma capacité en droit avec mention (le seul sur 35 étudiants) ou lorsqu'à 15 je réussi un concours d'entrée en école de sous officiers, mais là à 50 ans devant ces tableaux,j'ai l'impression qu'il a plus de vide qu'autre chose dans ce qui me sert de tête.
J'ai bien l'impression que ma demande est double à savoir une aide technique, mais également des encouragements.
Si d'aventure je devais abandonner je ne sais pas comment je le vivrais, mais très mal à n'en pas douter.
Je ne veux pas lâcher l'affaire mais je m'épuise de plus en plus et ma motivation commence à sérieusement s'émousser !
Espérant ne pas vous avoir trop saoulé avec mes états d'âme !
Bonne journée


sudo apt-get remove --purge les cons

Intel® Core™2 Quad CPU Q6600 @ 2.40GHz × 4 ,12.04 (precise) 64 bits.

Hors ligne

#2 Le 20/07/2016, à 18:35

Compte supprimé

Re : Tableaux à 2 dimensions en javascript

Bonjour,
je ne connais pas javascript, mais pour cet exercice, il semble qu'il te faille une commande de test ("Si" souvent "if" en anglais, voire "tant que" : "while") et une instruction qui vérifie que la variable appartienne à un nombre, pas seulement une chaîne ASCII.

Ceci pourra t'aiguiller : Javascript - Les structures conditionnelles
courage.
Cordialement,
L_d_v_c@

#3 Le 20/07/2016, à 19:50

Rufus T. Firefly

Re : Tableaux à 2 dimensions en javascript

Salut,

Si tu cales sur les tableaux, laisse-les reposer et passe à autre chose, provisoirement. Il y a certainement un truc qui t'échappe, mais sur un forum c'est assez difficile de trouver quoi...
Avec les tests conditionnels, il y a aussi de quoi faire.
Par exemple ceci :

pass = prompt ("Entrez votre mot de passe :", "");
if (pass == "cocorico") { // teste si pass est égal à "cocorico"
  alert ("OK, vous êtes connecté");
} else {
  alert ("Mot de passe erroné");
}

Le même, écrit autrement :

pass = prompt ("Entrez votre mot de passe :", "");
if (pass != "cocorico") { // teste si pass n'est pas égal à "cocorico"
  alert ("Mot de passe erroné");
} else {
  alert ("OK, vous êtes connecté");
}

Un truc aussi, c'est de prendre des petits bouts de programme qui fonctionnent, - on en trouve un peu partout dans les sites "pédagogiques" -, puis les analyser ligne à ligne, au début avec un papier et un crayon tout bêtement, c'est-à-dire décrire le plus précisément possible à quoi correspond chaque ligne.

Dernière modification par Rufus T. Firefly (Le 20/07/2016, à 19:55)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#4 Le 21/07/2016, à 08:47

carambar

Re : Tableaux à 2 dimensions en javascript

Salut,

if(isNan("tab[i]")){
	return "null";
}else{
function Somme (tab) {
  tmp = 0;
  for (var i = 0; i < tab.length; i++) {
   tmp += tab[i];
  }
  return tmp;
}}

var tab1 = [23, 54, 145, 47, 333];
somme1 = Somme(tab1);
alert(somme1);

C'est quand même pas aux antipodes ou si ?


sudo apt-get remove --purge les cons

Intel® Core™2 Quad CPU Q6600 @ 2.40GHz × 4 ,12.04 (precise) 64 bits.

Hors ligne

#5 Le 21/07/2016, à 09:25

Rufus T. Firefly

Re : Tableaux à 2 dimensions en javascript

Vire le test pour l'instant (n'oublies pas le } de la fin ) puis modifie la fonction :

function Somme (tab) {
  tmp = 0;
  for (var i = 0; i < tab.length; i++) {
    alert ("compteur i : " + i + ", élément de tab : " + tab[i]);
    tmp += tab[i];
    alert ("compteur i : " + i + ", somme partielle tmp : " + tmp);
  }
  return tmp;
}

Puis tu fais tourner avec un tab1 "pathologique" :

var tab1 = [23, 15, "toto", 47, 333];
somme1 = Somme(tab1);

La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#6 Le 22/07/2016, à 19:35

Rufus T. Firefly

Re : Tableaux à 2 dimensions en javascript

Alors ?
Plus de nouvelles ?
Essaye ça (une autre forme de la même boucle) :

function Somme (tab) {
  tmp = 0;
  i = 0;
  imax = tab.length;
  while (i < imax) {
    alert ("compteur i : " + i + ", élément de tab : " + tab[i]);
    tmp += tab[i];
    alert ("compteur i : " + i + ", somme partielle tmp : " + tmp);
    i++;
  }
  return tmp;
}

Dernière modification par Rufus T. Firefly (Le 22/07/2016, à 19:42)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#7 Le 23/07/2016, à 20:41

soshy

Re : Tableaux à 2 dimensions en javascript

A mon avis tu as plus des problèmes d'algorithme qu'autre chose.

La toute première ligne de ton code

if(isNan("tab[i]")){

Quand la machine va commencer a lire elle va dire :
- if : ok je connais ça fait parti du langage.
- isNan : Erreur je connais pas (la fonction du langage c'est isNaN , les majuscules ça compte.)
- tab : Ca ne fait pas parti du langage et on ne m'a pas dit avant ce que c'était (ben oui, on est sur la première ligne !) => erreur
- i : Ca ne fait pas parti du langage et on ne m'a pas dit avant ce que c'était avant => erreur
(et je met de coté les guillemets qui n'ont pas à être là)

Dans le fond, l'idée derrière cette première ligne n'est pas mauvaise, simplement elle n'a pas à se trouver ici, et c'est typiquement un problème de compréhension de l'algorithmique.

Un langage, c'est un support pour faire de l'algorithmique. Tout comme le Français ou l'Anglais sont un support à tes pensées.
Je pense que tu devrais vraiment regarder ça : https://openclassrooms.com/courses/tout … javascript
En tout cas au moins "Partie 1 - Faire connaissance avec le JavaScript" qui reprend les bases de l'algorithmique appliqué au langage que tu veux pratiquer : le javascript.

Dernière modification par soshy (Le 23/07/2016, à 20:47)

Hors ligne

#8 Le 24/07/2016, à 17:00

carambar

Re : Tableaux à 2 dimensions en javascript

Merci à vous,
Voilà ou j'en suis rendu :

 function Somme (tab){
	  tmp = 0;
	for (var i = 0; i < tab.length; i++){		

		alert(" L'indice N° : " + i + " contient la valeur : " + tab[i]);
			tmp += tab[i];
		alert(" A l'indice N° : " + i + " \n La somme des valeurs des indices est : " + tmp);
	}
			return tmp;
}

var tableau1 = [12,  21, 6548, 1, 2221, 547, 9];
somme1 = Somme(tableau1);
alert(" la somme de toutes les valeurs est : " + somme1);

 function tri(x, y){
	return x - y;
}
var tableau1Trie = tableau1.sort(tri);
alert(" Le tableau trié : " + tableau1Trie);

Je reste coincé concernant la fameuse exigence d'un retour "null" si un item du tableau ne comporte pas une valeur numérique entière.


sudo apt-get remove --purge les cons

Intel® Core™2 Quad CPU Q6600 @ 2.40GHz × 4 ,12.04 (precise) 64 bits.

Hors ligne

#9 Le 24/07/2016, à 18:00

Rufus T. Firefly

Re : Tableaux à 2 dimensions en javascript

 function Somme (tab){
	  tmp = 0;
	for (var i = 0; i < tab.length; i++){		

		alert(" L'indice N° : " + i + " contient la valeur : " + tab[i]);
			tmp += tab[i];
		alert(" A l'indice N° : " + i + " \n La somme des valeurs des indices est : " + tmp);
	}
			return tmp;
}

var tableau1 = [12,  21, 6548, 1, 2221, 547, 9];
somme1 = Somme(tableau1);
alert(" la somme de toutes les valeurs est : " + somme1);

Qu'est-ce qui se passe quand tu lui donnes par exemple le tableau suivant à bouffer :
var tableau2 = [12,  4, "machin", 65];
Puisque la fonction Somme affiche ce qu'elle fait...

Edit : prends l'habitude de soigner tes indentations ! Dans tous les langages elles rendent les programmes plus lisibles, et dans certains langages, python par exemple, elles ont même un sens...

Dernière modification par Rufus T. Firefly (Le 24/07/2016, à 18:08)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#10 Le 24/07/2016, à 20:00

carambar

Re : Tableaux à 2 dimensions en javascript

Il se passe ça : "L'indice N° : 2 contient la valeur machin" et ça : 16machin65!


sudo apt-get remove --purge les cons

Intel® Core™2 Quad CPU Q6600 @ 2.40GHz × 4 ,12.04 (precise) 64 bits.

Hors ligne

#11 Le 24/07/2016, à 21:33

Rufus T. Firefly

Re : Tableaux à 2 dimensions en javascript

Donc tu vois ça :
L'indice N° 0 contient la valeur : 12
A l'indice N° 0 la somme des valeurs des indices est : 12

L'indice N° 1 contient la valeur : 4
A l'indice N° 1la somme des valeurs des indices est : 16  (c'est-à-dire 12 + 4)

L'indice N° 2 contient la valeur : machin
A l'indice N° 2 la somme des valeurs des indices est : 16machin

Là, il y a un problème ! Qu'est-ce qui s'est passé à cette étape-là ? Le programme Somme doit additionner 16 et "machin". C'est-à-dire un nombre et une chaîne de caractères. Personne ne sait faire ça !
Qu'est-ce que fait alors un programme informatique devant ce problème insoluble ?

Ça dépend du langage. En C, par exemple, le programme plante, tout simplement. Dans d'autres langages, dont javascript, les concepteurs du langage ont décidé de voir si on pouvait quand même faire quelque chose, pourvu que ça ne plante pas.
Et on peut, sauf que dans certains cas ça fonctionne et dans d'autres, comme ici, ça donne un résultat absurde : 16machin65. L'idée est très simple : 16 peut être compris comme un nombre. Mais on peut aussi le considérer comme une chaîne de 2 caractères, à savoir le caractère "1" suivi du caractère "6". Et comme l'opérateur "+" est conçu pour faire aussi bien des additions de nombres (1 + 1 = 2) que de la concaténation de chaînes de caractères ("toto" + "machin" = "totomachin"), ça tombe bien...
Du coup, on obtient
16 (un nombre provisoirement trans-typé en chaîne de caractères) + "machin" (une autre chaîne) = 16machin (par concaténation de 2 chaînes)

Et bien sûr, à l'étape suivante, même processus :
L'indice N° 3 contient la valeur : 65 (ici, c'est encore un nombre)
A l'indice N° 3 la somme des valeurs des indices est : 16machin65 (65 a été trans-typé en chaîne et concaténé)

Pourquoi les concepteurs de javascript ont permis d'ajouter des torchons et des serviettes plutôt que générer une erreur comme dans C ? Tout simplement parce que c'est bon, le plus souvent. Quand tu fais ceci : alert(" L'indice N° : " + i il se passe la même chose : i (un nombre) est provisoirement trans-typé en chaîne, on concatène les 2 chaînes et on obtient le résultat attendu. D'autre part, si ta fonction Somme se trouve dans un gros programme, elle peut être appelée en cas de besoin, et on suppose que normalement on lui passe un tableau de nombres quand on l'appelle...  Mais voilà, le tableau de "nombres" peut lui-même être le résultat d'une série de calculs et du coup, il n'y a pas forcément que des nombres... Donc il faut vérifier !

Quoi et quand ? Chaque élément du tableau et le mieux, c'est juste avant de l'ajouter, c'est-à-dire juste avant la ligne

tmp += tab[i];

Tu obtiens ça :

function Somme (tab) {
  tmp = 0;
  for (var i = 0; i < tab.length; i++) {
    // alert ("compteur i : " + i + ", élément de tab : " + tab[i]);
    if (isNaN (tab[i])) {
      alert ("compteur i : " + i + ", l'élément de tab : " + tab[i] + " n'est pas un nombre");
      return null;
    }
    tmp += tab[i];
    alert ("compteur i : " + i + ", somme partielle tmp : " + tmp);
  }
  return tmp;
}

Cela dit, isNaN n'est pas nécessairement très fiable : https://developer.mozilla.org/fr/docs/W … baux/isNaN
Il suffit d'essayer ceci pour le constater : var tableau3 = [12,  4, "15", 65];

Dernière modification par Rufus T. Firefly (Le 25/07/2016, à 10:55)


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne

#12 Le 25/07/2016, à 12:42

carambar

Re : Tableaux à 2 dimensions en javascript

Salut,
Et merci Rufus T. Firefly, le brouillard se lève sur mon ignorance!
Bonne journée

Dernière modification par carambar (Le 25/07/2016, à 12:53)


sudo apt-get remove --purge les cons

Intel® Core™2 Quad CPU Q6600 @ 2.40GHz × 4 ,12.04 (precise) 64 bits.

Hors ligne