PDA

View Full Version : [c]prog del prof


emiliano30
03-06-2005, 18:25
sto anche guardando un progr fatto da un mio prof. che oltre al fatto che non riesco a compilarlo non lo capisco(sicuramente sono io che sono una pippa)...mi sembra caotico...
chi se la sente di commentarlo(spiegarlo)? p.s non commenti personali commenti del tipo.../*..........*/ :p



/** Esercizio 1
Programma che legge da input una serie di Cognomi e
li mette in un vettore di strutture poi ordinadolo per stipendio
allocando solo i necessari
**/
/** Svolgimento **/
#include <stdio.h>
#include <string.h>
/** Numero massimo di elementi **/
#define MAXRECORDS 100
char cognome[30];
char c;
int errno;
int sum=0;
/** Struttura dei record **/
struct nomi{
char cognome[30];
int stip;
} ;
struct nomi *rec[MAXRECORDS];
void main(void)
{
int i, j, iNum;
/** Leggi da input le stringhe fino a che nel cognome ci sia '.'
o il massimo dei records **/
for (iNum = 0; iNum < MAXRECORDS; iNum++)
{
rec[iNum] = (struct nomi *) malloc(sizeof(struct nomi));
if (rec[iNum] == NULL)
{
printf("Errore allocazione memoria:[%ld]!!\n", errno);
exit(1);
}
printf("\nInserisci il cognome (. per terminare): ");
gets(rec[iNum]->cognome);
if (rec[iNum]->cognome[0]=='.')
break;
printf("Inserisci lo stipendio: ");
scanf("%d",&rec[iNum]->stip);
sum=sum+rec[iNum]->stip;
c=getchar();
}
/** ordino per ordine di stipendio **/
for (i = 0; i < iNum; i++)
for (j=i+1; j<iNum; j++)
if(rec[i]->stip > rec[j]->stip)
scambia(&rec[i], &rec[j]);
/** Loop di stampa **/
for (i = 0; i < iNum; i++)
printf("Record[%d]: [%s][%d]\n",i,rec[i]->cognome,rec[i]->stip);
/** Loop di free memoria **/
for (i = 0; i < iNum; i++)
free(rec[i]);
/** stampo la media ***/
if(iNum>0)
printf("\n media = %f\n",(float)sum/(float)(iNum));
}
/*** procedura di scambio ***/
scambia(struct nomi *Rec_i, struct nomi *Rec_j)
{
struct nomi temp;
strcpy(temp.cognome,Rec_i->cognome);
temp.stip=Rec_i->stip;
strcpy(Rec_i->cognome,Rec_j->cognome);
Rec_i->stip=Rec_j->stip;
strcpy(Rec_j->cognome,temp.cognome);
1
Rec_j->stip=temp.stip;
}

Fenomeno85
03-06-2005, 19:22
fa quello scritto in alto :D

~§~ Sempre E Solo Lei ~§~

Gica78R
03-06-2005, 19:29
Sicuro che qui:
/** Struttura dei record **/
struct nomi{
char cognome[30];
int stip;
} ;
struct nomi *rec[MAXRECORDS];
ci vada l'asterisco nella dichiarazione di rec? Cioe' rec e' un puntatore ad un array di MAXRECORDS nomi?
Allora qui
rec[iNum] = (struct nomi *) malloc(sizeof(struct nomi)); c'e' forse qualcosa che non va, o sbaglio?

emiliano30
03-06-2005, 19:35
ho fatto copia e incolla con il prog del prof
che significa che sto studiando su cose sbagliate? :incazzed:

Gica78R
03-06-2005, 19:44
ho fatto copia e incolla con il prog del prof
che significa che sto studiando su cose sbagliate? :incazzed:
Lo provo tra un po' e ti dico... adesso sono un po' bollito :coffee:
Magari sbaglio...

emiliano30
03-06-2005, 21:48
sarebbe interessante un commento di cionci e ziosilvio,che mi sembrano due con le p...e :)

