# Programmare in C sotto linux non è la stessa cosa...

## Emulagame

devo scrivere un programma in C (shell) per windows...ma di windows ne sono sprovvisto...

ho un po' di domande che mi assillano:

- se su windows ho quelle 4 librerie in croce contenenti le funzioni (stdio.h, conio.h ecc)

e quindi:

```
#include<stdio.h>

#include<conio.h>
```

su linux qual'è il sostituto di quelle librerie?

```
#include<???>

#include<???>
```

per convertirlo a windows? come posso fare? devo imparare il C ma non solo a scuola...e soprattutto non solo sotto winzozz

grazie mille per l'interessamento

----------

## jubushi

dunque....qualcuna delle librerie può essere usata anche con windows (in teoria) ad esempio stdio.h, ma te lo sconsiglio perchè fa un po di casini,....puoi usare gli standard I/O, cioè iostream (i nuovi compilatori non necessitano del ".h"), iomanip, etc etc...cerca un pò su google per le librerie della classe iostream e vedi cosa trovi...

----------

## CarloJekko

anche i nuovi compilatori di win riconoscono 

#include <iostream>

#include <cstdlib>

#include <cstring>

using namespace std;

ecc..

per il resto credo sia uguale

(per un buon compilatore recente c'è dev-c++ di bloodshed http://www.bloodshed.net/download.html )

----------

## Emulagame

si per quello non c'è problema

ma per convertire il programma in un eleguibile per winzozz?

----------

## iro

stdio.h, come dice il nome, fa parte dello standard.

conio.h invece no e sotto linux non esiste: al suo posto potresti provare le librerie ncurses (curses.h)

----------

## mouser

 *jubushi wrote:*   

> dunque....qualcuna delle librerie può essere usata anche con windows (in teoria) ad esempio stdio.h, ma te lo sconsiglio perchè fa un po di casini,....

 

Questo e' vero anche se posso confermare che utilizzando librerie quali stdio.h, stdlib.h o unistd.h non avrai alcun tipo di problema.....

Queste librerie, infatti, come molte altre che hanno nel nome il suffisso od il postfisso std fanno parte dello standard, ovvero dell'ANSI-C.

I programmi scritti utilizzando unicamente librerie, funzione e sintassi facenti parti dell'ANSI-C, possono essere compilati su qualsiasi piattaforma (ovviamente che metta a disposizione un compilatore C).

Per esempio..... il classico programma helloworld (che di seguito riporto)

```
/* emergeworld.c */

#include <stdio.h>

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

{

 printf("Emerge World!!!\n") ;

 return 0 ;

}
```

E' compilabile indifferentemente con gcc sotto *nix, con compilatori windows (quali borland o vc) o con compilatori mac (di cui attualmente non conosco il nome, ma suppongo che il gcc sia presente anche li), perche', oltre ad essere scritto in ANSI-C, contiene librerie che fanno parte dello stesso.

My 2 eurocent

Ciriciao

mouser  :Wink: 

----------

## Ic3M4n

 *Emulagame wrote:*   

> ma per convertire il programma in un eleguibile per winzozz?

 

puoi utilizzare wine. googleggia un po' che di risposte ne dovresti trovare qualcuna.

----------

## neryo

 *Ic3M4n wrote:*   

>  *Emulagame wrote:*   ma per convertire il programma in un eleguibile per winzozz? 
> 
> puoi utilizzare wine. googleggia un po' che di risposte ne dovresti trovare qualcuna.

 

forse ho capito male... ma a me sembra che vuole fare il contrario.. compilarlo su linux ed eseguirlo su win   :Rolling Eyes: 

----------

## Ic3M4n

beh... wine funziona su linux, non su windows o sbaglio?

comunque se vuole utilizzare linux può fare una cosa tipo questa

mentre questo per esempio è quello che intendevo prima.

----------

## X-Drum

la "conio" è una libreria che sotto linux non esiste

era disponibile per sistemi win9x,dos

comunque cercando su google ci sono molti sostituti 

per conio.h sotto linux

----------

## comio

 *X-Drum wrote:*   

> la "conio" è una libreria che sotto linux non esiste
> 
> era disponibile per sistemi win9x,dos
> 
> comunque cercando su google ci sono molti sostituti 
> ...

 

aggiungo che è una figlia di borland quella libreria  :Wink: 

ciao

----------

## neon

conio.h va assolutamente evitata come la peste, e' stata scritta per sopperire alle mancanze di input/output in console di windows ed ovviamente non esiste su nessun sistema posix.

Personalmente non ne vedo neanche l'utilita' in quanto le uniche persone che ho visto utilizzarla usano semplicemente le funzioni getch() e clrscr(). Per la prima esiste l'equivalente in stdio.h: getchar() e per la seconda ci si arrangia in qualche modo...

Ripeto conio.h e' il male stdlib.h il bene  :Wink: 

(Per quanto dici nel titolo e' vero, programmare in C sotto linux e' molto piu' semplice, sembra che la MS si sia impegnata a complicare la vita ai programmatori)

----------

## Emulagame

ok ora vedo di risolvere il resto dei problemi e mi metto all'opera

per ora lascio aperto il post perchè ho ancora troppi dubbi (ne riparleremo al prossimo ^^)

grazie di tutto per ora

emulagame

----------

## DevOne

[quote="Emulagame"]

```
#include<stdio.h>

#include<conio.h>

```

Ciao, per stdio.h non ci sono problemi perchè è nello standard, quindi lo trovi in tutti i compilatori

ANSI.

l'header conio.h invece non è affatto standard e la sua versione linux è

ncurses.h

curses.h

Ciao

----------

## DevOne

 *comio wrote:*   

> 
> 
> aggiungo che è una figlia di borland quella libreria 
> 
> ciao

 

Concordo pienamente! esisteva già nelle versioni C++ 3.x della borland...ahhh bei tempi quelli!!!

----------

## n3m0

 *CarloJekko wrote:*   

> anche i nuovi compilatori di win riconoscono 
> 
> #include <iostream>
> 
> #include <cstdlib>
> ...

 

Quella sintassi è C++, non C.

iostream è una libreria C++

mentre cstdlib e cstring equivalgono alla classica inclusione di stdlib.h e string.h

in C++ è possibile omettere il .h finale nelle inclusioni e anterporre "c" per includere le vecchie librerie ANSI C.

ancora: i namespace sono "roba" del C++.

 *CarloJekko wrote:*   

> (per un buon compilatore recente c'è dev-c++ di bloodshed http://www.bloodshed.net/download.html )

 

dev-c++ non è un compilatore, ma un IDE (ambiente di sviluppo). 

dev-c++ come compilatore usa il nostro amato gcc/g++.

@Emulagame:

Per quanto riguarda l'argomento del Topic, se si scrive codice ANSI C, questo è portabile su qualsiasi piattaforma dotata di compilatore C che rispetti lo standard ANSI.

Puoi programmare benissimo sotto Linux, facendo attenzione a scrivere codice standard. 

Qualora volessi usare librerie terze parti, assicurati che queste siano disponibili per Windows.

Una volta che hai finito il lavoro, potresti usare stesso il PC-Win che ospiterà l'applicazione per compilare il tutto per Windows. Ovviamente prima dovrai installare un compilatore e le eventuali librerie terze parti che avrai usato.

----------

## Emulagame

non vorrei avere la pappa pronta ma...esiste una documentazione sull ANSI C? in modo che non ci siano incompatibilità tra un O.S e l'altro...vado a googleggiare un po'...

----------

## akiross

Non ho letto tutto, pero' mouser ti correggo:

unistd non e' standard ANSI, su windows non c'e' (unix standard, e' l'header posix e windows non e' posix)

Tornando all'argomento originale

Programmare su Linux e' **ovviamente** diverso. Stiamo parlando di due sistemi operativi molto diversi tra loro come architettura e funzionamento, quindi e' scontato che i programmi siano diversi.

Tanto per fare un esempio: windows non ha fork(), non ha pthreads, non ha message queue, non ha shared memory eccetera, e anche se le strutture logiche sono identiche, magari le interfacce non lo sono.

Se poi la tua programmazione e' ridotta agli standard ANSI C89 e C99, e le librerie e gli header soliti (stdio.h stdlib.h ctype.h string.h math.h e forse qualcun'altra)

Se ti limiti a queste librerie ti garantisco che il programma - se fatto bene - compila su win e linux con lo 0% di modifiche. Pero' detto per inciso, windows fa davvero schifo, e alcune funzioni come fflush a volte non servono minimamente, quindi servono dei codici fatti tenendo conto di questa schifosita' intrinseca del sistema proprietario  :Very Happy: 

Poi vabe, ovvio che se vuoi usare cose figherrime POSIX, su windows te le scordi... al massimo le porti sui vari unix, bsd eccetera, ma windows proprio no.

Ovviamente ti consiglio di usare librerie cross platform nel caso dovessi fare codice piu' complesso... tipo SDL per il multimedia, Qt/Gtk/Wx per le GUI (e assolutamente non le WinAPI), ODBC per i database eccetera.

Happy coding  :Very Happy: 

Ciauz

----------

## Emulagame

avevo problemi con dev-cpp nell'installarlo e quindi mi sono dedicato a cercare un altro compilatore (IDE) Kdevelop...è completo,semplice e soprattutto non è un alpha al 99% come dev-cpp

ora mi cimento un pochino (anzi domani perchè adesso vado a nanna)

grazie mille per le dritte

emulagame

----------

## nomadsoul

 *jubushi wrote:*   

> dunque....qualcuna delle librerie può essere usata anche con windows (in teoria) ad esempio stdio.h, ma te lo sconsiglio perchè fa un po di casini,....puoi usare gli standard I/O, cioè iostream (i nuovi compilatori non necessitano del ".h"), iomanip, etc etc...cerca un pò su google per le librerie della classe iostream e vedi cosa trovi...

 

ma non si stava parlando di C?

da quando il C ha le classi scusate?

----------

## Emulagame

ho un problemino che mi assilla....

le graffe { } sotto linux corrispondono ad

```
alt-gr shift è {  

e alt-gr shift + }
```

se voglio tenermi il solito alt+123 e alt+125? come posso fare?

ho provato anche con alt-gr 7 e alt-gr 0 ma non funzionano...da cosa è dovuto?

----------

## oRDeX

mh..raga' stiamo mischiando un bel po' di C al C++ eh....non e' bene   :Crying or Very sad: 

----------

## Emulagame

per compilare e visualizzare quello che ho fatto su kdevelop? nel menu "compila" non c'è niente...

```
#include<iostream.h>

//----------------//

int A,B,S;

main()

   {

    printf("inserire il valore di A: ");

    scanf("%d", &A);

    printf("\n);

    printf("inserire il valore di b: ");

    scanf("%d", &B);

    printf("\n);

    S=A+B;

    printf("il valore di S è: %d", S);

    getchar();

   return 0;

   }
```

questo è il sorgente (insomma...non è il massimo ma c'è)

grazie mille

----------

## oRDeX

scusate se rompo le scatole, ma è una pagina di codice sorgente non uno "script"   :Embarassed: 

----------

## Sasdo

 *oRDeX wrote:*   

> scusate se rompo le scatole, ma è una pagina di codice sorgente non uno "script"  

 

ehehe... giusta osservazione...

...kdevelop non so come funzioni ma per le graffe sono:

ALTGR+7 {

ALTGR+0 }

ma ti consiglio di farti un file:

```

# cat ~/.Xmodmap

keycode 115 = braceleft

keycode 116 = braceright

```

che vuol dire che quando pigi il tasto windows di destra ti stampa una { e quando pigi il tasto windows di sinistra ti stampa una }.

per poter correttamente usare questa simpatica cosuccia devi però:

a) essere sicuro che i numeri corrispondano a quei tasti (per saperlo: lancia da console xev)

b) una volta che hai creato il file devi lanciare xmodmap ~/.Xmodmap in questo modo "carichi" le modifiche che hai applicato, attento, dovrai lanciare questo comando ad ogni log in sotto X!

