View Full Version : C - Niubbo: cosa posso fare ora?
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.
prova anche a fare pratica con i vettori e le stringhe, vanno a nozze con i puntatori :D :D
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?
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?
Questo dovrebbe essere tradotto allo stesso modo dal compilatore....è solo una questione di leggibilità no?
esatto. non è altro che una abbreviazione.
ciao ;)
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?
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
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 '$'...
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?
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...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.