Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-05-2003, 19:29   #1
terrys3
Senior Member
 
L'Avatar di terrys3
 
Iscritto dal: Jan 2001
Messaggi: 8826
Aiuto con primi programmi in c

Studiando dal Kernighan-Ritchie mi sono imbattuto in questo semplice programmino che però presenta un aspetto a me non del tutto chiaro:
il programma serve per il conteggio dei caratteri di un flusso proveniente da tastiera:

#include <stdio.h>
main()
{long nc;
nc=0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);}

Quello che non mi è chiaro è il significato ed il funzionamento dell'EOF (end of file). Infatti scrivendo

while (getchar() != 'a')

non appena inserisco una 'a' da tastiera il programma mi da il conteggio dei caratteri. Usando l'EOF invece come faccio a visualizzare questo risultato? Aiutatemi per favore perchè l'EOF è presente nella maggiorparte dei programmi che il libro presenta (copia tra file, conteggio delle linee ecc...)
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso"
terrys3 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2003, 20:16   #2
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Re: Aiuto con primi programmi in c

Quote:
Originally posted by "terrys3"

Studiando dal Kernighan-Ritchie mi sono imbattuto in questo semplice programmino che però presenta un aspetto a me non del tutto chiaro:
il programma serve per il conteggio dei caratteri di un flusso proveniente da tastiera:

#include <stdio.h>
main()
{long nc;
nc=0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);}

Quello che non mi è chiaro è il significato ed il funzionamento dell'EOF (end of file). Infatti scrivendo

while (getchar() != 'a')

non appena inserisco una 'a' da tastiera il programma mi da il conteggio dei caratteri. Usando l'EOF invece come faccio a visualizzare questo risultato? Aiutatemi per favore perchè l'EOF è presente nella maggiorparte dei programmi che il libro presenta (copia tra file, conteggio delle linee ecc...)
FEOF è un indicatore di "fine file", difatti EOF significa End Of File.
Quel libro è vecchissimo, utilizza un "dialetto" di C che va prima della standardizzazione che non usa + nessuno. Non so come intenda l'EOF quel libro, comunque sostituisci '\n' con EOF nel programma e vedi che con un semplice invio ricevi il risultato. Se vuoi imparare il C, compera un libro recente. Va in giro il C99, imparare il C Kernighan e Ritchie nel 2003 non so se mi sembra il caso, visto che molti compilatori stanno eliminando pure il supporto.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2003, 20:24   #3
sergio83
Senior Member
 
L'Avatar di sergio83
 
