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!!!!!