Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Sujet

Posté par
Cita
18-06-17 à 12:05

Bonjour je voulais la correction de cet exercice:
Soit un matrice de dimension deux
Ecrire un algorithme  qui dermine le valeurs suivantes: le min (plus petit element e mat), les numeros de colonne et ligne

Posté par
fm_31
re : Sujet 18-06-17 à 12:11

Bonjour ,

une stratégie possible est de parcourir toute la matrice élément par élément et de comparer chaque élément à la plus petite valeur trouvée (initialisée à la valeur du 1° élément de la matrice par exemple) et chaque fois qu'on trouve un élément plus petit , on conserve sa valeur ainsi que sa position (ligne et colonne)
Connais-t'on la taille de la matrice ?

Cordialement

Posté par
Cita
re : Sujet 18-06-17 à 12:14

Non on a pas preciser la taille
Cest la premiere fois que jfais algorithme donc cest un peu difficile de comprendre

Posté par
Glapion Moderateur
re : Sujet 18-06-17 à 12:20

Citation :
Soit une matrice de dimension deux


elle fait 2 x 2 ?

Posté par
Cita
re : Sujet 18-06-17 à 12:23

Oui c'est un tableau de dimension 2 deL lignes et de C colonnes a valeurs entieres

Posté par
Glapion Moderateur
re : Sujet 18-06-17 à 12:28

ha oui d'accord.
Bon alors fais comme fm_31 t'a suggéré.
deux boucles Pour I allant de 1 à L et Pour J allant de 1 à C pour parcourir les termes de la matrice puis à chaque item tu testes si l'élément de la matrice est plus petit ou plus grand que le plus petit et le plus grand obtenus jusqu'à alors. Si oui tu remplaces la valeur max ou min par la nouvelle valeur (et tu stockes le I et J dans des variables).
A la fin tu affiche les max et min et les I et J correspondant.

Lance toi, les algorithmes pour progresser il faut se battre un peu avec.
tu veux écrire ça dans un langage particulier ou bien en langage naturel ?

Posté par
Cita
re : Sujet 18-06-17 à 12:31

Oui ca m'aide beaucoup merci
Jvais essayer de le faire
Cest en langage naturel

Posté par
fm_31
re : Sujet 18-06-17 à 17:50

Tu peux faire l'algorithme en  "langage naturel"  mais tu peux aussi l'écrire en algobox  par exemple , ce qui a l'avantage de pouvoir le tester directement . Pour cela , j'utilise le logiciel  Prolab   (gratuit et en ligne , rien à télécharger)

Posté par
mathafou Moderateur
re : Sujet 19-06-17 à 14:55

Bonjour,

nota : ne pas en faire plus que ce qui est demandé
on cherche le minimum seul
pas le minimum et le maximum
(même s'il n'est pas vraiment plus compliqué d'obtenir ici les deux )


Algobox ... hum
ce langage ne permet pas de définir des matrices, seulement des listes (à une seule dimension)

1ère solution : on se fiche que ce soit une matrice ou pas ; c'est 4 nombres dans 4 variables qu'on peut tout aussi bien appeler A,B,C,D
seul le concepteur sait que A et B sont la 1ère ligne et C et D la seconde
le programme (Algobox) n'a aucun moyen de le savoir (donc adieu les boucles et les indices "pour I de ...")
pour aider le concepteur à s'y retrouver (vu que c'est lui qui fait tout le boulot sur les indices !!) il peut appeler ces variables M00, M01, M10 et M11 vu que le nom d'une variable c'est ce qu'on veut ...


deuxième solution : pour définir une matrice il faut utiliser une astuce "classique" mais qu'on risque fort d'être incapable d'imaginer en débutant !
on remplace cette matrice (à deux dimensions, de L lignes et C colonnes) par une liste à une seule dimension = C*L
on range successivement tous les éléments de la 1ère ligne, puis tous les éléments de la seconde ligne etc
le rang d'un élément [I, J] ligne I colonne J dans cette liste est donc C*I + J
(I de 0 à L-1 et J de 0 à C-1, il y a C éléments par ligne)
ainsi les rangs de cette matrice 2x3 sont


0  1  2
3  4  5

rangés dans une liste "linéaire" de 6 éléments de rangs 0, 1, 2, 3, 4, 5

3ème solution ... Algobox on jette
on écrit ça en langage naturel et rien d'autre.
L'élément (I, J) de la matrice M s'écrit M[I, J] sans complications (voire même Mij)

ne pas confondre du tout un algorithme écrit en langage naturel et un programme écrit en Algobox !!
même si Algobox est conçu pour "ressembler" à du langage presque naturel, c'est bien un programme et pas un algorithme.
programme = traduction d'un algorithme dans un certain langage
algorithme = description logique de l'enchainement des opérations

Posté par
Glapion Moderateur
re : Sujet 19-06-17 à 18:45

non, c'est pas 4 nombres dans 4 variables c'est une matrice avec C colonnes et L lignes

Posté par
mathafou Moderateur
re : Sujet 19-06-17 à 19:19

certes, mais je rebondissais sur Algobox : ça n'existe pas une matrice dans Algobox, il n'y au mieux que des Listes.

et que si on laisse tomber cette histoire d'Algobox alors comme je l'ai dit à la fin

Citation :
3ème solution ... Algobox on jette
on est parfaitement libre d'écrire

