PDA

View Full Version : C - Niubbo: cosa posso fare ora?


ianaz
27-05-2005, 08:07
Ciao a tutti!
Ho appena iniziato a fare del C da basso basso...conosco circa tutte le cose di base (printf, scanf, if, else, while...).
Ho creato un programmino piccolo piccolo (questo (http://web440.my.ibone.ch/ianaz11.exe) ) cosa posso fare ora? Non ho nessun'idea. Grazie

VegetaSSJ5
27-05-2005, 10:01
puntatori

hai bisogno di molto esercizio per capirli bene.

demos88
27-05-2005, 15:42
prova anche a fare pratica con i vettori e le stringhe, vanno a nozze con i puntatori :D :D

ianaz
27-05-2005, 16:40
Mi potete spiegare un po cosa sono?
Grazie delle risposte

VegetaSSJ5
27-05-2005, 17:06
http://programmazione.html.it/c/

Cecco BS
27-05-2005, 22:02
bella, siamo in tema di niubbi... è un po' che cero di imparare bene il c ma, causa impegni, sono rimasto un po' indietro... adesso mi sono sparato i capitoli del Kernighan Ritchie e di un vecchio manuale di Turbo C sui cicli (i vari if-then-else, for, while, switch, etc...), gli array e le cose fondamentali, e prima di addentrarmi nel magico mondo dei puntatori preferivo pormi qualche problema e provare a risolverlo con programmi via via più complessi...
...ad esempio oggi ho provato a fare un semplice programma per la media dei voti... che ne dite?


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i;
float somma, voto[100], numero;

printf("Inserisci i voti, digita 0 (zero) per terminare l'inserimento\n\n");

for(i=0, numero=0;i<100;i++, numero++) {
printf("Inserisci un voto ");
scanf("%f", &voto[i]);
if (voto[i] == 0) break;
}

for(i=0, somma=0.0;i<numero;i++) somma = somma + voto[i];
printf("\n--> La media e' %f\n\n", somma/numero);

system("PAUSE");
return 0;
}


qualche accorgimento da suggerire? Come posso ampliare il programma? Qualche funzionalità in più che potrei implementare?

DanieleC88
27-05-2005, 22:39
@Cecco BS: sembra andare abbastanza bene, anche se potevi migliorare qualcosa. Potevi anche non usare il tipo float, basta sostituire questa linea:
printf("\n--> La media e' %f\n\n", somma/numero);
con questa:
printf("\n--> La media e' %f\n\n", ((float)somma/(float)numero));

O anche questo:
somma = somma + voto[i];
con questo:
somma += voto[i];

Cecco BS
27-05-2005, 22:44
alla seconda cosa non avevo pensato, grazie!!

Alla prima sì, al fatto di... aspetta, si dice fare un cast, giusto? Insomma al fatto di "forzare" il float... però poi ho lasciato la dichiarazione iniziale float per maggior linearità... facendo come mi hai suggerito è meglio? Guadagnerei qualcosa in termini di efficienza usando meno memoria?

GHz
27-05-2005, 23:28
O anche questo:
somma = somma + voto[i];
con questo:
somma += voto[i];

Questo dovrebbe essere tradotto allo stesso modo dal compilatore....è solo una questione di leggibilità no?

VICIUS
27-05-2005, 23:56
Questo dovrebbe essere tradotto allo stesso modo dal compilatore....è solo una questione di leggibilità no?
esatto. non è altro che una abbreviazione.

ciao ;)

cionci
28-05-2005, 02:09
Beh...non proprio...sono operatori diversi... Se il compilatore è particolarmente intelligente verrà tradotto con lo stesso codice, se non lo è verranno usati codici diversi...con un ovvio vantaggio prestazionale per il secondo metodo...

Cecco BS
28-05-2005, 10:04
grazie mille dei suggerimenti... qualche suggerimento per esercitarmi? Cosa posso fare ora? Che funzionalità posso aggiungere?

ianaz
28-05-2005, 10:17
http://programmazione.html.it/c/
Grazie :D

VegetaSSJ5
28-05-2005, 10:46
prova a fare questo, non guardare la soluzione però!

http://212.110.13.72/forum/showthread.php?t=949444

Gica78R
28-05-2005, 12:12
qualche accorgimento da suggerire? Come posso ampliare il programma? Qualche funzionalità in più che potrei implementare?
Di che voti si tratta? Esami universitari o si scuola superiore? Perche' se uno dovesse prendere 0 (zero), non potrebbe usare questo programma per effettuare la media...
Voi direte "Vabbe', come si fa a prendere zero?" Si prende, si prende... :( Alle superiori il mio prof. di elettronica metteva pure i voti negativi!!! Comunque io sono stato fortunato, il minimo che abbia mai preso e' stato 2 - - (due meno meno) :winner:
Comunque, per tornare in tema, forse bisognerebbe escogitare un altro modo per segnalare che si e' finito di inserire i voti. Voi come fareste?

Gica

VegetaSSJ5
28-05-2005, 12:15
Perche' se uno dovesse prendere 0 (zero)... Voi direte "Vabbe', come si fa a prendere zero?"
:fiufiu:

DanieleC88
28-05-2005, 15:31
esatto. non è altro che una abbreviazione.

ciao ;)
Uhm, non esattamente (vedi cionci).