Fenomeno85
03-06-2005, 22:07
sarebbe interessante un commento di cionci e ziosilvio,che mi sembrano due con le p...e :)

non è che noi siamo scemi :rolleyes: rispettando ovviamente i due utenti che hai citato che sanno un bordello.
Sai com'è se ti metti e guardi il codice capisci


/** Esercizio 1
Programma che legge da input una serie di Cognomi e
li mette in un vettore di strutture poi ordinadolo per stipendio
allocando solo i necessari
**/
/** Svolgimento **/
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>

/** Numero massimo di elementi **/
#define MAXRECORDS 100

void scambia(struct nomi *Rec_i, struct nomi *Rec_j);


char cognome[30];
char c;
int errno;
int sum=0;
/** Struttura dei record **/
struct nomi{
char cognome[30];
int stip;
} ;
struct nomi *rec[MAXRECORDS];
int main(void)
{
int i, j, iNum;
/** Leggi da input le stringhe fino a che nel cognome ci sia '.'
o il massimo dei records **/
for (iNum = 0; iNum < MAXRECORDS; iNum++){
rec[iNum] = (struct nomi *) malloc(sizeof(struct nomi));
if (rec[iNum] == NULL){
printf("Errore allocazione memoria:[%ld]!!\n", errno);
exit(1);
}
printf("\nInserisci il cognome (. per terminare): ");
gets(rec[iNum]->cognome);
if (rec[iNum]->cognome[0]=='.')
break;
printf("Inserisci lo stipendio: ");
scanf("%d",&rec[iNum]->stip);
sum=sum+rec[iNum]->stip;
c=getchar();
}
/** ordino per ordine di stipendio **/
for (i = 0; i < iNum; i++)
for (j=i+1; j<iNum; j++)
if(rec[i]->stip > rec[j]->stip)
scambia(rec[i], rec[j]);
/** Loop di stampa **/
for (i = 0; i < iNum; i++)
printf("Record[%d]: [%s][%d]\n",i,rec[i]->cognome,rec[i]->stip);
/** Loop di free memoria **/
for (i = 0; i < iNum; i++)
free(rec[i]);
/** stampo la media ***/
if(iNum>0)
printf("\n media = %f\n",(float)sum/(float)(iNum));

return (1);
}
/*** procedura di scambio ***/
void scambia(struct nomi *Rec_i, struct nomi *Rec_j)
{
struct nomi temp;
strcpy(temp.cognome,Rec_i->cognome);
temp.stip=Rec_i->stip;
strcpy(Rec_i->cognome,Rec_j->cognome);
Rec_i->stip=Rec_j->stip;
strcpy(Rec_j->cognome,temp.cognome);
Rec_j->stip=temp.stip;
}

~§~ Sempre E Solo Lei ~§~

sirus
03-06-2005, 22:22
beh mi sembra molto semplice come programma, nulla da dire ;) si commenta da solo direi :read:
ma che hanno frequenti? :)

Gica78R
03-06-2005, 23:22
Lo provo tra un po' e ti dico... adesso sono un po' bollito :coffee:
Magari sbaglio...
Arieccome... mi ci sono voluti due piattoni di pasta e fagioli + caffe' x rimettermi in sesto. Ho pure dato un'occhiata al programma... Riguardo la dichiarazione di rec, e' giusto... C'era cmq un errore qui:
for (i = 0; i < iNum; i++)
for (j=i+1; j<iNum; j++)
if(rec[i]->stip > rec[j]->stip)
scambia(&rec[i], &rec[j]); alla funzione scambia() non devi passare l'indirizzo di rec[i] e rec[j], quindi togli '&'.
Cmq ti e' gia' stata suggerita la versione funzionante in ambiente win...

Ciao... :ronf:

emiliano30
04-06-2005, 10:36
ragazzi non volevo mica offendere qualcuno...ma se lo fatto senza volerlo scusatemi :) , p.s non ti ho dato dello scemo Fenomeno....

Fenomeno85
04-06-2005, 10:41
ragazzi non volevo mica offendere qualcuno...ma se lo fatto senza volerlo scusatemi :) , p.s non ti ho dato dello scemo Fenomeno....

ok

~§~ Sempre E Solo Lei ~§~

emiliano30
04-06-2005, 10:51
come mai che su v.c lo compila mentre su dev no?

emiliano30
04-06-2005, 10:53
e poi conio non fa parte della lib c++... :rolleyes:

Fenomeno85
04-06-2005, 10:58
come mai che su v.c lo compila mentre su dev no?

dev lo compila ho usato quello :O

~§~ Sempre E Solo Lei ~§~

Fenomeno85
04-06-2005, 10:59
e poi conio non fa parte della lib c++... :rolleyes:

conio è una libreria di c/c++ non standard solo per ambienti windows.

~§~ Sempre E Solo Lei ~§~

emiliano30
04-06-2005, 11:05
possibile che usando lo stesso compilatore otteniamo differenti risultati?



16 [Warning] `struct nomi' declared inside parameter list


16 [Warning] its scope is only this definition or declaration, which is probably not what you want

53 [Warning] passing arg 1 of `scambia' from incompatible pointer type

53 [Warning] passing arg 2 of `scambia' from incompatible pointer type

68 conflicting types for `scambia'

Fenomeno85
04-06-2005, 11:11
/* LINUX VERSION */


/** Esercizio 1
Programma che legge da input una serie di Cognomi e
li mette in un vettore di strutture poi ordinadolo per stipendio
allocando solo i necessari
**/
/** Svolgimento **/
#include <stdio.h>
#include <string.h>


/** Numero massimo di elementi **/
#define MAXRECORDS 100

char cognome[30];
char c;
int errno;
int sum=0;
/** Struttura dei record **/
struct nomi{
char cognome[30];
int stip;
} ;
struct nomi *rec[MAXRECORDS];

/*** procedura di scambio ***/
void scambia(struct nomi *Rec_i, struct nomi *Rec_j)
{
struct nomi temp;
strcpy(temp.cognome,Rec_i->cognome);
temp.stip=Rec_i->stip;
strcpy(Rec_i->cognome,Rec_j->cognome);
Rec_i->stip=Rec_j->stip;
strcpy(Rec_j->cognome,temp.cognome);
Rec_j->stip=temp.stip;
}


int main(void)
{
int i, j, iNum;
/** Leggi da input le stringhe fino a che nel cognome ci sia '.'
o il massimo dei records **/
for (iNum = 0; iNum < MAXRECORDS; iNum++){
rec[iNum] = (struct nomi *) malloc(sizeof(struct nomi));
if (rec[iNum] == NULL){
printf("Errore allocazione memoria:[%ld]!!\n", errno);
exit(1);
}
printf("\nInserisci il cognome (. per terminare): ");
fgets(rec[iNum]->cognome, 30, );
if (rec[iNum]->cognome[0]=='.')
break;
printf("Inserisci lo stipendio: ");
scanf("%d",&rec[iNum]->stip);
sum=sum+rec[iNum]->stip;
c=getchar();
}
/** ordino per ordine di stipendio **/
for (i = 0; i < iNum; i++)
for (j=i+1; j<iNum; j++)
if(rec[i]->stip > rec[j]->stip)
scambia(rec[i], rec[j]);
/** Loop di stampa **/
for (i = 0; i < iNum; i++)
printf("Record[%d]: [%s][%d]\n",i,rec[i]->cognome,rec[i]->stip);
/** Loop di free memoria **/
for (i = 0; i < iNum; i++)
free(rec[i]);
/** stampo la media ***/
if(iNum>0)
printf("\n media = %f\n",(float)sum/(float)(iNum));

return (1);
}


~§~ Sempre E Solo Lei ~§~