ciaoo!

il Sasdo

----------

## DevOne

 *Emulagame wrote:*   

> 
> 
> ```
> 
> #include<iostream.h>
> ...

 

 :Shocked:   :Confused:   :Shocked:   cosa vedono i miei okki!!!!

Fai un'pò di confusione tra C e C++...

iostream.h è inutile in C perchè stai usando tutte funzioni presenti in stdio.h

e altre piccole cose che, vabbè, possono passare...

----------

## akiross

Ecco, a questo punto so che fa brutto, ma visto il programma qua sopra direi di andare su google e cercare:

tricky C -> e' per DOS, ma e' un buon testo

gapil -> guida alla programmazione in linux, direi che e' il primo testo da guardare quando si programma sui linux in C  :Very Happy: 

Non e' che te lo dico per essere scortese o con aria di superiorita', ma solo per dirti che visto che ci sei, e mi sembra tu sia in una fase abbastanza iniziale nella programmazione in C (tanto da confondere C e C++, cosa che ho fatto anche io a suo tempo  :Razz: ) allora ti do il consiglio che a me non e' mai stato dato, e che e' il piu' valido anche se scontato:

quei testi sono ottimi, leggili e imparali, sottolineo __imparali__

Se hai un manuale di C, leggilo come un libro di testo, prova i codici, metti in pratica, inventa esercizi. La piattaforma di sviluppo conta poco per ora.

Lo dico ogni volta che vedo un nuovo programmatore... semplicemente perche' per mia sfortunaccia ne ho visti tanti, e pochi sono davvero validi (e il fatto che io sia una chiavica a programmare fa pensare alla misera condizione dei programmatori italiani).

Comunque, per una osservazione piu' veloce ed estesa:

iostream sono gli stream di Input Output. Gli stream sono una peculiarita' del c++ (anche del C a dire il vero, ma solitamente quando si parla di stream ci si riferisce alla versione object oriented del C++). Gli stream in questione sono piu' banalmente riferiti con cin e cout. Tu in quell'esempio fai diversi errori:

Il primo e' che includi <iostream.h>, mentre sappi che lo standard C++ vuole che l'header sia <iostream> senza .h

Il secondo e' che programmi in C++, e non usi i namespace. Mi hanno dato un sacco di grattacapi, quindi tienine conto.

Il terzo e' che se usi il c++, non dovresti usare le vecchie (ma pur sempre mitiche) printf e scanf.

Queste sono tipiche del C, e andrebbero evitate, per coerenza, in un programma C++.

Tecnicamente risolvi 2 dei 3 errori sopra citati con un misero <stdio.h> anziche' <iostream.h>  :Smile: 

Leggi e scrivi tanto codice  :Smile: 

Ciauz

----------

## Emulagame

praticamente dovrei sviluppare un programma in C (e non C++, non pensavo fosse un errore includere una libreria usata per compilare in C++)

quello che non riesco a capire è:

- perchè costano troppo i manuali di C?

- perchè oggigiorno è più facile trovare della documentazione sul C++ anzichè C che è la base di tutti i linguaggi (dopo il codice macchina)

- perchè si trova poca documentazione su internet sulla programmazione? oppure si trova ma è sempre troppo vaga per lo scopo che si deve raggiungere?

- c'è tanta differenza dal C al C++ (oltre alle funzioni molto più evolute e la possibilità di programmare a oggetti senza troppi sbattimenti)?

- come posso programmare e compilare senza troppi sbattimenti utilizzando kdevelop o un qualsiasi editor (anche kate)? (approposito...come faccio a compilare sotto kdevelop? esce sempre con lo stato 1....ma non vedo nessuna spiegazione dell'errore)

ho visto molta gente come me che molla sin dall'inizio perchè la gente gli dice che per imparare a programmare ci vogliono come minimo 6 mesi belli abbondanti di studio e pratica....non mi faccio tanti problemi un tempo ero intenzionato a programmare da solo...ora programmo (che per ora programmare per me è ancora una parola sconosciuta e troppo grossa) con l'ausilio di un professore che di linux non se ne intende meno che meno di programmazione sotto esso (insomma è come me)

quindi...per me programmare sta diventando una passione ma anche una frustrazione...passare da un sistema operativo all'altro non è così facile..il doppioclick non c'è più qui o usi la testa o rimani a piedi (e questo mi sembra più che giusto) ma se si parla di programmazione è un altra cosa...cambia radicalmente anch'essa e questo mi scombussola...siccome purtroppo uno alle prime armi non può fare salti da gigante.

se chiedo aiuto sulla programmazione sono motivato e non vedo la gente che mi da consigli scortese ma bensì la vedo come manna dal cielo.

certa gente ti dice di tirare avanti da solo ed io per mia fortuna ho voi come appoggio (e non è poco)

grazie mille per le dritte che mi state dando e per il tempo che sprecate per spiegare queste cose.

----------

## ilithiiri

- perchè costano troppo i manuali di C?

Un buon manuale di C (K&R, per esempio) costa _meno_ di un manuale su una "feature" di Java.

- perchè oggigiorno è più facile trovare della documentazione sul C++ anzichè C che è la base di tutti i linguaggi (dopo il codice macchina)

Perché oggigiorno conta più il ++ e il dot-qualcosa delle "basi" solide

- perchè si trova poca documentazione su internet sulla programmazione? oppure si trova ma è sempre troppo vaga per lo scopo che si deve raggiungere?

Perché per "imparare a programmare" esistono interi corsi di studio (dalle superiori in poi).

Io imparai a suo tempo, nel '94 o giù di lì, con un corsetto di C su floppettini e con il K&R come riferimento (in inglese).

- c'è tanta differenza dal C al C++ (oltre alle funzioni molto più evolute e la possibilità di programmare a oggetti senza troppi sbattimenti)?

Si. Tant'è che in C compili con gcc, in c++ con g++  :Wink: 

A parte queste amenità, la sintassi è praticamente la stessa, ma il C++ consente di fare delle cose "aggiuntive" al C, che il C non supporta allo stesso modo (keywords, overloading, etc).

- come posso programmare e compilare senza troppi sbattimenti utilizzando kdevelop o un qualsiasi editor (anche kate)? (approposito...come faccio a compilare sotto kdevelop? esce sempre con lo stato 1....ma non vedo nessuna spiegazione dell'errore)

Apri una shell e ti scrivi un Makefile.

Dalla shell quando devi compilare scrivi `make'.

