PDA

View Full Version : Problemino...


Albozzo
25-11-2005, 18:20
...ciao ragazzi, oggi ho fatto un semplice programma in c (ordinamento di due vettori in un 3°) ma ho questo problema:

non mi ordina i vettori!!!!
sto saltanto qualcosa?
ecco il codice!!!

mi aiutate?

/*Dati due vettori di diverse dimensioni: ordinarli in un terzo vettore*/

#include <stdio.h>
#include <stdlib.h>
#define dim 50

void carica_vett(int v[], int d, char z); //Dichirazione funzione che carica il vettore
void ordina_vett(int v[], int d); //Dichirazione funzione che ordina il vettore
void stampa_vett(int v[], int d, char z);

int main(void){ //INIZIO PROGRAMMA PRINCIPALE

int a[dim], b[dim]; //Dichiarazione vettori
int n, m; //Dichiazione variabili
char z;

printf("*****INSERIRE MASSIMO 50 VALORI NEIL VETTORE*****\n"); //Messaggio

rit: printf("Quanti valori nel vettore A?\n"); //Controllo numero valori di A
scanf("%d",&n);
if (n>50){
printf("REIMMETTERE NUMERO DI VALORI\n");
goto rit;
}

rit2: printf("Quanti valori nel vettore B?\n"); //Controllo numero valori di B
scanf("%d",&m);
if (m>50){
printf("REIMMETTERE NUMERO DI VALORI\n");
goto rit2;
}

z= 'A';
carica_vett(a,n,z); //Chiamata funzione di caricamento per A
z= 'B';
carica_vett(b,m,z); //Chiamata funzione di caricamento per B

ordina_vett(a,n);
ordina_vett(b,m);

z= 'A';
stampa_vett(a,n,z);
z= 'B';
stampa_vett(b,m,z);

system("pause");
return 0;
} //FINE PROGRAMMA PRINCIPALE

void carica_vett(int v[], int d, char z){ //INIZIO FUNZIONE di caricamento
int i;

printf("VALORI DEL VETTORE %c\n",z);
for(i=0;i<d;i++){
printf("Inserisci valore: ");
scanf("%d",&v[i]);
}
} //FINE FUNZIONE

void ordina_vett(int v[], int d){ //INIZIO FUNZIONE di ordinamento
int i, j, com;

for(j=0;j<(d-1);j++){
for(i=j+1;i==d;i++){
if (v[j]>v[i]){
com= v[j];
v[j]= v[i];
v[i]= com;
}
}
}
}

void stampa_vett(int v[], int d, char z){
int i;

printf("STAMPA VALORI DEL VETTORE %c\n",z);
for(i=0;i<d;i++){
printf("%d-*-",v[i]);
}
}

andbin
25-11-2005, 20:03
...ciao ragazzi, oggi ho fatto un semplice programma in c (ordinamento di due vettori in un 3°) ma ho questo problema:

non mi ordina i vettori!!!!
sto saltanto qualcosa?
Ciao, hai solo sbagliato il test nel secondo for della funzione ordina_vett().

for(j=0;j<(d-1);j++){
for(i=j+1;i<d;i++){
if (v[j]>v[i]){
com= v[j];
v[j]= v[i];
v[i]= com;
}
}
}

P.S.: Permettimi ancora di segnalarti che usare i goto in un sorgente "C" è molto brutto e, normalmente, da evitare.

Albozzo
29-11-2005, 19:16
P.S.: Permettimi ancora di segnalarti che usare i goto in un sorgente "C" è molto brutto e, normalmente, da evitare.



eh, pure secondo me è poco elegante usare un goto ma nn solo in C ma in tutti i linguaggi di programmazione a parte ASSEMBLY!!! :D

cmq grazie... ciao ciao!

Alberto.

andbin
29-11-2005, 19:31
eh, pure secondo me è poco elegante usare un goto ma nn solo in C ma in tutti i linguaggi di programmazione a parte ASSEMBLY!!! :D
Beh, però bisogna ammettere che ci sono dei (rari) casi in cui i goto in "C" hanno la loro efficacia. Mi riferisco ad esempio al kernel di linux. Non so se ti è mai capitato di dare una sbirciata ai sorgenti del kernel linux. Lì infatti ci sono goto a tonnellate, perché l'eleganza e la "purezza" del codice sono meno importanti rispetto alla compattezza e alla velocità del codice e si cerca in genere di fare le cose nel modo più diretto e semplice possibile. In questi casi sarei pure disponibile a chiudere un occhio ... ;)

17Qwerty71
29-11-2005, 21:33
secondo me se i goto sono condizionati vanno più che bene :)