![]() | ![]() |
|
|
TESTO:
Creare un vettore che sia una fusione tra due vettori in ordine crescente.
ANALISI:
Il problema richiede la creazione di un vettore che contenga due vettori precedentemente dati e che li disponga al suo interno in ordine crescente. Noi abbiamo utilizzato tre vettori, i primi due, per 626g65g memorizzare i vettori dati dall'utente , l'altro, per utilizzarlo come "contenitore" della fusione. Dopo aver fatto inserire i vettori all'utente eseguo i controlli per ordinare il vettore finale in ordine crescente. Per farlo mi servono varie selezioni.
Le variabili utilizzate sono state:
n1,n2,n3 di tipo interi come indici dei vettori;
vett1,vett2 di tipo Array, come vettori inseriti dall'utente;
vett3 di tipo Array, come vettore contenente i primi due.
I cicli utilizzati sono stati:
il ciclo a iterazione finale (Repeat-Until) per l'inserimento dei primi due vettori;
il ciclo a iterazione iniziale (While-to-do) per la stampa del terzo vettore.
RAFFINAMENTO:
programma vettori;
inizio
(*acquisizione primo vettore*)
Inserisci('Scrivi i numeri appartenenti al 1ø vettore seguito da invio, digita 0 per terminare');
n1:=0;
ripeti
incrementa(n1);
ricevi(vet1[n1]) ;
finchè vet1[n1]=0;
inserisci;
(*acquisizione secondo vettore*)
Inserisci ('Scrivi i numeri appartenenti al 2ø vettore seguito da invio, digita 0 per terminare');
n2:=0;
ripeti
incrementa(n2);
ricevi(vet2[n2]) ;
finchè vet2[n2]=0;
Inserisci;
(*fusione vettori*)
n2:=1;
n1:=1;
ricevi
se (vet1[n1]=0) e (vet2[n2]<>0) allora
inizio
vet3[n3]:=vet2[n2];
incrementa(n2);
fine;
se (vet2[n2]=0) e (vet1[n1]<>0) allora
inizio
vet3[n3]:=vet1[n1];
incrementa(n1);
fine;
se (vet2[n2]<>0) e (vet1[n1]<>0) allora
inizio
se vet1[n1]<vet2[n2] allora
inizio
vet3[n3]:=vet1[n1];
incrementa(n1);
fine
altrimenti
inizio
vet3[n3]:=vet2[n2];
incrementa(n2);
fine;
fine;
incrementa(n3);
finchè (vet2[n2]=0) e (vet1[n1]=0);
n3:=0;
mentre vet3[n3]<>0 esegui
inizio
Inserisci (vet3[n3]);
incrementa(n3);
fine;
fine.
PROGRAMMA:
program vettori;
uses crt;
var n1,n2,n3:integer;
vet1,vet2,vet3:array[1..200] of integer;
begin
clrscr;
(*acquisizione primo vettore*)
Writeln('Scrivi i numeri appartenenti al 1ø vettore seguito da invio, digita 0 per terminare');
n1:=0;
repeat
inc(n1);
read(vet1[n1]) ;
until vet1[n1]=0;
writeln;
(*acquisizione secondo vettore*)
Writeln('Scrivi i numeri appartenenti al 2ø vettore seguito da invio, digita 0 per terminare');
n2:=0;
repeat
inc(n2);
read(vet2[n2]) ;
until vet2[n2]=0;
writeln;
(*fusione vettori*)
n2:=1;
n1:=1;
repeat
if (vet1[n1]=0) and (vet2[n2]<>0) then
begin
vet3[n3]:=vet2[n2];
inc(n2);
end;
if (vet2[n2]=0) and (vet1[n1]<>0) then
begin
vet3[n3]:=vet1[n1];
inc(n1);
end;
if (vet2[n2]<>0) and (vet1[n1]<>0) then
begin
if vet1[n1]<vet2[n2] then
begin
vet3[n3]:=vet1[n1];
inc(n1);
end
else
begin
vet3[n3]:=vet2[n2];
inc(n2);
end;
end;
inc(n3);
until (vet2[n2]=0) and (vet1[n1]=0);
n3:=0;
while vet3[n3]<>0 do
begin
write (vet3[n3]);
inc(n3);
end;
repeat until keypressed;
end.
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025