Io con il tempo mi son preparato un makefile "standard" che compila tutti i *.c presenti nella directory corrente per creare un eseguibile di nome "prog".

Sono 5/6 righe di testo, e ti salva molto tempo scrivere 'make clean && make' piuttosto che dare ostrusi e lunghi comandi.

ho visto molta gente come me che molla sin dall'inizio perchè la gente gli dice che per imparare a programmare ci vogliono come minimo 6 mesi belli abbondanti di studio e pratica....

Io penso che i miei 11 anni di programmazione non bastino a saper programmare.

No, neanche a conoscere la sintassi.

Toh, il makefile "comune" per progetti c in cui nella stessa cartella tutti i files .c servono per creare l'eseguibile.

Creare la directory "obj" in cui vanno a rifinire tutti i files oggetto.

```
#Makefile, sostituire gli 8 spazi (il forum non ammette tab) con un VERO tab.

CC=gcc

CFLAGS=-O2 -ggdb -g3 -Wall

LFLAGS=

EXE=prog

SRC_FILES := $(wildcard *.c)

OBJ_DIR=obj

OBJ_FILES := $(patsubst %.c,$(OBJ_DIR)/%.o,$(SRC_FILES))

INC_FILES := $(wildcard h/*.h)

all: $(EXE)

rembackup:

        rm -f *~ #~

etags:

        @etags *.cpp

clean:

        @rm -f *~ $(OBJ_DIR)/*.o $(EXE) tags TAGS

$(EXE): $(OBJ_FILES)

        $(CC) $(LFLAGS) -o $(EXE) $(OBJ_FILES)

$(OBJ_DIR)/%.o: %.c

        @$(CC) $(CFLAGS) -c $< -o $@

```