pour chaque i de 1 à C et pour chaque j de 1 à L
... opérations avec Mij écrit exactement comme ça

ça, c'est le "langage naturel"
pas des trucs qui ressemblent à du Algobox ou à n'importe quel autre langage de programmation)

et puis c'est pas C colonnes et L lignes c'est 2 colonnes et 2 lignes (l'énoncé)

qu'il soit intéressant de généraliser à une matrice quelconque, certainement
mais là encore on va au delà de ce que demande l'énoncé (le minimum d'une matrice 2x2, rien d'autre)

Posté par
cocolaricotte
re : Sujet 19-06-17 à 19:54

Une matrice possédant L lignes et de C colonnes   a pour dimension L \times C

Donc si L \times C = 2 alors L = 1 et C = 2 ou L = 2 et C = 1 !!!

Posté par
mathafou Moderateur
re : Sujet 19-06-17 à 20:45

on va laisser Cita avec le flou de son énoncé qui ne rime à rien alors ...

Posté par
Glapion Moderateur
re : Sujet 19-06-17 à 22:53

non, visiblement dans son esprit, une matrice à 2 dimensions n'est pas une matrice 2 x 2 mais une matrice lignes x colonnes avec L lignes et C colonnes.

2 dimensions ici veut dire plane c.a.d aij et pas a ijk ou plus

Posté par
cocolaricotte
re : Sujet 19-06-17 à 22:56

Donc demandons au posteur de revoir la définition de la dimension d'une matrice pour que nous soyons tous d'accord (au moins sur ce point)

Posté par
Glapion Moderateur
re : Sujet 19-06-17 à 22:59

dans son post de 12:23 elle est claire

Citation :
Oui c'est un tableau de dimension 2 deL lignes et de C colonnes a valeurs entieres

Posté par
mathafou Moderateur
re : Sujet 20-06-17 à 10:14

OK, j'ai compris.

je retire ce que j'ai dit à propos du cas particulier d'une matrice 2x2
Le reste est à garder :
- à propos de Algobox et de la représentation "linéaire" d'une matrice sous forme d'une Liste
- la différence entre "programme" et "algorithme" et sur la façon d'écrire l'élément d'une matrice en "langage naturel"
- et sur le fait qu'on ne demande que le min, et pas le min et le max simultanément, sans complication.

Posté par
Glapion Moderateur
re : Sujet 20-06-17 à 11:57

Oui, je ne sais pas s'il connait " la représentation "linéaire" d'une matrice sous forme d'une Liste "

Pour info, on se sert d'une variable de type liste.
- Pour affecter une valeur à l'élément du tableau correspondant à la ligne li et à la colonne col, il suffit de remplir le champ Rang du terme de la liste par : li*(nombre de colonnes)+col. On obtient alors une ligne de la forme :
montableau[li*(nombre de colonnes)+col] PREND_LA_VALEUR...
- Pour réutiliser la valeur d'un élément du tableau dans un calcul, on utilise la syntaxe :
montableau[li*(nombre de colonnes)+col].

Posté par
carpediem
re : Sujet 21-06-17 à 18:07

salut

soit A = (a_{i, j}) une matrice d'ordre n ... et qui contient donc  n^2 éléments

alors la transformation (i, j) \mapsto (i - 1)n + j = k transforme la matrice A en une liste (b_k) (on numérote simplement les éléments par ligne et colonne)

la réciproque est évidente ... et c'est elle qui nous intéresse bien sur ...

Posté par
mathafou Moderateur
re : Sujet 22-06-17 à 12:12

Généralisé comme dit précédemment à une matrice pas forcément carrée ...
et de plus la réciproque est ici bien inutile.
(on ne traite que la transformation (i;j) ---> k et la transformation inverse ne sert pas)

Posté par
carpediem
re : Sujet 22-06-17 à 12:31

ben non il nous faut la réciproque  puisque si on ne veut pas s'emmerder à rentrer une matrice ou que ce n'est pas possible on rentre une liste et il nous faut retourner l'élément correspondant de la matrice (ses indices)

rentrer dans une liste les éléments a_i,j d'une matrice par ligne et colonne donne la transformation (i, j) --> (i - 1)n + j = k naturellement : l'élément de rang k de la liste correspondant à l'élément a_i, j de la matrice

et ce qu'on veut au final c'est i, et j connaissant k

Posté par
mathafou Moderateur
re : Sujet 22-06-17 à 13:15

bof.

pour i de 0 à C-1
pour j de O0 à L-1
entrer l'élément Mij c'est à dire M[c*i+j] dans une traduction machine en Liste

je rappelle : ne pas confondre algorithme (des Mij) et programme (un bidouillage avec des listes parce que la machine ne sait pas traiter des matrices)
bidouillage inutile si la machine sait (par exemple en C et autres dans lesquels on sait traiter des listes de listes et pas seulement des listes de nombres)

puis
pour i de 0 à C-1
pour j de 0 à L-1
comparer l'élément Mij c'est à dire M[c*i+j] dans une traduction machine en Liste (idem)
mémoriser i et j si celui ci est plus petit que le candidat actuel

(ou variante de calculs si les éléments sont numérotés de 1 à C au lieu de 0 à C-1)

Répondre à ce sujet

Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster :

Connexion / Inscription Poster un nouveau sujet
Une question ?
Besoin d'aide ?
(Gratuit)
Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.


Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !