|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Nov 2004
Messaggi: 124
|
[C] Funzione che ordina vettore
Ciao,
ho scritto un programma in C che dato un vettore richiama una funzione che lo ordina mediante l'algoritmo BubleSort e stampa il risultato del vettore ordinato. Il programma funziona e il vettore viene ordinato ma quando lo stampa vengono stampati anche una serie di numeri strani vicino al primo elemento e non capisco proprio il perchè.... #include <stdio.h> #define SIZE 15 void ordinaBublesort(int[], int); /* La funzione per ordinare il vettore ha come parametri il puntatore all'indirizzo di memoria in cui inizia il vettore e la dimensione del vettore stesso */ int main(void){ int vettore[SIZE] = {2,77,31,53,44,1,5,0,33,19,48,86,51,38,21}; int i; printf("Contenuto di un vettore di interi formato da 15 elementi prima di essere ordiato:\n"); for(i = 0; i < SIZE; i++) // Stampo il vettore prima che venga ordinato dalla funzione ordinaBublesort printf("%3d", vettore[i]); ordinaBublesort(vettore, SIZE); // Chiamo la funzione e gli passo il puntatore al vettore e la sua dimensione return 0; } void ordinaBublesort(int array[], int size){ int i, passo, temp; for(passo = 1; passo < size; passo++){ // Ciclo dei passaggi for(i = 0; i < size; i++){ // Ciclo per ogni singolo passaggio if(array[i] > array[i+1]){ // Confronto tra ogni coppia di posizioni adiacenti temp = array[i]; // Memorizza il valore da spostare avanti nella variabile temporanea array[i] = array[i+1]; // Scambia il valore array[i+1] = temp; // Ripristina alla giusta locazione del vettore il valore salvato in temp } } } printf("\n\n\n Contenuto del vettore di interi dopo essere stato ordinato dalla funzione ordinaBublesort:\n"); for(i = 0; i < size; i++) printf("%3d", array[i]); } Grazie |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Sep 2003
Città: Corenaredo (MI)
Messaggi: 161
|
Re: [C] Funzione che ordina vettore
#include <stdio.h>
#define SIZE 15 void ordinaBublesort(int[], int); /* La funzione per ordinare il vettore ha come parametri il puntatore all'indirizzo di memoria in cui inizia il vettore e la dimensione del vettore stesso */ int main(void){ int vettore[SIZE] = {2,77,31,53,44,1,5,0,33,19,48,86,51,38,21}; int i; printf("Contenuto di un vettore di interi formato da 15 elementi prima di essere ordiato:\n"); for(i = 0; i < SIZE; i++) // Stampo il vettore prima che venga ordinato dalla funzione ordinaBublesort printf("%3d", vettore[i]); ordinaBublesort(vettore, SIZE); // Chiamo la funzione e gli passo il puntatore al vettore e la sua dimensione return 0; } void ordinaBublesort(int array[], int size){ int i, passo, temp; for(passo = 1; passo < size; passo++){ // Ciclo dei passaggi for(i = 0; i < size -1 ; i++){ // Ciclo per ogni singolo passaggio if(array[i] > array[i+1]){ // Confronto tra ogni coppia di posizioni adiacenti temp = array[i]; // Memorizza il valore da spostare avanti nella variabile temporanea array[i] = array[i+1]; // Scambia il valore array[i+1] = temp; // Ripristina alla giusta locazione del vettore il valore salvato in temp } } } printf("\n\n\n Contenuto del vettore di interi dopo essere stato ordinato dalla funzione ordinaBublesort:\n"); for(i = 0; i < size; i++) printf("%3d", array[i]); } Grazie [/quote] partendo da 0 col contatore ti devi fermare un elemento prima che il tuo array finisca,altrimenti sfori l'array all'ultimo controllo e vai fuori nell'elemento i+1=15 e quindi guardi fuori dall'array in una parte di memoria che poteva contenere qualunque cosa |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Nov 2004
Messaggi: 124
|
ahhh giusto, mi dimentico sempre di inserire qualche cavolata che poi mi incasna tutto, quindi quel numero storto che mi appariva era semplicemente il contenuto di una cella di memoria fuori dal mio array?
Grazie Andrea |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:15.



