----------

## randomaze

 *Emulagame wrote:*   

> praticamente dovrei sviluppare un programma in C (e non C++, non pensavo fosse un errore includere una libreria usata per compilare in C++)

 

Usare cose C++ in C é un errore formale, probabilmente il compilatore (o meglio, alcuni compilatori) lo digeriscono ma non é una cosa bella a vedersi. Sopratutto se stai imparando é bene evitare certe pratiche fuori standard che possono portare a comportamenti imprevedibili.

Nota che, mentre mischiare C e C++ é una porcheria da evitare, talvolta capita il contrario, ovvero da C++ richiamare codice/librerie del C. Certo, se possibile meglio evitare anche questo.

 *Quote:*   

> quello che non riesco a capire è:
> 
> - perchè costano troppo i manuali di C?

 

Problema comunque a tutti i manuali di informatica. Almeno a quelli che servono a qualcosa.

Il K&R comuqnue non dovrebbe costare molto, anzi, mi sa che qualche tempo fa lo ho visto in edicola allegato a una qualche rivista.

 *Quote:*   

> - perchè oggigiorno è più facile trovare della documentazione sul C++ anzichè C che è la base di tutti i linguaggi (dopo il codice macchina)

 

Scrivendo "tutorial C" su google compaiono 33 milioni di risultati. Se anche solo l'1% di quelli si riferisce al C credo che siano più che sifficienti.

Ad esempio questo che mi sembra scritto da un tizio competente.

 *Quote:*   

> - perchè si trova poca documentazione su internet sulla programmazione? oppure si trova ma è sempre troppo vaga per lo scopo che si deve raggiungere?

 

Puoi fare qualche esempio? Perché o cerchi un esempio ecessivamente specialistico oppure forse la query andrebbe rifinita meglio

 *Quote:*   

> - c'è tanta differenza dal C al C++ (oltre alle funzioni molto più evolute e la possibilità di programmare a oggetti senza troppi sbattimenti)?

 

La differenza sostanziale tra il C e il C++ é, appunto, la programmazione ad oggetti.