P.S.: orrore! torna al vecchio avatar!

Cecco BS
28-05-2005, 18:21
è un programma generico, dovrebbe funzionare sia per la scuola che per l'università... non avevo sinceramente considerato la possibilità di prendere 0!! :D :D

Cecco BS
28-05-2005, 18:22
prova a fare questo, non guardare la soluzione però!

http://212.110.13.72/forum/showthread.php?t=949444

uh, sì, l'avevo visto, appena posso provo a farlo!

Cecco BS
28-05-2005, 18:26
beh, come soluzione si potrebbe far in modo che il ciclo termini quando si preme un carattere, tipo '$'...

Gica78R
29-05-2005, 10:19
beh, come soluzione si potrebbe far in modo che il ciclo termini quando si preme un carattere, tipo '$'...
C'e' il problema dei tipi... Tu prendi in input un float, devi stare attento a come consideri quello che metti in voto[i]!
E se invece l'inserimento dei voti avvenisse su stringa e si terminasse semplicemente con la stringa vuota? Ovviamente ci sarebbe il sovraccarico dovuto alla conversione dell'input...
Inoltre, ci sono funzioni che convertono, oltre che da stringa ad intero (atoi()), anche da stringa a reale?

Gica

Cecco BS
29-05-2005, 10:22
quindi suggerisci di usare una stringa vuota per terminare l'input?

Cecco BS
29-05-2005, 10:27
quindi dovrei dichiarare il vettore voti[] come stringa di caratteri e poi, nel ciclo for, convertirla in float?

Gica78R
29-05-2005, 11:03
quindi dovrei dichiarare il vettore voti[] come stringa di caratteri e poi, nel ciclo for, convertirla in float?
No, usi una variabile di appoggio in cui ricevere l'input (una stringa), se viene inserita la stringa vuota ti fermi, altrimenti converti quello che c'e' nella stringa, lo metti in voto[i] e ripeti il ciclo...
C'e' sempre il problema dell'acquisizione di stringhe che rappresentino numeri reali (ad esempio un voto come 4,5), e non so se c'e' una funzione di libreria che converte stringhe del genere in tipi float... :confused:

RaouL_BennetH
29-05-2005, 11:31
bella, siamo in tema di niubbi... è un po' che cero di imparare bene il c ma, causa impegni, sono rimasto un po' indietro... adesso mi sono sparato i capitoli del Kernighan Ritchie e di un vecchio manuale di Turbo C sui cicli (i vari if-then-else, for, while, switch, etc...), gli array e le cose fondamentali, e prima di addentrarmi nel magico mondo dei puntatori preferivo pormi qualche problema e provare a risolverlo con programmi via via più complessi...
...ad esempio oggi ho provato a fare un semplice programma per la media dei voti... che ne dite?


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i;
float somma, voto[100], numero;

printf("Inserisci i voti, digita 0 (zero) per terminare l'inserimento\n\n");

for(i=0, numero=0;i<100;i++, numero++) {
printf("Inserisci un voto ");
scanf("%f", &voto[i]);
if (voto[i] == 0) break;
}

for(i=0, somma=0.0;i<numero;i++) somma = somma + voto[i];
printf("\n--> La media e' %f\n\n", somma/numero);

system("PAUSE");
return 0;
}


qualche accorgimento da suggerire? Come posso ampliare il programma? Qualche funzionalità in più che potrei implementare?

Beh, non hai argomenti da linea di comando, quindi potresti anche semplicemente utilizzare:



int main()

al posto di

int main (int argc, char *argv[])

Cecco BS
29-05-2005, 11:38
No, usi una variabile di appoggio in cui ricevere l'input (una stringa), se viene inserita la stringa vuota ti fermi, altrimenti converti quello che c'e' nella stringa, lo metti in voto[i] e ripeti il ciclo...
C'e' sempre il problema dell'acquisizione di stringhe che rappresentino numeri reali (ad esempio un voto come 4,5), e non so se c'e' una funzione di libreria che converte stringhe del genere in tipi float... :confused:

capito...


Beh, non hai argomenti da linea di comando, quindi potresti anche semplicemente utilizzare:

int main() al posto di int main (int argc, char *argv[])


sì, ci avevo pensato... l'ho lasciato solo per completezza, dev cpp lo genera così all'inizio...