|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Napoli prov
Messaggi: 3089
|
[GENERALE] Confronto successione-vettore
Ciao a tutti!
Visto che sono in procinto di dover fare un esame di programmazione sulle prime cose (cicli for, while, array, etc), stavo facendo degli esercizi tipo... Ho un problema con quelli che trattano le successioni... Vi scrivo la traccia ma non voglio la soluzione, vorrei solo una dritta su come risolvere il problema che vi esporrò dopo... Traccia: Si consideri la successione: a1=1 a2=3 a3=4 e per ogni n>3 an=a(n-1)+2*a(n-2)+a(n-3) Siano dati due array A e B di interi di N elementi. L'array A è ordinato in senso crescente con A[1]>a3. Scrivere una procedura che inserisca in ogni elemento B[i] uno tra i due seguenti valori: 0 se l'elemento appartiene alla successione; la minima differenza in valore assoluto tra A[i] ed un elemento della successione altrimenti. La mia domanda è: una volta calcolato il generico an, per vedere se esso è contenuto nell'array devo per forza scorrerlo tutto con un ciclo for ed effettuare il confronto e ripetere questa procedura per ogni an trovato, oppure c'è un metodo più "economico" in termine di risorse? Grazie dell'aiuto P.S: io faccio Turbo Pascal però il problema è a carattere generale credo, indipendente dal linguaggio.
__________________
Thermaltake Armor VA8000SWA**Corsair CMPSU-620HX**Intel Core 2 Quad Q9450 **Asus P5Q Deluxe**Corsair Dominator 2x2GB PC8500 1066Mhz-555 XMS2**Sapphire Vapor-X HD7970 GHz Edition 3GB GDDR5**Samsung SSD 830 256GB**WD Caviar 1TB SATA**Creative X-Fi Elite Pro **Pioneer DVR-215D**Altec Lansing FX6021**Crossover 2720MDP**Logitech diNovo Cordless Desktop**Cooler Master Storm Sentinel Advance on Razer eXactMat |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Napoli prov
Messaggi: 3089
|
Sono riuscito a giungere a questa soluzione, voi che ne dite?
PROCEDURE CONFRONTA (VAR A,B: VETTORE; N,A1,A2,A3:INTEGER); VAR I,AN,J: INTEGER; BEGIN I:=1; AN:=A3+2*A2+A1; A1:=A2; A2:=A3; A3:=AN; WHILE (A[N]>AN) DO BEGIN WHILE (A[i]>AN) DO BEGIN AN:=A3+2*A2+A1; A1:=A2; A2:=A3; A3:=AN; IF A[i]=AN THEN B[i]:=0 ELSE IF (ABS(AN-A[i])<ABS(A[i]-A2)) THEN B[i]:=ABS(AN-A[i]) ELSE B[i]:=ABS(A[i]-A2); I:=I+1; END; END; END;
__________________
Thermaltake Armor VA8000SWA**Corsair CMPSU-620HX**Intel Core 2 Quad Q9450 **Asus P5Q Deluxe**Corsair Dominator 2x2GB PC8500 1066Mhz-555 XMS2**Sapphire Vapor-X HD7970 GHz Edition 3GB GDDR5**Samsung SSD 830 256GB**WD Caviar 1TB SATA**Creative X-Fi Elite Pro **Pioneer DVR-215D**Altec Lansing FX6021**Crossover 2720MDP**Logitech diNovo Cordless Desktop**Cooler Master Storm Sentinel Advance on Razer eXactMat |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:27.



