In C++ si programma ad oggetti.

In C no. Anche se possibile usare tecniche tipiche dell' object oriented con il C (come fa, ad esempio il GTK), non é programmazione ad oggetti.

 *Quote:*   

> - come posso programmare e compilare senza troppi sbattimenti utilizzando kdevelop o un qualsiasi editor (anche kate)? (approposito...come faccio a compilare sotto kdevelop? esce sempre con lo stato 1....ma non vedo nessuna spiegazione dell'errore)

 

Usa l'editor per scrivere il programma e, per compilare, vai sulla shell  :Wink: 

 *Quote:*   

> ho visto molta gente come me che molla sin dall'inizio perchè la gente gli dice che per imparare a programmare ci vogliono come minimo 6 mesi belli abbondanti di studio e pratica....

 

Dipende... comunque non sottovaluterei la possibilità di iniziare a programmare usando linguaggi meno ostici del C, come ad esempio python o java/mono

Happy Hacking  :Smile: 

----------

## Emulagame

si ok ma a scuola non vogliono farmi programmare in python ma bensì in C; mi sarebbe piaciuto programmare in python ma o continuo uno o continuo l'altro...è pesante già con uno...

per rendere eseguibile lo script sopra riportato (il make generale) devo creare un file senza estensione e dargli i permessi con chmod +x?? (ricordiamoci che non posso utilizzare root alla vanvera senò mio padre mi uccide psicologicamente,fisicamente,esternamente ecc..ecc...

la guida in inglese è ottima

andrò in libreria a vedere se ci sono sti benedetti manuali

per ora è tutto grazie mille

----------

## randomaze

 *Emulagame wrote:*   

> per rendere eseguibile lo script sopra riportato (il make generale) devo creare un file senza estensione e dargli i permessi con chmod +x?? (ricordiamoci che non posso utilizzare root alla vanvera senò mio padre mi uccide psicologicamente,fisicamente,esternamente ecc..ecc...

 

Non c'é bisogno, ti basta chiamarlo Makefile e poi il programma make se lo va a cercare automaticamente.

Per la scelta del linguaggio... beh, si se la richiesta viene dall'esterno ti devi adattare.

----------

## Emulagame

non ho capito dove va messo quello script...sii più chiaro che sono come un cieco in un campo minato (vado a vanvera e se combino casini sono guai)

----------

## randomaze

 *Emulagame wrote:*   

> non ho capito dove va messo quello script...sii più chiaro che sono come un cieco in un campo minato (vado a vanvera e se combino casini sono guai)

 

Nella stessa directory dove si trovano i sorgenti.

Tieni presente che, qualora stiamo parlando di un solo file sorgente puoi evitare il makefile e scrivere, direttamente:

```
gcc tuofile.c -o tuofile
```

in questo modo il gcc compilerà "tuofile.c" nel programma "tuofile".

----------

## Emulagame

e kdevelop non lo fa in automatico perchè gli devo dare io questi comandi?

comunque...ora provo

----------

## Sasdo

se vuoi della documentazione C:

Appunti C

Sono dei richiami di C ma sono dettagliatissimi.

Li ha scritti un mio prof dell'università che è un manico del C.

Forse non sono leggibilissimi ma secondo me sono molto completi

Ciao!

----------

## Emulagame

leggermente complicati ma se letti con calma dicono quasi tutta la base per iniziare a programmare

 *Quote:*   

> Puoi fare qualche esempio? Perché o cerchi un esempio ecessivamente specialistico oppure forse la query andrebbe rifinita meglio 

 

se devi cucinarti un piatto di pasta non coltivi il grano..lo fai crescere..ti fabbrichi la pasta..la cuoci e te la mangi, ti limiti alle ultime 2 funzioni che ho scritto

stessa roba per il C: se devi fare un comunissimo sorgente che faccia 2+2 ti studi la filosofia di quelli che hanno creato il computer, come lo hanno creato, quando hanno iniziato a programmare,quando è nato il B, come si è evoluto al C, come hanno aggiunto le funzioni nel corso degli anni, com'è la logica come  si programma uno sorgente che faccia 2+2...ti limiti a svolgere le ultime 2

per ora vado a buttarmi nella programmazione (che inizio a masticarla piano piano)

grazie mille

----------

## Ic3M4n

si, ok... ma il tuo scopo non è poter arrivre a fare 2 + 2. per progettare un qualcosa di più completo uno deve utilizzare un metodo, un progetto. che si basi su UML, scrittura TOP - DOWN o quello che vuoi... però sapere la storia è importante, ti serve per sapere quello che stai facendo.

----------

## DevOne

 *Emulagame wrote:*   

> si ok ma a scuola non vogliono farmi programmare in python ma bensì in C; mi sarebbe piaciuto programmare in python ma o continuo uno o continuo l'altro...è pesante già con uno...
> 
> 

 

Vogliono farti programmare in C a scuola?!?

Ma se non hai le basi per farlo, come pretende la scuola di farti programmare in C?????

La programmazione in C è un'arte e non bastano 6/10 mesi per impararla, ma anni!!

Io ci lavoro da 9 anni con il C e ti assicuro che nonostante abbia usato tutti i costrutti immaginari, c'è

sempre qualche particolare che mi continua a stupire!!

E non sono uno che lo usa solo per esigenze di lavoro, perchè sono un maniaco di questo linguaggio!

----------

## Ic3M4n

ma da qualche parte avrai pure imparato no? che io sappia il posto in cui si impara (principalmente) ha il nome di scuola.

----------

## DevOne

 *Ic3M4n wrote:*   

> ma da qualche parte avrai pure imparato no? che io sappia il posto in cui si impara (principalmente) ha il nome di scuola.

 

Se ti riferisci alla mia ultima risposta, il posto dove ho cominciato è stato a casa mia, con un bel libro e tanta

voglia di imparare questo linguaggio!   :Laughing: 

----------

## Ic3M4n

beh... però credo che gli autodidatti siano una minoranza... come puoi vedere quasi tutti i corsi superiori a carattere scientifico incorporano un qualche linguaggio di programmazione. così come se vuoi fare ingegneria, anche edile, ti fanno il corso di C o C++.

----------

## DevOne

 *Ic3M4n wrote:*   

> beh... però credo che gli autodidatti siano una minoranza... come puoi vedere quasi tutti i corsi superiori a carattere scientifico incorporano un qualche linguaggio di programmazione. così come se vuoi fare ingegneria, anche edile, ti fanno il corso di C o C++.

 

Beati loro!

Ai miei tempi quando facevo lo scientifico, non esisteva uno straccio di corso anche pur lontanamente informatico!!

Solo ragioneria, indirizzo informatico   :Crying or Very sad: 

E quindi mi sono dato da fare da solo...  :Laughing: 

----------

## Sasdo

 *Ic3M4n wrote:*   

> beh... però credo che gli autodidatti siano una minoranza... come puoi vedere quasi tutti i corsi superiori a carattere scientifico incorporano un qualche linguaggio di programmazione. così come se vuoi fare ingegneria, anche edile, ti fanno il corso di C o C++.

 

Già, a me in terza superiore mi hanno dato un'infarinatura di C, me ne sono innamorato e ora sto a fare informatica a Bologna e il C sta diventando il mio pane quotidiano!

Yuppi!

----------

## Emulagame

ho iniziato a ragionare su come si potesse programmare quando utilizzavo game maker con il suo linguaggio (GML)

è stato da li che il C mi attira sempre di più ho provato a prendere della documentazione ma non è stato facilissimo soprattutto perchè non avevo tutte le basi e soprattutto non avevo tempo (causa scuola)

ora mi ritrovo a fare il 1° anno di elettronica (3 anni di specializzazione (2+3)) con degli asini di professori che sanno fare solo doppioclik e termina applicazione...linux nella mia scuola è bandito perchè non c'è nessun docente che ha le palle per lavorarci sopra (lasciamo perdere un docente che ha installato suse e non lo ha nemmeno fatto partire)

nella scuola attaccata alla mia stanno facendo dei corsi di linux ma non penso su gentoo....e soprattutto non posso andare perchè non sono un loro studente.

programmare sotto windows è una emerita stronzata, penso proprio che la vera programmazione sia nata da linux e continuerà così per un bel po'

ieri sera ho compilato un hello world giusto per fare...con qemacs e mi piace...mi piace un casino...non c'è più il solito F9, compila, butta qualche errore, blocco totale e riavvio del computer....c'è gcc -E hello.c -o hello.cpp; gcc -x cpp-output -c hello.cpp -o hello.o; gcc hello.o -o hello; ./hello: hello world....ti gratifica mica male ^.^!

avete ragione comunque....ci vuole tanta tanta tanta pratica....quindi...vado a esercitarmi

----------

## Ic3M4n

 *Sasdo wrote:*   

> Già, a me in terza superiore mi hanno dato un'infarinatura di C, me ne sono innamorato e ora sto a fare informatica a Bologna e il C sta diventando il mio pane quotidiano! 

 si, infatti... credo che sia più o meno la regola e che DevOne sia l'eccezione... solo che ho letto il suo post come un: perchè adesso a scuola insegnano il C?

su questo si potrebbe discutere, ovvero: insegnano il C o un mix strano di C e C++?

tipo io ho studiato C++ procedurale senza namespace e senza niente. e se mi chiedono cosa ho studiato che cosa rispondo? non lo so... un linguaggio inventato dal prof... ma saremmo ot.

----------

## comio

 *Emulagame wrote:*   

> 
> 
> programmare sotto windows è una emerita stronzata, penso proprio che la vera programmazione sia nata da linux e continuerà così per un bel po'
> 
> 

 

non credo che programmare sotto windows sia così banale e stupido... dipende un po' da quello che fai... le winapi sono un macello di primo ordine, ma comunque ci sono ottimi linguaggi di supporto.

Poi non facciamo queste distinzioni fra "vera programmazione" e "programmazione del tubo"... dipende sempre quale è il tuo obiettivo da raggiungere.

Non voglio difendere windows, ma è riduttivo usare questi luoghi comuni.

Comunque per programmare bene, a mio avviso, non serve il calcolatore. Prorammare bene, significa pensare bene. Quindi progettare bene. Poi che il tutto lo si dica in C piuttosto che in VB, piuttosto che PincoPallo, è una sola attuazione delle idee. Ovviamente per ogni scopo c'è l'arnese giusto. Quindi fare un Sistema Operativo in VB è improponibile... ma è altrettanto improponibile fare un ERP in C.

ovviamente tutto IMHO.

ciao

----------

## Emulagame

sto dicendo che il C è molto più adattato per linux che per windows...ovvio visual basic è ottimo per creare programmi che gestiscono databasi (mio padre programmava in VB) come ogni linguaggio avrà il suo ambiente adatto...

la testa è sempre stato il mio miglior calcolatore gh gh senza questa non vado da nessuna parte

----------

## comio

 *Emulagame wrote:*   

> sto dicendo che il C è molto più adattato per linux che per windows...

 

Non sono convinto di questa affermazione. Siamo OT dell'OT. Comunque windows è scritto in C e C++ (nella bae... poi per le varie GUI è un altro discorso).

ciao

----------

## Emulagame

ritornando IT

```
marco@wks002 ~ $ gcc equaz.o -o equaz

/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/../../../crt1.o(.text+0x18): In function `_start':

: undefined reference to `main'

equaz.o(.text+0x146): In function `Main':

: undefined reference to `sqrt'

equaz.o(.text+0x182): In function `Main':

: undefined reference to `sqrt'

collect2: ld returned 1 exit status
```

nel disperato tentativo di compilare il sorgente che ho creato mi sono imbattuto in un problemuccio non da poco....la radice quadrata...ne ho provate di tutte...mettendo la variabile delta sotto double, sotto float ecc...

questo è il listato:

```
//equazione di II grado//

#include <stdio.h>

#include <math.h>

int A,B,C;

float X1,X2; 

double delta;

int Main()

{

    printf("immettere il valore di A:");

    scanf("%d", &A);

    printf("immettere il valore di B:");

    scanf("%d", &B);

    printf("immettere il valore di C:");

    scanf("%d", &C);

    if(A==0)

        {

            if(B==0)

                {

                    printf("l'equazione non e' valida\n");

                    return 0;

                }

            else

                {

                    printf("l'equazione e' di primo grado");

                    return X1=X2=-C/B;

                }

        }

    else

        {

            delta=B*B-4*A*C;

            if(delta>0)

                {

                    X1=((-B)-(sqrt(delta)))/(2*A);

                    X2=((-B)+(sqrt(delta)))/(2*A);

                    printf("il valore di X1 e': %d ed il valore di X2 e': %d",X1,X2);

                }

            else

                {

                    printf("l'equazione non e'realizzabile!");

                }

        }

     getchar();

     return 0;

 }
```

dove sto sbagliando?

----------

## Sasdo

devi linkare le librerie di matematica:

```
gcc programma.c -o programma -lm
```

----------

## Delta9

```
marco@wks002 ~ $ gcc equaz.o -o equaz -lm
```

----------

## soulinafishbowl

premesso che conosco il c++ ma non il c, comunque:

```

int A,B,C; 

float X1,X2; 

double delta; 

int Main() 

{

//etc... 

    if(A==0) 

        { 

            if(B==0) 

                { 

                    printf("l'equazione non e' valida\n"); 

                    return 0; 

                } 

            else 

                { 

                    printf("l'equazione e' di primo grado"); 

                    return X1=X2=-C/B; 

                }

```

1. Main() 

non andrebbe minuscolo?

2. return X1=X2=-C/B

secondo me intendevi printf("qualcosa"); poi return 0;

inoltre main() ritorna un int; X1 ed X2 sono float. certo C/B è int e quindi X1 può essere castato ad int, ma non so se il compilatore sia d'accordo...

----------

## DevOne

 *Emulagame wrote:*   

> 
> 
> #include <stdio.h>
> 
> #include <math.h>
> ...

 

 :Very Happy: 

la funzione di ingresso deve essere main e non Main.

Per risposta agli altri, si mi meraviglio che alle scuole superiori si insegni a programmare!

Ai miei tempi, non esisteva, forse perche i Pc costavano ancora un botto! (un 486 che era il top in quel periodo, altrimenti ti dovevi accontentare di un 386,  costava 5 milioni!)

Non sottovalutiamo anche la programmazione Win...in questo sistema operativo è molto più difficile usare il C e le API rispetto a linux.

Su quest ultimo l'ho trovato davvero molto facile e addirittura mi ha dato la sensazione, ripeto solo la sensazione, di essere superficiale.

EDIT: 

dalla mia esperienza, ho capito che fare da autodidatta ti permette di capire a fondo tutti gli aspetti e le problematiche di un linguaggio

e di risolvere ogni problema con la tua testa, sbattere finchè non lo hai risolto, e soprattutto non subisci l'influenza inevitabile che 

qualsiasi docente ti induce   :Wink: 

Un'pò come imparare un linguaggio perchè ne sei costretto dal lavoro: è il massimo della superficialità rispetto ad una persona che lo ha 

imparato perchè gli piace, e poi usa le sue conoscenze per lavorare anche! tutto imho

----------

## randomaze

 *DevOne wrote:*   

> Per risposta agli altri, si mi meraviglio che alle scuole superiori si insegni a programmare!
> 
> Ai miei tempi, non esisteva, forse perche i Pc costavano ancora un botto! (un 486 che era il top in quel periodo, altrimenti ti dovevi accontentare di un 386,  costava 5 milioni!)

 

Beh adesso non esageriamo con queste meraviglie... "ai miei tempi" alle superiori insegnavano il Pascal sul PDP-11  :Rolling Eyes: 

----------

## jikko

 *randomaze wrote:*   

>  *DevOne wrote:*   Per risposta agli altri, si mi meraviglio che alle scuole superiori si insegni a programmare!
> 
> Ai miei tempi, non esisteva, forse perche i Pc costavano ancora un botto! (un 486 che era il top in quel periodo, altrimenti ti dovevi accontentare di un 386,  costava 5 milioni!) 
> 
> Beh adesso non esageriamo con queste meraviglie... "ai miei tempi" alle superiori insegnavano il Pascal sul PDP-11 

 

ma di che "secolo" siete   :Razz:  ? 

io sto imparando il c++ su dei decenti p3, per mia fortuna io ho sempre con me il mio fido guts (portatile ;P), per cui vai di Gentoo e g++  :Smile: .

e da quest' anno anche qualche nozione di java  :Smile: 

----------

## DevOne

 *randomaze wrote:*   

> 
> 
> Beh adesso non esageriamo con queste meraviglie... "ai miei tempi" alle superiori insegnavano il Pascal sul PDP-11 

 

 :Laughing: 

Questo mi fa sentire meglio   :Cool: 

----------

## Emulagame

ok ora che ho compilato linkandogli pure le librerie math funziona...ma ha ancora qualche problema....

per far si che il risultato venga visualizzato come frazione? perchè mi vengono dei valori assurdi (oppure non ho messo le variabili nel posto giusto...come avete detto voi)

comunque sono contento questo è già il secondo che tiro fuori (a stenti..ma lo tiro fuori)

emulagame

----------

## jikko

non ho il codice sotto mano, e quando feci la cosa era per c++.

se ho capito bene tu vorresti inserire una frazione con la seguente sintassi:

```

8/8

```

la logica diestro questa funzione, o meglio quella che ho usato io era:

leggo i dati immessi come una stringa, vado a cercare il carattere '/' quando trovo questo carattere divido in due la stringa, la parte prima, dalla posizione 0 fino a quella trovata viene poi convertita, tramite un cast, in interi o in un tipo numerico, dopo di che la parte dopo '/' fino al carattere di fini stringa '/0' ha la stessa sorte, stando attento a far finire la prima parte nella variabile che conterra il numeratore e la seconda parte nella variabile che conterrà il denominatore.

----------

## Emulagame

dovrei chiamare delle variabili num e den (numeratore e denominatore)?

vedrò di farmi uno schema con quello che hai scritto e modificherò il sorgente

le variabili sono globali giusto? e siccome non so che risultato esce le metto in float (correggimi se sbaglio)

grazie mille

----------

## jikko

 *Emulagame wrote:*   

> 
> 
> e siccome non so che risultato esce le metto in float (correggimi se sbaglio)
> 
> 

 

ni, in senso che io avevo incluso questa funzione in una classe, e comunque se stai a vedere, le frazioni "standard" hanno degli interi sia al numeratore che al denominatore (salvo quando inserite in casi particolari come equazioni o non so cos' altro); le mie variabile, almeno quelle usate per "spezzare" la stringa erano locali.

----------

## akiross

Comunque c'e' un forum apposito per la programmazione, tra quelli disponibili su gentoo  :Smile: 

E cavolo... magari e' da poco che posti su un forum, ma le tue domande sono un po' banali, leggi e fai un po' di pratica altrimenti se ti dobbiamo rispondere ogni volta che scrivi una maiuscola anziche' una minuscola siam fritti.

Il primo metodo per programmare e' fare pratica, poi vengono le domande (che rimangono sempre e comunque giuste).

Leggi codici e manuali, i forum ci sono per gli argomenti particolari che non sono ipersupermegatrattati.

Vabe, sara' che io ho iniziato a programmare senza internet, ma sulla programmazione c'e' tutta la documentazione che vuoi... chiedere cose simili su un forum mi sembra uno spreco di tempo.

Ah bhe, son stanco, magari sono stato acido ma comprendetemi sono appena tornato a casa  :Very Happy: 

----------

## Emulagame

il tuo ragionamento non fa una piega cercherò di non intasare il forum con queste domande troppo banali (prima di postare ho ragionato e sbattuto la testa (non abbastanza) sul monitor) (e soprattutto non c'è solo questo forum per parlare di programmazione ^^)

se qualcuno gentilmente chiuderebbe il topic glie ne sarei grato

quindi: ogni giorno imparo sempre di più e non per questo mi devo fermare per 4 stupidate che posso risolvermi anche da solo

grazie mille per la collaborazione e per la vostra pazienza

emulagame

----------

## randomaze

 *akiross wrote:*   

> E cavolo... magari e' da poco che posti su un forum, ma le tue domande sono un po' banali, leggi e fai un po' di pratica altrimenti se ti dobbiamo rispondere ogni volta che scrivi una maiuscola anziche' una minuscola siam fritti.

 

akiross, nessuno deve rispondere. Semplicemente qualcuno arriva, legge il thread e, se gli va, risponde e/o aiuta. Non c'é nessuna imposizione.

Peraltro, dato che esistono linguaggi case-sensitive e altri case-insensitive, puó capitare di fare confusione con le maiuscole.

 *Emulagame wrote:*   

> se qualcuno gentilmente chiuderebbe il topic glie ne sarei grato

 

Perché? Il topic c'é... il fatto che pensi che a te non serva piú non significa che non potrebbe servire ad altri tra una settimana o tra un anno!

----------

## jikko

visto che c'e' sfruttiamolo.

qualcuno sa dirmi dove andare a cercare info in merito alla gestione dei file in c++ per GNU/Linux?

----------

## akiross

jikko, c'e' una sezione apposita tra i post utilissimi  :Smile: 

randomaze, so che non siamo obbligati a rispondere, ma e' un po' una questione di principio... se qualcuno chiede qualcosa, e io so la risposta, per principio rispondo perche' nessuna domanda e' sbagliata, io sono il primo a chiedere e il primo a dare risposte se posso.

Io starei piu' che volentieri qui a spiegare tutto quello che so e che penso sulla programmazione in C e C++, ma visto che e' un forum, il buonsenso preferirebbe la ricerca prima dei post, soprattutto su argomenti introduttivi.

Va benissimo chiedere dove iniziare, per carita', ma chiedere quanto basta  :Very Happy: 

----------

## Cazzantonio

Ecco un topic che si trova perfettamente a suo agio nel subforum

Moved from Italian to Off Topic.

----------