Iscritto dal: Mar 2000
Messaggi: 674
Ti conta i caratteri fino a che non scrivi il carattere "eof" (che dovrebbe essere "CTRL+z" in linux, in windows non so) il quale ti fa uscire dal ciclo
A questo punto ti stampa il numero di caratteri premuti. Cmq se hai problemi ascolta i consigli di mjordan: sostituisci EOF con '\n' (che non è altro che l'enter) oppure cambia libro!
Ciao!
sergio83 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2003, 20:26   #4
terrys3
Senior Member
 
L'Avatar di terrys3
 
Iscritto dal: Jan 2001
Messaggi: 8826
Quello che ho io è la seconda ediziona basata sul linguaggio ansi C. Mi consigliate davvero di comprarne un altro? Potrebbe crearmi grossi problemi imparare da questo?
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso"
terrys3 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2003, 20:28   #5
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originally posted by "terrys3"

Quello che ho io è la seconda ediziona basata sul linguaggio ansi C. Mi consigliate davvero di comprarne un altro? Potrebbe crearmi grossi problemi imparare da questo?
Appunto è vecchio. L'ultimo standard lo ha fatto l'ISO
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2003, 20:32   #6
terrys3
Senior Member
 
L'Avatar di terrys3
 
Iscritto dal: Jan 2001
Messaggi: 8826
Quote:
Originally posted by "mjordan"



Appunto è vecchio. L'ultimo standard lo ha fatto l'ISO
potresti consigliarmi allora un buon libro che non sia difficile da trovare? Qui dalle mie parti già ho faticato non poco per trovare quello che ho!!!
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso"
terrys3 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2003, 20:34   #7
maxithron
Senior Member
 
L'Avatar di maxithron
 
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
uno dei + semplici (per iniziare è ovvio ) ritengo sia:

programmare in C di peter Aitken & Bradley L. Jones
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n;
Utilizzando atomi trivalenti drogheremo il silicio di tipo p;
Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo
maxithron è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2003, 20:36   #8
terrys3
Senior Member
 
L'Avatar di terrys3
 
Iscritto dal: Jan 2001
Messaggi: 8826
Quote:
Originally posted by "maxithron"

uno dei + semplici (per iniziare è ovvio ) ritengo sia:

programmare in C di peter Aitken & Bradley L. Jones
preferirei un libro che pur partendo dagli elementi basilari (che cmq ho già studiato in passato da altre fonti) giunga fino a cose di una certa complessità!
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso"
terrys3 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2003, 20:47   #9
terrys3
Senior Member
 
L'Avatar di terrys3
 
Iscritto dal: Jan 2001
Messaggi: 8826
Nessuno sa dirmi come si da l'EOF sotto Windows?
Dovrebbe essere ctrl+z (oppure ctrl+d) ma ho provato ed esce scritto ^Z (oppure ^D)... sapete aiutarmi?
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso"
terrys3 è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 03:17   #10
skyblaze
Senior Member
 
Iscritto dal: Aug 2002
Messaggi: 356
Quote:
Originally posted by "mjordan"



Appunto è vecchio. L'ultimo standard lo ha fatto l'ISO
si ma ISO ha solamente adottato lo standard ANSI rimarchiandolo iso99...lo standard è sempre ANSI.....almeno cosi ho letto da molte parti....no dico questo perche pure io sto imparando da un libro scritto da 2 italiani che si rifa all'ansi
skyblaze è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 10:08   #11
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originally posted by "skyblaze"

si ma ISO ha solamente adottato lo standard ANSI rimarchiandolo iso99...lo standard è sempre ANSI.....almeno cosi ho letto da molte parti....no dico questo perche pure io sto imparando da un libro scritto da 2 italiani che si rifa all'ansi
E ovvio che se fai un nuovo standard prendi prima quello che c'era già, o no?
Comunque il C99 aggiunge diverse cose al C.
Innanzitutto potenzia notevolmente la libreria matematica.
Aggiunge il supporto per il numeri complessi e numeri immaginari.
Elimina la regola dell'int implicito (unsigned long non vale più, bisogna scrivere unsigned long int), così come non specificare il tipo di ritorno di una funzione non vale +.
Aggiunge il tipo di dati 'bool' per variabili booleane.
Consente la dichiarazione di variabili in cicli e in mezzo a codice. Per esempio:

Codice:
...
...
for (int i = 0; i < 10; i++) {
        fai_qualcosa();
        ...
}
è perfettamente valido in C99, cosi anche come:
Codice:
int
main(int argc, char ** argv)
{
        int i; /* Variabile */

        printf("Ciao a tutti!\n"); /* Istruzione */

        char ch; /* Altra variabile */

        return 0;
}
Aggiunge i commenti su una sola riga, stile C++
Aggiunge gli array di lunghezza variabile. Per esempio:

Codice:
void 
my_func(int x, int y)
{
        int my_array[x,y];

        ...
}
Aggiunge la nuova parola riservata "restrict", che consente di fare ciò che in C90 bisognava dire a parole (che magari due oggetti puntati non dovevano sovrapporsi).

Aggiunge la parola riservata 'inline' per il function inlining.

Aggiunge un pozzo di altra roba ....

Un bel linguaggio. Il C è sempre + forte.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 10:11   #12
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originally posted by "terrys3"



preferirei un libro che pur partendo dagli elementi basilari (che cmq ho già studiato in passato da altre fonti) giunga fino a cose di una certa complessità!
Benissimo. Se hai già delle basi il libro che fa al caso tuo è l'Herbert Schildt, Guida completa C, McGrawHill.
Mi pare sia l'unico attualmente a trattare lo standard C99, inoltre presenta gli argomenti in maniera semplice, ma procede fino ad esempi + complessi. Gli ultimi capitoli sono una figata, anche se seguirli attentamente richiede moltissimo tempo.

Ciao.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 10:14   #13
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originally posted by "maxithron"

uno dei + semplici (per iniziare è ovvio ) ritengo sia:

programmare in C di peter Aitken & Bradley L. Jones
L'ho letto anch'io. Per cominciare è un libro fantastico. Confermo anch'io questo libro per chi è alle prime armi.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 13:34   #14
skyblaze
Senior Member
 
Iscritto dal: Aug 2002
Messaggi: 356
Quote:
Originally posted by "mjordan"



E ovvio che se fai un nuovo standard prendi prima quello che c'era già, o no?
Comunque il C99 aggiunge diverse cose al C.
Innanzitutto potenzia notevolmente la libreria matematica.
Aggiunge il supporto per il numeri complessi e numeri immaginari.
Elimina la regola dell'int implicito (unsigned long non vale più, bisogna scrivere unsigned long int), così come non specificare il tipo di ritorno di una funzione non vale +.
Aggiunge il tipo di dati 'bool' per variabili booleane.
Consente la dichiarazione di variabili in cicli e in mezzo a codice. Per esempio:

Codice:
...
...
for (int i = 0; i < 10; i++) {
        fai_qualcosa();
        ...
}
è perfettamente valido in C99, cosi anche come:
Codice:
int
main(int argc, char ** argv)
{
        int i; /* Variabile */

        printf("Ciao a tutti!\n"); /* Istruzione */

        char ch; /* Altra variabile */

        return 0;
}
Aggiunge i commenti su una sola riga, stile C++
Aggiunge gli array di lunghezza variabile. Per esempio:

Codice:
void 
my_func(int x, int y)
{
        int my_array[x,y];

        ...
}
Aggiunge la nuova parola riservata "restrict", che consente di fare ciò che in C90 bisognava dire a parole (che magari due oggetti puntati non dovevano sovrapporsi).

Aggiunge la parola riservata 'inline' per il function inlining.

Aggiunge un pozzo di altra roba ....

Un bel linguaggio. Il C è sempre + forte.
Lo so che un nuovo standard si rifa a quello vecchio ma quello che volevo dire è che in questo caso ha solo adotatto lo standard ansi senza aggiungere niente e lo ha rinominato iso infatti si chiama anche ansi/iso...ma a quanto hai detto non è cosi......ma...PORC
E io che sto studiando su un libro ansi c che faccio ora?
skyblaze è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 14:00   #15
terrys3
Senior Member
 
L'Avatar di terrys3
 
Iscritto dal: Jan 2001
Messaggi: 8826
Quote:
Originally posted by "skyblaze"

Lo so che un nuovo standard si rifa a quello vecchio ma quello che volevo dire è che in questo caso ha solo adotatto lo standard ansi senza aggiungere niente e lo ha rinominato iso infatti si chiama anche ansi/iso...ma a quanto hai detto non è cosi......ma...PORC
E io che sto studiando su un libro ansi c che faccio ora?
siamo nella stessa situazione per fortuna ho iniziato da poco a studiare, anche se acquistare un nuovo libro e buttare (in senso metaforico) quello che ho non è una bella cosa!!! Mi ero fidato di un amico che studia programmazione da un sacco di anni... ma a quanto pare non era aggiornato!!!
__________________
"In Italia vige la mentalità imperante secondo la quale chi più riesce a fregare il sistema è furbo mentre chi paga è fesso"
terrys3 è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 14:06   #16
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originally posted by "skyblaze"

Lo so che un nuovo standard si rifa a quello vecchio ma quello che volevo dire è che in questo caso ha solo adotatto lo standard ansi senza aggiungere niente e lo ha rinominato iso infatti si chiama anche ansi/iso...ma a quanto hai detto non è cosi......ma...PORC
E io che sto studiando su un libro ansi c che faccio ora?
Le aggiunte sono tante ma non preoccuparti. Non è stato aggiunto nulla che rompa la compatibilità con lo standard ANSI, a parte le nuove funzionalità particolari.
Il qualificatore restrict non cambia la semantica dei programmi.
Certo, se vuoi conoscere le nuove funzionalità devi comperare un libro che le descriva, come quello che ho consigliato prima, ma, in sostanza, il linguaggio non è stato cambiato.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 14:07   #17
skyblaze
Senior Member
 
Iscritto dal: Aug 2002
Messaggi: 356
Quote:
Originally posted by "terrys3"



siamo nella stessa situazione per fortuna ho iniziato da poco a studiare, anche se acquistare un nuovo libro e buttare (in senso metaforico) quello che ho non è una bella cosa!!! Mi ero fidato di un amico che studia programmazione da un sacco di anni... ma a quanto pare non era aggiornato!!!
Anche io sono all'inizio.....oddio ho fatto 2 capitoli che non sono proprio pochini
Il libro me lo ha dato mio cugino che lo aveva usato per l'universita di informatica
A sto punto cosa mi consigliate?Devo veramente cambiare libro e prendere uno ultimo che parla di iso c?Mi pare che le differenze siano abbastanza sostanziali a partire dalle variabili logiche(o booleane)....pensate che nel mio libro a un certo punto dice:"In c non esistono variabili logiche come nel basic"
skyblaze è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 14:21   #18
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Calmi calmi, state attenti tutti.
Il tipo bool è soltanto un typedef ad un intero, quindi in realtà non è strettamente necessario.
Le regole abolite, come quelle dell'int implicito, sono state eliminate, ma sono differenze veramente marginali. In sostanza, a parte chi usa il Kernighan e Ritchie non deve "buttare" nulla. Tutto è applicabile e funzionante.
Inoltre bisogna considerare che la totalità dei compilatori di default accetta la versione ANSI C 89 e successiva revisione C90 e quindi, per compilare programmi "strict C99" bisogna passare dei flag particolari.

Per esempio, il seguente programma in ISO C 99:
Codice:
#include <stdio.h>
#include <stdbool.h> // Il nuovo header per i tipi booleani.

int
main(void)
{
        bool b[10]; // Array booleano. Questo è un commento su una sola riga.

        for (int i = 0; i < 10; i++) // Dichiarazione di variabil ein un ciclo.
                b[i] = false;

        return 0;
}
sotto GCC per essere compilato correttamente necessita del flag `-std=c99' , questo fino a quando il C99 non diverrà "widely adopted", dopo il quale sarà lo standard accettato di default.

Chi usa invece il C traditional (pre-ANSI K&R) dovrebbe aggiornarsi. Molti compilatori stanno eliminando i supporti. Per esempio gcc 3.4 eliminerà gran parte del supporto per il C traditional e molti costrutti non compileranno +, come ad esempio i prototipi del tipo:

Codice:
void my_func(int, int);
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 14:29   #19
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originally posted by "skyblaze"

Anche io sono all'inizio.....oddio ho fatto 2 capitoli che non sono proprio pochini
Se vuoi davvero imparare a programmare altro che 2 capitoli
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2003, 14:32   #20
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originally posted by "mjordan"

Calmi calmi, state attenti tutti.
Il tipo bool è soltanto un typedef ad un intero, quindi in realtà non è strettamente necessario.
Anzi per essere precisi bool è una macro che utilizza il tipo _Bool che è un typedef ad un int.
Anche se il tipo quindi è _Bool, nei nuovi programmi dev'essere usato bool.
Il fatto è che al momento dello standard si era visto che già diversi compilatori avevano già implementato il proprio tipo di dati booleano, quindi è stato scelto il nome _Bool per non rompere la compatibilità con le caratteristiche già esistenti. Per il resto, per il nuovo codice, basta usare bool.
mjordan è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Lo compri una volta, lo giochi dove vuoi...
Qiantinuum annuncia Helios, "il com...
Samsung Galaxy S26 Ultra: una sola novit...
Google prepara Gemini 3 Pro e Nano Banan...
TVS non è solo moto e scooter: ec...
Alexa+ arriva su BMW: gli automobilisti ...
Gemini Deep Research arriva su Google Fi...
Rinvii a catena, Marvel 1943: Rise of Hy...
Xiaomi inaugura uno spazio dedicato ai f...
Rilasciate le specifiche di Bluetooth 6....
L'obiettivo che mette tutto a fuoco: la ...
Meta avrebbe raccolto fino al 10% dei ri...
NVIDIA DGX Spark e videogiochi? Una pess...
Serie Oppo Reno15 confermata: arriva il ...
UPDF 2025: l'editor PDF che fa (quasi) t...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 03:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v