Errore?
Ciao a tutti.
Sto riscontrando problemi con questo programma
La traccia è la seguente : scrivere una funzione che, data in ingresso un vettori di interi e due interi x e y restituisca un nuovo vettore degli elementi maggiori di x e minori di y e li ordini in senso crescente. Io ho fatto due file uno contenente il main e l'altro una funzione. Il codice compila, però quando lo vado ad eseguire non mi esce nulla (nel senso mi fa inserire la dimensione, gli elementi e poi non mi esce il nuovo vettore ordinato in senso crescente, non esce nulla).Quale può essere il problema?
Sto riscontrando problemi con questo programma
La traccia è la seguente : scrivere una funzione che, data in ingresso un vettori di interi e due interi x e y restituisca un nuovo vettore degli elementi maggiori di x e minori di y e li ordini in senso crescente. Io ho fatto due file uno contenente il main e l'altro una funzione. Il codice compila, però quando lo vado ad eseguire non mi esce nulla (nel senso mi fa inserire la dimensione, gli elementi e poi non mi esce il nuovo vettore ordinato in senso crescente, non esce nulla).Quale può essere il problema?
#include <stdio.h> #include <stdlib.h> #define maxDim (100) void vettore (int a[], int dimensione1, int b[], int x, int y, int*dimensione2); int main (void) { int a[maxDim]; int b[maxDim]; int index; int indice; int x; int y; int dimensione1; int dimensione2; //Inserimento delle dimensioni printf("Inserisci la dimensione dell'array (max%d): ", maxDim); scanf("%d", &dimensione1); printf("Inserisci il valore dell'intero x: "); scanf("%d", &x); printf("Inserisci il valore dell'intero y: "); scanf("%d", &y); //Controllo di allocazione statica if ((dimensione1 > 0) && (dimensione1 <= maxDim)) { //Lettura dell'array for (index = 0; index < dimensione1; index++) { printf("Inserisci il valore %d-esimo:\n", index); scanf("%d", &a[index]); } //Chiamata della funzione vettore (a, dimensione1, b, x, y, &dimensione2); //Stampa del vettore if (dimensione2 > 0) { for (indice = 0; indice < dimensione2; indice++) { printf("b[%d] = %d\n", indice, b[indice]); } } } else { printf("Errore: la dimensione inserita e' maggiore di %d", maxDim); } return 0; } funzione #include <stdio.h> #include <stdlib.h> #define maxDim (100) void vettore (int a[], int dimensione1, int b[], int x, int y, int* dimensione2) { int index; int indice; int alto; int swap; //Calcolo degli elementi compresi tra x e y (*dimensione2) = 0; indice = 0; if(x < a[index] < y) { b[indice] = a[index]; indice++; (*dimensione2++); } //Ordinamento dell'array (bubble sort) alto = *dimensione2; while (alto > 0) { for (indice = 0; indice < (*dimensione2) -1; indice++) { if (b[indice] > b[indice+1]) { swap = b[indice]; b[indice] = b[indice+1]; b[indice+1] = swap; } } alto--; } }
Risposte
Un problema è che
non fa quel che pensi. Insomma, il c++ non definisce l'operatore ternario \(\displaystyle a < x < b \) (l'operatore inclusione). Devi scrivere esplicitamente le due condizioni: [inline]x < a[index] && a[index] < y[/inline]
Inoltre la riga successiva avrebbe dovuto essere [inline]b[*dimensione2] = a[index];[/inline]
if (x < a[index] < y)
non fa quel che pensi. Insomma, il c++ non definisce l'operatore ternario \(\displaystyle a < x < b \) (l'operatore inclusione). Devi scrivere esplicitamente le due condizioni: [inline]x < a[index] && a[index] < y[/inline]
Inoltre la riga successiva avrebbe dovuto essere [inline]b[*dimensione2] = a[index];[/inline]
Ciao ho corretto il primo errore ma lo stesso non va.. Scusa se ti pongo la domanda ma perché dovrebbe essere
b[*dimensione2] = a[index]?
Eh, devi mettere un "for loop" per iterare su tutto l'array, altrimenti non hai speranze che funzioni.
for (index=0; index<dimensione1; index++) { if((x < a[index]) && (a[index] < y)) { b[indice] = a[index]; indice++; (*dimensione2++); } }
"Mikii02":
ma perché dovrebbe essereb[*dimensione2] = a[index]?
Va bene cosi' com'e' nel tuo codice.
"Quinzio":
Eh, devi mettere un "for loop" per iterare su tutto l'array, altrimenti non hai speranze che funzioni.
for (index=0; index<dimensione1; index++) { if((x < a[index]) && (a[index] < y)) { b[indice] = a[index]; indice++; (*dimensione2++); } }
Questo codice legge sia \(a\) che \(b\) fuori dal limiti dell'array, e persino salta elementi.
Quello corretto è:
for (index=0; index<dimensione1; index++) { if((x < a[index]) && (a[index] < y)) { b[*dimensione2] = a[index]; (*dimensione2++); } }
Va beh, ho capito...
ho solo modificato questo
in questo
il post-increment ha la precedenza.
https://onlinegdb.com/OKXYBSYl5
ho solo modificato questo
(*dimensione2++);
in questo
(*dimensione2)++;
il post-increment ha la precedenza.
https://onlinegdb.com/OKXYBSYl5
Inserisci la dimensione dell'array (max100): 8 Inserisci il valore dell'intero x: 2 Inserisci il valore dell'intero y: 5 Inserisci il valore 0-esimo: 8 Inserisci il valore 1-esimo: 7 Inserisci il valore 2-esimo: 6 Inserisci il valore 3-esimo: 5 Inserisci il valore 4-esimo: 4 Inserisci il valore 5-esimo: 3 Inserisci il valore 6-esimo: 2 Inserisci il valore 7-esimo: 1 b[0] = 3 b[1] = 4 ...Program finished with exit code 0 Press ENTER to exit console.
Grazie davvero tante per avermi aiutata a risolvere il problema, ora mi restituisce il vettore come richiesto!!
Grazie ancora!!!!!
Grazie ancora!!!!!