 |
|
 |
| Precedente :: Successivo |
Autore |
Messaggio |
|
|
maris.p Novizio
Registrato: 30/10/09 12:27 Messaggi: 9
|
Inviato: Ven Ott 30, 2009 12:30 pm Oggetto: Aiuto programma c++ |
|
|
La traccia dice:
Scrivere un programma C++ che acquisisce da tastiera un numero intero
positivo n <=50 e successivamente le componenti reali u1,u2,...,un di un vettore u e ne determina un k-riordinamento ciclico delle componenti
(k intero), cioè il vettore v ottenuto da u traslando tutte le componenti di |k| ,(modulo di k),posti verso destra o sinistra a seconda del segno di
k (gli elementi che escono
da un lato rientrano dall'altro); infine il programma deve scrivere il vettore v sul video.
Io l'ho scritto in questo modo:
#include <stdio.h>
#include <stdlib.h>
main()
{
int n,i,k; float u[50],v[50];
printf("\n\ninserisci un numero intero positivo n=");
scanf("%d",&n);
if (n>50) return 0;
for(i=1;i<=n;i++)
{ printf("\n dammi la componente numero");
printf(" %d del vettore u ",i);
scanf("%f",&u[i]); }
printf("\n\nil vettore u ottenuto e':");
for (i=1;i<=n;i++)
{printf("\n %f",u[i]);}
printf("\n\ninserisci il valore k:");
scanf("%d",&k);
if (k<0)k=-k;
printf("\n\n il vettore v ottenuto e':");
for (i=1;i<=n;i++)
{u[i]=v[i+k];
printf("\n\n%f",u[i]);}
system ("PAUSE"); return 0;
}
Però purtroppo non va . Sapete dirmi dov'è l'errore?
grazie mille a tutti.. |
|
Top |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
Inviato: Ven Ott 30, 2009 2:44 pm Oggetto: |
|
|
Beh, intanto quando prendi i valori dei vettori li scrivi su u e poi fai u[i] = v[i+k] invece dovresti mettere u anche a destra, e poi non considei il fatto che deve essere ciclico, quindi quando superi il numero n devi tornare indietro, il codice seguente fa quello che vuoi tu:
| Codice: |
#include <stdio.h>
#include <stdlib.h>
main()
{
int n,i,k; float u[50],v[50];
printf("\n\ninserisci un numero intero positivo n=");
scanf("%d",&n);
if (n>50) return 0;
for(i=0;i<n;i++)
{ printf("\n dammi la componente numero");
printf(" %d del vettore u ",i+1);
scanf("%f",&u[i]); }
printf("\n\nil vettore u ottenuto e':");
for (i=0;i<n;i++)
{printf("\n %f",u[i]);}
printf("\n\ninserisci il valore k:");
scanf("%d",&k);
//if (k<0)k=-k; non ci vuole!
printf("\n\n il vettore v ottenuto e':");
for (i=0;i<n;i++)
{
if(i+k<n)
printf("\n\n%f",u[i+k]);
else
printf("\n\n%f",u[i+k-n]);
}
system ("PAUSE"); return 0;
} |
_________________ Visita anche il sito Agriturismo Umbria per maggiori informazioni sull'Umbria!
Realizzazione siti web e applicazioni ASp.NEt, C/C++, C# |
|
Top |
|
 |
maris.p Novizio
Registrato: 30/10/09 12:27 Messaggi: 9
|
Inviato: Ven Ott 30, 2009 5:35 pm Oggetto: |
|
|
ciao e grazie mille per il tuo aiuto, mi hai avvicinato molto alla soluzione ma ancora non ci siamo. La prof. ci ha fatto un esempio di come dovrebbe uscire il programma:
u=1 2 4 8 9
per k=-1 si ha v= 2 4 8 9 1
per k=+2 si ha v= 8 9 1 2 4
e così via..
sto impazzendo  |
|
Top |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
|
Top |
|
 |
maris.p Novizio
Registrato: 30/10/09 12:27 Messaggi: 9
|
Inviato: Ven Ott 30, 2009 6:33 pm Oggetto: |
|
|
se metto lo stesso vettore u=1 2 4 8 9, il programma che mi hai scritto dà:
per k=2 si ha v= 4 8 9 1 2 invece che 8 9 1 2 4
per k=-1 si ha v= 0 1 2 4 8 " 2 4 8 9 1
sarà sicuro una piccolezza,ma nn riesco a trovarla.. |
|
Top |
|
 |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|