Originariamente Scritto da laplace
Visualizza Messaggio
Programmatori di C a me
Collapse
X
-
allora sam fisher io ti dico sinceramente come la penso...
quello che hai scritto non mi convince per niente e non è l'approccio migliore al problema...anche perchè perde di generalità...ci sono troppi indici che tendono solo a confondere la mente...infatti non riesco manco a leggerlo........io ti dico quella che secondo me è la soluzione migliore e più compatta........
int compare( const void *a, const void *b );
typedef struct
{
int cod;
char sex;
int vot;
} stud;
int main( void )
{
..............................
qsort( clas, 3, sizeof(stud), compare ); //3 è il numero di studenti...
return 0;
}
int compare( const void *a, const void *b )
{
if( ((stud *)a)->vot < ((stud *)b)->vot ) return 1;
if( ((stud *)a)->vot > ((stud *)b)->vot ) return -1;
return 0;
}
tutto chiaro?
}
Commenta
-
-
Originariamente Scritto da laplace Visualizza Messaggioallora sam fisher io ti dico sinceramente come la penso...
quello che hai scritto non mi convince per niente e non è l'approccio migliore al problema...anche perchè perde di generalità...ci sono troppi indici che tendono solo a confondere la mente...infatti non riesco manco a leggerlo........io ti dico quella che secondo me è la soluzione migliore e più compatta........
int compare( const void *a, const void *b );
typedef struct
{
int cod;
char sex;
int vot;
} stud;
int main( void )
{
..............................
qsort( clas, 3, sizeof(stud), compare ); //3 è il numero di studenti...
return 0;
}
int compare( const void *a, const void *b )
{
if( ((stud *)a)->vot < ((stud *)b)->vot ) return 1;
if( ((stud *)a)->vot > ((stud *)b)->vot ) return -1;
return 0;
}
tutto chiaro?
Comunque ho risolto ora posto il listato completoPillola rossa o pillola blu ????
La risposta è dentro te.
Commenta
-
-
Originariamente Scritto da Dave Clark's attacks Visualizza Messaggiosti cazzi il 19 ho la prova intercorso di C e sn arrivato solamente ai cicli for
Che facoltà fai ??!!
Originariamente Scritto da oleh butkoIo ho provato in estate 2009, avevo 14 anni, ho tirato su 70 per 4 volte, pesavo 59kg ed ero alto 1.71 . ora non sò quanto potrei tirare su... ovviamente era la prima volta che andavo in palestra
Commenta
-
-
Originariamente Scritto da Sam Fisher Visualizza Messaggiograzie dell'interessamento però ci sn alcune cose che non ho fatto ancora a lezione.
Comunque ho risolto ora posto il listato completo
semplicemente l'ordinamento non lo fai tu (rischiando di fare casino) ma lo fai fare alla funzione di libreria (stdlib.h) chiamata qsort, che implementa un ordinamento di array in base al criterio definito nella funzione compare (ricorda che il nome di una funzione è un puntatore alla funzione stessa). e poi è efficiente perchè qsort implementa il quicksort che è il migliore algoritmo general purpose di ordinamento...
Commenta
-
-
#include<stdio.h>
#include<conio.h>
struct studente { char cognome[20];char sesso[2];int voto;};
/*il penultimo ; puoi anche toglierlo ma ti da un warning*/
int acquisisci(FILE*,struct studente*);
void ordina (int,struct studente*);
main()
{
FILE *fpi;
int N,i;
struct studente classe [20];
fpi=fopen("studenti.txt","r");
if(fpi==NULL)
printf("Il file non esiste");
else
{
printf("*ELENCO DEGLI STUDENTI ACQUISITO DA FILE* \n\n\n\n");
N=acquisisci(fpi,classe);
ordina(N,classe);
}
getch();
}
int acquisisci(FILE *A,struct studente *B)
{
int i=0;
while(fscanf(A,"%s%s%d",B[i].cognome,B[i].sesso,&B[i].voto)!=EOF)
{
printf("cognome= %s sesso= %s voto= %d \n\n" ,B[i].cognome,B[i].sesso,B[i].voto);
i++;
}
fclose(A);
return i;
}
void ordina (int A,struct studente *B)
{
int i,j,imin;
struct studente temp;
/*devo dichiarare temp di tipo struct perchè al suo interno ha B[i]
che è di quel tipo */
for (i=0;i<A-1;i++)
{ imin=i;
for(j=i+1;j<A;j++)
{
if(B[j].voto<B[imin].voto)
imin=j;
}
/*dopo aver ordinato le componenti per voto crescente sposto anche tutte le altre
conponenti delllo struct studente quindi uso B[i] e non B[i].voto*/
temp=B[i];
B[i]=B[imin];
B[imin]=temp;
}
/*l'eventuale stampa a video sempre fuori il primo ciclo di for cioè
for (i=0;i<A-1;i++) */
printf("\n\n\n*ORDINAMENTO DEGLI STUDENTI PER VOTO* \n\n\n\n");
for(i=0;i<A;i++)
printf("cognome= %s sesso= %s voto= %d \n\n",B[i].cognome,B[i].sesso,B[i].voto);
}
Laplace i molti indici mi servono per il selection sort per ordinare i voti.Pillola rossa o pillola blu ????
La risposta è dentro te.
Commenta
-
-
Originariamente Scritto da laplace Visualizza Messaggiolo so che servono. ma se se ne può fare a meno...perchè non farne a meno...
Cmq grazie dell'interessamento.Pillola rossa o pillola blu ????
La risposta è dentro te.
Commenta
-
-
Originariamente Scritto da gbpackers Visualizza MessaggioOT: vedere il c dopo anni che non lo uso più mi fà una tristezza... per il tempo che passa neh...Pillola rossa o pillola blu ????
La risposta è dentro te.
Commenta
-
-
Originariamente Scritto da Sam Fisher Visualizza Messaggiocmq il c va alla grande nelle università è presente nella maggior parte dei corsi universitari di fondamenti di informatica.
Commenta
-
-
Originariamente Scritto da laplace Visualizza Messaggiotristezza di cosa?
oramai a livello lavorativo il c è usato poco e soprattutto in ambienti dove si sviluppa driver hardware o prodotti di nicchia.
Originariamente Scritto da Sam Fisher Visualizza Messaggiocmq il c va alla grande nelle università è presente nella maggior parte dei corsi universitari di fondamenti di informatica.
Originariamente Scritto da laplace Visualizza Messaggioè normale ed è giusto cosi. chi conosce e sa usare il c non ci mette quasi nulla ad apprendere altri sistemi che di fatto sono sempre basati su questosigpic
Commenta
-
-
avoja..il c è la base di tutto..
un'infinità di applicazioni sono sviluppate in c in c++
cmq...tornando it
sam, hai provato a fare qualche stampa di prova?riesci ad estrapolare i dati dalle struts contenute nel file?
a naso, senza pensare ad ottimizzazioni delle prestazioni, farei cosi:
- estrarrei le struct dal file e le metterei dentro un'array
- scorrerei l'array per ordinarlo tramite il voto (nomestruct.voto)
- lo ributti dentro al file ordinato sovrascrivendo quello che c'era prima
Commenta
-
-
Codice:#include<stdio.h> #include<conio.h> struct studente { char cognome[20];char sesso[2];int voto;}; /*il penultimo ; puoi anche toglierlo ma ti da un warning*/ int acquisisci(FILE*,struct studente*); void ordina (int,struct studente*); main() { FILE *fpi; int N,i; struct studente classe [20]; fpi=fopen("studenti.txt","r"); if(fpi==NULL) printf("Il file non esiste"); else { printf("*ELENCO DEGLI STUDENTI ACQUISITO DA FILE* \n\n\n\n"); N=acquisisci(fpi,classe); ordina(N,classe); } getch(); } int acquisisci(FILE *A,struct studente *B) { int i=0; while(fscanf(A,"%s%s%d",B[i].cognome,B[i].sesso,&B[i].voto)!=EOF) { printf("cognome= %s sesso= %s voto= %d \n\n" ,B[i].cognome,B[i].sesso,B[i].voto); i++; } fclose(A); return i; } void ordina (int A,struct studente *B) { int i,j,imin; struct studente temp; /*devo dichiarare temp di tipo struct perchè al suo interno ha B[i] che è di quel tipo */ for (i=0;i<A-1;i++) { imin=i; for(j=i+1;j<A;j++) { if(B[j].voto<B[imin].voto) imin=j; } /*dopo aver ordinato le componenti per voto crescente sposto anche tutte le altre conponenti delllo struct studente quindi uso B[i] e non B[i].voto*/ temp=B[i]; B[i]=B[imin]; B[imin]=temp; } /*l'eventuale stampa a video sempre fuori il primo ciclo di for cioè for (i=0;i<A-1;i++) */ printf("\n\n\n*ORDINAMENTO DEGLI STUDENTI PER VOTO* \n\n\n\n"); for(i=0;i<A;i++) printf("cognome= %s sesso= %s voto= %d \n\n",B[i].cognome,B[i].sesso,B[i].voto); }
Commenta
-
Commenta