PDA

View Full Version : [Turbo Pascal] trasferire matrice in array


Giuseppe214
14-09-2007, 18:03
Salve ragazzi!!Ho un problemino!!Ho una matrice di numeri reali di m righe ed n colonne con m e n definiti come costanti e devo trasferire i dati della matrice in un array di dimensione m*n!!Come si fa?Grazie :help:

cdimauro
15-09-2007, 06:54
program ProvaCopiaMatriceInVettore;

const
m = 10;
n = 10;

var
Matrice: array[1..m, 1..n] of real;
Vettore: array[1..m * n] of real;

procedure CopiaMatriceInVettore_DirtyWay;
begin
(* La soluzione più "sporca", ma veloce, come piace agli smanettoni. *)
Move(Matrice, Vettore, m * n * SizeOf(real));
end;

procedure CopiaMatriceInVettore;
var
Riga, Colonna: Integer;
begin
for Riga := 1 to m do
for Colonna := 1 to n do
Vettore[(Riga - 1) * n + Colonna] := Matrice[Riga, Colonna];
end;

begin
CopiaMatriceInVettore;
end.

Giuseppe214
17-09-2007, 16:28
Non parte propiro :help:

variabilepippo
17-09-2007, 16:38
Non parte propiro

Cosa significa???

Non riesci a compilare? Hai un errore in fase di esecuzione?

Hai inserito delle istruzioni per popolare la matrice e visualizzare il vettore?

cdimauro
17-09-2007, 16:49
Mi accodo: cosa c'è che non va? Errore di sintassi? Output errato?

Considera che il programmino l'ho scritto al volo senza neppure controllare. :p

a2000.1
17-09-2007, 21:33
giustamente il compilatore si rifiuta di compilare :rolleyes: :D

cdimauro
17-09-2007, 21:54
Il programma in questione compila e funziona perfettamente. ;)

a2000.1
17-09-2007, 22:20
Vettore[(Figa - 1) * n + Colonna] := Matrice[Figa, Colonna];

ma sei convinto ? :rolleyes: :D

cdimauro
17-09-2007, 22:23
:rotfl: Sei sempre il solito! :p

Giuseppe214
18-09-2007, 13:46
Non va in esecuzione!!Non va il run run

cdimauro
18-09-2007, 13:49
Io l'ho lanciato e andava. Certo, il programma terminava immediatamente senza visualizzare niente, ma non era questo il suo scopo mi pare.

Giuseppe214
18-09-2007, 15:04
ah ecco!!Sono alle prime armi con le matrici e nn le ho capite bene!!Potreste dirmi anche come ordinarla in ordine crescente?

cdimauro
18-09-2007, 15:21
ah ecco!!Sono alle prime armi con le matrici e nn le ho capite bene!!
Non c'è problema: nessuno è nato "imparato". :p
Potreste dirmi anche come ordinarla in ordine crescente?
Vorresti che i suoi elementi fossero ordinati in ordine crescente?

Giuseppe214
18-09-2007, 15:34
Si dal più piccolo al più grande

Avendo nella matrice i numeri messi così

3 17 1
15 5 13
7 9 11

ordinarla così
1 3 5
7 9 11
13 15 17

cdimauro
18-09-2007, 15:41
Visto che sei alle prime armi, ti conviene copiara la matrice in un vettore, ordinare questo tramite uno dei tanti algoritmi che si trovano in giro (il select sort è MOLTO semplice da implementare), e poi ricopiare il vettore nella matrice.

Se hai bisogno della soluzione fammi sapere, ma è sempre preferibile sbatterci un po' la testa da soli per apprendere meglio quello che si sta facendo. :)

Giuseppe214
18-09-2007, 16:03
(il select sort è MOLTO semplice da implementare)



E che è il select sort??non si può fare normalmente?

cdimauro
18-09-2007, 16:07
Non c'è un costrutto già pronto: lo devi programmare tu. :D

Qui http://en.wikipedia.org/wiki/Selection_sort c'è spiegato come funziona e ci sono due esempi.

Se non te la senti stasera, appena ho qualche minuto libero, te lo scrivo io il codice, ma nel frattempo ti consiglio per lo meno di provarci. ;)

Giuseppe214
18-09-2007, 16:17
Ci sto provando da 2 giorni!!La testa l'ho già persa :muro:
Cmq qll è C e Phyton a me serve in TP e senza select sort poi pian piano le studierò qll cose!!

variabilepippo
18-09-2007, 16:34
a me serve in TP e senza select sort

Dovrai comunque implementare un algoritmo di ordinamento, ne esistono tanti tra cui scegliere. Prova a trasformare il codice C in Pascal, potresti imparare qualcosa. ;)

Giuseppe214
18-09-2007, 17:04
Per l'ordinamento del vettore farei così io:
prenderei 2 vettori e una variabile

var
vettore1:array[1..10] of integer
vettore2:array[1..10] of integer
comodo:integer

poi farei questo

comodo<- vettore1[i]
vettore1[i]<-vettore2[k]
vettore2[k]<-comodo

variabilepippo
18-09-2007, 18:58
poi farei questo

comodo<- vettore1[i]
vettore1[i]<-vettore2[k]
vettore2[k]<-comodo

Non capisco il senso di queste assegnazioni, il tuo scopo non è ordinare un vettore?

Giuseppe214
18-09-2007, 20:40
:doh: scusate ero nell'aldilà!!Si lo scopo è ordinare una matrice!!Potete firmi come si fa?Mi servirebbe per domattina :help: :mc:

cdimauro
19-09-2007, 07:53
procedure ScambiaElementi(var a, b: real);
var
Temp: real;
begin
Temp := a;
a := b;
b := Temp;
end;

Procedure OrdinaVettore;
const
NumElementi = n * m;
var
i, j: Integer;
begin
for i := 1 to NumElementi - 1 do
for j := i + 1 to NumElementi do
if Vettore[i] > Vettore[j] then
ScambiaElementi(Vettore[i], Vettore[j]);
end;
Questo è il codice che ordina gli elementi del vettore (definito come nell'altro programma che t'avevo scritto) con l'algoritmo del selection sort.

Giuseppe214
22-09-2007, 21:06
Grazie a tutti dell'aiuto

genioexpress
23-09-2007, 01:04
il vecchi e amato pascal quanto mi manca :D