PDA

Visualizza la versione completa : [C] Acquisizione sequenza di numeri ordinata


Slokez
12-09-2014, 17:32
Salve, vorrei premettere che sto studiando programmazione per un esame universitario e che al momento sono ferma agli array.
Per esercitarmi ho cercato degli esercizi online con le soluzioni.
Ho provato a fare l'esercizio 2 di questo documento ma mi sono fermata nel punto in cui si deve inserire il numero e deve trovarsi già ordinato tra la serie di numeri dell'array (http://zeus.ing.unibs.it/infoa/LucidiElemInfo/LP4-vettori1011.pdf)
Ho notato che il programma che ho fatto io è totalmente diverso da quello fornito nella soluzione... Potete aiutarmi nel modo più semplice possibile? Grazie.


#include <stdio.h>
int main (){
int num[19];
int i;
int valore;
printf ("INSERISCI UNA SERIE DI NUMERI IN ORDINE CRESCENTE\n");
for (i=0; i<19; i++)
scanf ("%d", &num[i]);
for (i=0; i<19; i++){
printf ("IL VETTORE IN POSIZIONE [%d] e' %d\n", i, num[i]);

printf ("INSERIRE UN VALORE CHE COMPARIRA' NELLA SERIE DI NUMERI: ");
scanf ("%d", &valore);

.....


Non so più come continuare.
Grazie in anticipo.

oregon
12-09-2014, 17:39
Queste due righe costituiscono il tuo codice per l'inserimento dei numeri



for (i=0; i<19; i++)
scanf ("%d", &num[i]);


Ma cosa garantisce che siano in ordine crescente? E cosa permette di inserirne anche meno di 19?

Slokez
12-09-2014, 17:48
Queste due righe costituiscono il tuo codice per l'inserimento dei numeri



for (i=0; i<19; i++)
scanf ("%d", &num[i]);


Ma cosa garantisce che siano in ordine crescente? E cosa permette di inserirne anche meno di 19?

Lo chiede nell'esercizio: "richiede all'utente, in ordine strettamente crescente, l'inserimento di una serie di numeri interi (al massimo 19), "
Comunque come vedi alla fine del programma avevo chiesto di inserire il numero e con scanf l'avevo assegnato a valore... Non so solamente come ordinare adesso l'array con il valore compreso.

oregon
12-09-2014, 17:57
Lo chiede nell'esercizio: "richiede all'utente, in ordine strettamente crescente, l'inserimento di una serie di numeri interi (al massimo 19), "

Appunto ... e tu non lo fai. Fra l'altro le specifiche indicano

L'acquisizione termina dopo l'inserimento del diciannovesimo numero, o dopo che l'utente inserisce un numero
non ordinato (questo numero non deve essere salvato);


Comunque come vedi alla fine del programma avevo chiesto ...


Non ci siamo capiti ... già da quelle due righe di codice la tua soluzione è sbagliata..

Slokez
12-09-2014, 17:59
Appunto ... e tu non lo fai. Fra l'altro le specifiche indicano

L'acquisizione termina dopo l'inserimento del diciannovesimo numero, o dopo che l'utente inserisce un numero
non ordinato (questo numero non deve essere salvato);




Non ci siamo capiti ... già da quelle due righe di codice la tua soluzione è sbagliata..

Sì appunto non ci capiamo ahah! Io già il codice che mi hai fornito tu l'ho inserito all'inizio! Devo riscriverlo? A quale pro? vorrei capire meglio cortesemente ^^

oregon
12-09-2014, 18:04
Sì appunto non ci capiamo ahah! Io già il codice che mi hai fornito tu l'ho inserito all'inizio! Devo riscriverlo? A quale pro? vorrei capire meglio cortesemente ^^

Si vede che non sei pratico di forum ... ho solo evidenziato la parte del tuo codice che è "sbagliata" e ti ho invitato, con alcune domande, a riflettere sul perché. Capito?

torn24
12-09-2014, 18:21
Ciao, il problema può essere risolto con due cicli, while o for, e opportune condizioni di termine ciclo.

1) acquisisci fuori dal ciclo il primo numero e lo salvi nella prima posizione dell'array, perché ti servirà nella condizione del ciclo


richiede all'utente, in ordine strettamente crescente, l'inserimento di una serie di numeri interi (al massimo 19), salvandoli nel vettore
num1. L'acquisizione termina dopo l'inserimento del
diciannovesimo numero, o dopo che l'utente inserisce un numero
non ordinato (questo numero non deve essere salvato);

Questo punto, ti impone una condizione di uscita ciclo relativamente complessa, per soddisfare le richieste, la condizione dovrà essere :
numeri minore di 19 e numero maggiore del precedente, inserendo numero minore del precedente, non ordinato,la condizione è falsa .



scanf("%d",&num);
array[0]=num;
scanf(%d",&num);
for(i=1;i<19 && array[i-1]<num;i++)
{
array[i]=num;
scanf(%d",&num);

}

acquisisce dall'utente un numero intero N e lo inserisce nel vettore,
nella posizione corretta (il vettore deve rimanere in ordine
crescente);

Qui scorrerai l'array acquisto con un ciclo, all'interno del ciclo poni un controllo

se N > del precedente e minore del successivo rispetto al contatore, inserimento di N in quella posizione e uscita ciclo .


Probabilmente non è la soluzione ottimale, ma solo un suggerimento come base di partenza.

Slokez
12-09-2014, 18:34
Si vede che non sei pratico di forum ... ho solo evidenziato la parte del tuo codice che è "sbagliata" e ti ho invitato, con alcune domande, a riflettere sul perché. Capito?
Oh si vede? ahahaha grazie per la pazienza allora! :D

[QUOTE=torn24;25248416]Ciao, il problema può essere risolto con due cicli, while o for, e opportune condizioni di termine ciclo.

1) acquisisci fuori dal ciclo il primo numero e lo salvi nella prima posizione dell'array, perché ti servirà nella condizione del ciclo

Ok tutto chiaro!! Grazie mille ^^ adesso provvedo a modificare il programma.

Loading