Programmazione

gGiova

e-ehi.
Passando sulla falsariga dell'altro thread, e visto che l'argomento non era presente creo. Qui per discutere, oppure per chiedere chiarimenti su dati, variabili e comandi di qualsiasi linguaggio di programmazione (se non avete capito nulla potete pure andare)

Giusto per cominciare:

C:

#include<stdio.h>

#include<stdlib.h>

int main () {

int somma1;

int num1;

int num2;

int num3;

int somma2;

int num4;

int num5;

int num6;

int sottr;

int num7;

int num8;

system("title Somma di tre numeri");

system("color C0");

system("color 0");

printf ("Inserisci il primo valore:\n");

scanf("%d", &num1);

printf ("Inserisci il secondo valore:\n");

scanf("%d", &num2);

printf ("Inserisci il terzo valore:\n");

scanf("%d", &num3);

somma1 = num1 + num2 + num3;

printf("la somma dei tre numeri e: %d \n" ,somma1);

printf ("Inserisci il primo valore:\n");

scanf("%d", &num4);

printf ("Inserisci il secondo valore:\n");

scanf("%d", &num5);

printf ("Inserisci il terzo valore:\n");

scanf("%d", &num6);

somma2 = num4 + num5 + num6;

printf("la somma dei tre numeri e: %d \n" ,somma2);

sottr = somma1 - somma2;

printf ("\nsottraendo i due risultati si ottiene: %d \n" ,sottr);

system("pause");

return 0;

}
=

(n1+n2+n3)-(n4+n5+n6)

A scuola ci avevano chiesto semplicemente di sommare tre numeri, io ho voluto proseguire.

Il programma funziona perfettamente, solo non sono soddisfatto di una cosa: così com'è ora, quando inserisco n6 e premo invio da il risultato della seconda parentesi e subito da anche il risultato della sottrazione. No, io vorrei un printf("Premere invio per sottrarre i risultati") dopo la risoluzione della seconda parentesi: tu invii e ti esce il risultato della sottrazione. Ho provato in tutti i modi, ho pure chiesto al professore e non ci è arrivato neanche lui dicendomi poi di non farmi troppi problemi. Credo che potrei risolvere facendo uno switch, ma dovrei andare a riscrivere tutto (ha un'architettura testuale differente) complicandomi la vita.

Soluzioni?
 
Premetto che sono un neofita di C, lo studio da poco più di 2 settimane all'università. Ho trovato una soluzione: (alla quale credo sia arrivato anche tu, ma provo a darti un'idea almeno) al posto di chiedere di premere invio, chiedi all'utente di digitare 1 per preseguire, 0 per terminare:

#include<stdio.h>

#include<stdlib.h>

int main () {

int somma1;

int num1;

int num2;

int num3;

int somma2;

int num4;

int num5;

int num6;

int sottr;

int num7;

int num8;

int risposta;

system("title Somma di tre numeri");

system("color C0");

system("color 0");

printf ("Inserisci il primo valore:\n");

scanf("%d", &num1);

printf ("Inserisci il secondo valore:\n");

scanf("%d", &num2);

printf ("Inserisci il terzo valore:\n");

scanf("%d", &num3);

somma1 = num1 + num2 + num3;

printf("la somma dei tre numeri e: %d \n" ,somma1);

printf ("Inserisci il primo valore:\n");

scanf("%d", &num4);

printf ("Inserisci il secondo valore:\n");

scanf("%d", &num5);

printf ("Inserisci il terzo valore:\n");

scanf("%d", &num6);

somma2 = num4 + num5 + num6;

printf("la somma dei tre numeri e: %d \n" ,somma2);

printf("Premi 1 per sottrarre i risultati, oppure premi 0 per terminare il programma:");

scanf("%d",&risposta);

sottr = somma1 - somma2;

if(risposta==0)

printf("fine programma\n");

else

{

if(risposta==1)

printf ("\nsottraendo i due risultati si ottiene: %d \n" ,sottr);

}

system("pause");

return 0;

}
spero di esserti stato utile ;)
 

gGiova

e-ehi.
Avevo giusto trovato if, ma non riuscivo a inserirlo in modo strutturalmente corretto... Poi sei arrivato tu, grazie :)

Però una cosa: invece che 0/1, volevo mettere Y/N... Ma facendo come te sostituendo però con Y/N (e sostituendo "%d" con "%c") mi da errore.
 

Gkx

Admin
usa il tag 'code' per avere le indentazioni giuste.

Però una cosa: invece che 0/1, volevo mettere Y/N... Ma facendo come te sostituendo però con Y/N (e sostituendo "%d" con "%c") mi da errore.
dato che "y" e "n" non sono integer ma stringhe devi dichiarare la variabile "risposta" come tale, poiché c è fortemente tipizzato.

in ogni caso ripeto quanto già detto nell'altro topic: se state imparando, consiglio di partire da un linguaggio di programmazione diverso dal c, che (oltre a essere compilato) è molto low-level (quindi più vicino al linguaggio macchina) e poco beginner-friendly. consiglio ruby o python per cominciare, che sono decisamente più intuitivi.

per esempio, lo stesso programma scritto in python esce fuori così:

Codice:
print("Inserisci il primo valore")
num1 = int(raw_input('&gt; '))

print("Inserisci il secondo valore")
num2 = int(raw_input('&gt; '))

print("Inserisci il terzo valore")
num3 = int(raw_input('&gt; '))

somma1 = num1 + num2 + num3
print("La somma dei tre numeri e' %s" % somma1)

print("Inserisci il primo valore")
num4 = int(raw_input('&gt; '))

print("Inserisci il secondo valore")
num5 = int(raw_input('&gt; '))

print("Inserisci il terzo valore")
num6 = int(raw_input('&gt; '))

somma2 = num4 + num5 + num6
print("La somma dei tre numeri e' %s" % somma2)

print("Vuoi sottrarre i risultati? (y/n)")

if raw_input("&gt; ") == 'y':
    print("Sottraendo i due risultati si ottiene %s" % (somma1 - somma2))
else:
    print("Fine")
per imparare e cazzeggiare con queste cose ci sono codecademy (ruby, python, javascript) e learn code the hard way (ruby, python e c), tra i tanti.
 

gGiova

e-ehi.
usa il tag 'code' per avere le indentazioni giuste.

dato che "y" e "n" non sono integer ma stringhe devi dichiarare la variabile "risposta" come tale, poiché c è fortemente tipizzato.

in ogni caso ripeto quanto già detto nell'altro topic: se state imparando, consiglio di partire da un linguaggio di programmazione diverso dal c, che (oltre a essere compilato) è molto low-level (quindi più vicino al linguaggio macchina) e poco beginner-friendly. consiglio ruby o python per cominciare, che sono decisamente più intuitivi.

per esempio, lo stesso programma scritto in python esce fuori così:

per imparare e cazzeggiare con queste cose ci sono codecademy (ruby, python, javascript) e learn code the hard way (ruby, python e c), tra i tanti.
A scuola stiamo facendo C, quindi devo fare quello :(

Per quanto riguarda Y/N quindi come devo fare?
 
Ultima modifica di un moderatore:

Gkx

Admin
A scuola stiamo facendo C, quindi devo fare quello :(
stavo per darti dello sfigato, ma poi mi sono ricordato che a me al liceo avevano fatto fare il pascal... comunque è una pessima idea.

Per quanto riguarda Y/N quindi come devo fare?
non uso il c da una vita, ma suppongo che tu debba dichiarare "risposta" come char (e forse anche dargli una lunghezza massima, tipo char risposta[1]), e usare degli apici nell'if (tipo if(risposta=='y')).
 

Sin

the ultramegamaster
char risposta;

scanf ("%s", &risposta);

if (risposta == 'y') { ... }

sottoscrivo il getchar() al posto del system pause e l'indentazione

cmq a livello di minchiate di scuola superiore / università, un linguaggio vale l'altro
 

Gkx

Admin
cmq a livello di minchiate di scuola superiore / università, un linguaggio vale l'altro
mah, è che se devi insegnare a qualcuno a programmare, specie alle superiori, credo che sia meglio partire da linguaggi con un livello di astrazione più alto, data l'immediatezza di sintassi e di sviluppo rispetto a linguaggi low-level dove devi partire già con concetti più complessi (tipo pointer e gestione della memoria). poi sono anche dell'idea che i linguaggi funzionali dovrebbero essere insegnati prima dei procedurali, ma questo è un altro discorso :)
 

Sin

the ultramegamaster
alle superiori sono partito anch'io dal c, e i puntatori e la gestione della memoria non li ho mai affrontati se non per minuscoli esercizi di prova, ma il concetto non è che fosse così complicato. in compenso una volta conosci il c/c++, la curva d'apprendimento di qualsiasi altro linguaggio è infinitamente inferiore. (grazie a dio all'università ho fatto java cmq)

i linguaggi (puramente) funzionali li trovo abbastanza un calcio nelle palle e anacronistici, ma chiaramente è un'opinione mia influenzata dall'esame di common lisp.
 

Iro

Amministratore di condominio
il c introduce a concetti fondamentali della programmazione, che DEVONO essere insegnati subito dopo le basi (ricorsione, cicli, etc). io ho iniziato col c, dopo poco tempo mi è stata stata introdotta la gestione della memoria, threads e così via. dopo certe cose davvero la curva di apprendimento si riduce di un sacco - tranne per gli oggetti, ma non puoi incominciare con altro che non sia la programmazione strutturata (figuriamoci la funzionale, dai..).

alla fine la complicatezza del c per iniziare è usare (e capire perché si usa) l'ampersand sullo scanf (altra funzione da evitare), la memoria e la gestione delle stringhe. tutte cose che ovviamente conviene imparare fin da subito per poi casomai avvalersi di utility varie o linguaggi più semplici. poi è chiaro che se uno non vuole fare l'informatico ma quattro cazzate di scripting usa python
 
Ultima modifica di un moderatore:

gGiova

e-ehi.
Toh, funziona. Mettevo %c invece di %s, così diceva di fare il libro per i caratteri.

Il getchar () non blocca il programma

Non ho idea di cosa sia l'indentazione, o almeno non ancora

riguardo al discorso linguaggi: non ho idea di cosa sia meglio per iniziare, ma i professori hanno deciso così e devo adeguarmi. Personalmente però trovo che se davvero il C è così complicato rispetto agli altri, è un bel vantaggio imparare a fare quello prima degli altri.

p.s. sì, ho scelto una scuola informatica per un motivo, nonostante non si possano aspettare grandi sbocchi da un Itis
 
Ultima modifica di un moderatore:

Iro

Amministratore di condominio
Ommioddio, non avevo notato le system per il testo..non ci siamo proprio, system è una funzione che esegue comandi direttamente dal sistema operativo. Va da sé che ovviamente se cambi sistema si sminchia tutto.

Inoltre getchar (funzione caldamente consigliata al posto di scanf con %c) non funziona perché scanf è, come ho già detto, una funzione del cazzo, e lascia degli "invio" nello standard input. Infatti..

Screen%20Shot%202012-11-18%20at%2011.44.16.png


Senza stare qui a spiegarti cosa significa buffer a linea o cose così: certe funzioni ti lasciano certi caratteri "sporchi" nel buffer, che non aspettano altro che essere catturati dalla prossima funzione di input. Soluzione semplice per il tuo caso:

Screen%20Shot%202012-11-18%20at%2011.47.54.png
 
Ultima modifica di un moderatore:

Gkx

Admin
il c introduce a concetti fondamentali della programmazione, che DEVONO essere insegnati subito dopo le basi (ricorsione, cicli, etc).
concetti che sono presenti in qualsiasi altro linguaggio, e anche con sintassi più semplici...

poi è chiaro che se uno non vuole fare l'informatico ma quattro cazzate di scripting usa python
come se python non lo usassero google e la nasa... o un linguaggio ha dignità solo se lo compili?

comunque io contestavo l'insegnamento di c come primo linguaggio alle superiori quando ci sono opzioni più comprensibili e immediate che magari in quanto tali riescono ad appassionare di più gli studenti alla materia. poi non metto in dubbio la sua importanza e la sua potenza e il fatto che prima o poi uno dovrà impararselo, magari all'università.

(la questione funzionali è un'opinione molto personale, non supportata da basi scientifiche, e non ho neanche voglia di star lì a discuterne...)
 
Ultima modifica di un moderatore:

Iro

Amministratore di condominio
concetti che sono presenti in qualsiasi altro linguaggio, e anche con sintassi più semplici...
aritmetica dei puntatori? allocazioni dinamiche? quali sarebbero i linguaggi più semplici per studiare queste cose? non ci sono in java, in c#, figuriamoci in python\ruby\php..

che poi la sintassi del c sia brutta non è mica vero, è abbastanza simile ad altri linguaggi come java o php (d'altronde ne sono ispirati). casomai il c++ ha una sintassi orrenda..

come se python non lo usassero google e la nasa... o un linguaggio ha dignità solo se lo compili?
non hai capito nulla di quello che intendevo: il mio discorso è: se vuoi fare l'informatico, _devi_ aver studiato il c. poi fai quello che vuoi una volta che conosci le tecniche base, come in qualsiasi campo dello scibile umano. se vuoi fare quattro cazzate, te ne vai a usare qualcos'altro.ti posso assicurare che comunque quelli che usano python alla nasa e alla google il c lo hanno studiato, e probabilmente come prima cosa
 

Gkx

Admin
hai parlato di ricorsione e cicli, che sono presenti un po' ovunque, non di puntatori... per il resto siamo d'accordo, anche se ripeto che ritengo che alle superiori non ci sia bisogno di nulla di tutto questo ed eventualmente uno se lo farà all'uni.
 

Iro

Amministratore di condominio
io per quelle intendevo le basi da superare per poi iniziare gli aspetti caratteristici.

cioè ma seriamente, secondo te pensavo davvero a ricorsioni e cicli come aspetti fondamentali del c e non tutte le cose che ho scritto subito dopo?

comunque è un itis informatico, queste sono cose basilari. non puoi prendere un ragazzo di sedici anni, fargli fare anni di linguaggi interpretati e facilitati per poi dopo anni fargli scoprire che esistono le malloc e i puntatori. è come diventare esperti a guidare le macchine iniziando col cambio automatico, o voler fare gli architetti senza disegni e plastici ("ma tanto c'è autocad!")
 
Ultima modifica di un moderatore:

Gkx

Admin
io per quelle intendevo le basi da superare per poi iniziare gli aspetti caratteristici.

cioè ma seriamente, secondo te pensavo davvero a ricorsioni e cicli come aspetti fondamentali del c e non tutte le cose che ho scritto subito dopo?
lol devo aver letto male (mi sembrava strano).

comunque a quel punto allora ha più senso partire da assembly... c continua a sembrarmi una scelta datata e soprattutto arbitraria per insegnare le basi della programmazione a dei quattordicenni, specialmente come immagino verrà insegnato da un professore di liceo, ma tant'è. sempre meglio del pascal.
 
Ultima modifica di un moderatore:

Iro

Amministratore di condominio
l'assembly, che se non erro è in programma agli itis, ha concetti troppo lontani dalla programmazione "normale": bisogna gestirsi i registri, i salti incondizionati, passaggi a subroutine con valori di ritorno, etc..insomma, schifezze da ingegneri.

il c non è assolutamente una scelta datata, basta guardarsi intorno, è il linguaggio più usato al mondo. non saprei davvero da dove iniziare a spiegare la sua utilità al giorno d'oggi.

ma rimanendo nel nostro seminato, è una scelta obbligata iniziare col c all'itis: perché insegnare un linguaggio "più semplice" e poi dover rispiegarne un altro (che sarà per forza di cose il c) quando dovranno iniziare a studiare strutture dati, puntatori e allocazioni dinamiche?
 

Gkx

Admin
ma rimanendo nel nostro seminato, è una scelta obbligata iniziare col c all'itis: perché insegnare un linguaggio "più semplice" e poi dover rispiegarne un altro (che sarà per forza di cose il c) quando dovranno iniziare a studiare strutture dati, puntatori e allocazioni dinamiche?
perché un linguaggio con un livello di astrazione più alto ti offre la possibilità di scrivere programmi complessi con metà del codice, del tempo e dello sforzo? io ti sto parlando da un punto di vista didattico, credo che (come in ogni campo dell'apprendimento) sia più stimolante partire dalle cose più semplici e arrivare gradualmente a quelle più complesse, invece che partire subito con le mazzate (e il c di carne al fuoco ne mette tanta). non sto parlando di me o te, sto parlando del sedicenne medio che viene a contatto con la programmazione per la prima volta.

ho anche dei dubbi sul fatto che il c sia il linguaggio più utilizzato al mondo (probabilmente citi il tiobe index, che però non parla di utilizzo)... probabilmente il più utilizzato è javascript, che è tipo in ogni pagina web
 

Iro

Amministratore di condominio
perché un linguaggio con un livello di astrazione più alto ti offre la possibilità di scrivere programmi complessi con metà del codice, del tempo e dello sforzo?
a scuola e in uni non ti si insegna solo a scrivere programmi complessi, ma anche a capire il meccanismo che ci sta sotto. inutile dire che un python o un ruby usato per la didattica nasconde troppi di questi meccanismi, cosa che il c non fa.comunque per l'apprendimento non cambia molto, anzi, non c'è nulla di complicato: tendenzialmente chi inizia con il c si mette davanti al pc in laboratorio, con una qualche lezione in "classe" su cosa è una funzione e un ciclo while, e gli viene detto di copiare e incollare gli #include delle librerie e di mettere & vicino alla variabile sullo scanf. poi di fare la somma di due numeri, e così via. cose così semplici che un linguaggio vale l'altro.

ma poiché entro poche settimane si sarà avviati a concetti più complicati, invece di dover rispiegare daccapo una sintassi diversa come quella dei linguaggi di scripting si parte conoscendo già il c, che è molto didattico "a tutto tondo" per la programmazione, non solo per il problem solving o gli algoritmi. se poi uno si fa scoraggiare dal fatto che hello world in python è "più bello", mi sa che deve capire ancora qualche cosa.

tl;dr non ha senso insegnare python quando da che mondo è mondo gli algoritmi si insegnano in metalinguaggi e le implementazioni si fanno da subito in c perché poi dopo due settimane devi sbattere la testa sulla memoria e non ha senso perdere tempo scolastico a imparare un'altra sintassi

comunque ovviamente quando parlavo di linguaggio più usato al mondo mi riferivo a un linguaggio di programmazione vero, non ad aborti come javascript. scherzi a parte, anche se non fosse il primo assoluto cambierebbe poco per la sua importanza sia attuale sia storica. a me python piace e lo trovo simpatico, ma se avessi iniziato con quello mi sarei trovato peggio sul lungo termine
 
Ultima modifica di un moderatore:

Gkx

Admin
la sintassi diversa è il minimo dei problemi di dover imparare un linguaggio, più che altro ruby/python ti espongono ad altri paradigmi di programmazione moderni di alto livello (a oggetti e funzionale) che con c non sfiori... dietro c'è tutta una parte di architettura e strutturazione del software che imho è importante tanto quanto il sapere come viene gestita la memoria, se non di più... senza contare che tutto il mondo del web development, che per ovvi motivi è sempre più rilevante, non usa certo il c.

i problemi di performance e memoria sugli algoritmi poi non sussistono (specie con implementazioni tipo pypy), o meglio: chiaro che c è decine di volte più performante, ma a meno che non si debba scrivere un sistema operativo o qualcosa di estremamente mission critical i linguaggi interpretati sono più che "fast enough".

p.s. neanche a me piace javascript, ma adesso ci fanno i webserver e sono pure estremamente veloci...
 
Ultima modifica di un moderatore:

Iro

Amministratore di condominio
il web development è solo una parte dell'immenso campo dell'informatica, che secondo me è meno importante che avere delle solide basi da poter poi applicare ovunque. che poi è il succo di essere un computer scientist, quello di saper fare le cose, non conoscere gli strumenti di per sé. quelli cambiano sempre (anche se il c è usatissimo da 40 anni, caso più unico che raro).

inoltre, paradigmi funzionali, ad oggetti, ad eventi, ad quello che vuoi, sono cose che è più giusto insegnare, come sto ripetendo da post, dopo avere le basi, ovvero programmazione strutturata etc etc. e ripeto che per me le basi non possono che essere insegnate con il c.

la velocità poi non è un tasto che ho toccato particolarmente, ma se perfino guido van rossum parla di "riscrivere in c" quando le performance sono importanti..

che poi vabbè, non mi interessa molto perché tanto so' problemi dei dev gestire javascript, ma vorrei capire quali sono i vantaggi di un webserver scritto in javascript rispetto a linguaggi umani...
 

Evolvix 85

One is All, All is One
'Sto anch'io incominciando ad imparare questo linguaggio e 2 giorni fa ho fatto questo:

#include <stdio.h>

int main () {

int x;

printf("Inserire un numero intero: ", x");

scanf("%d", &x);

if (x == 5) {

printf("x è uguale a 5.\n");

}

if (x != 5) {

printf("x non è uguale a 5.\n");

}

if (x < 5) {

printf("x è minore di 5.\n");

}

if (x > 5) {

printf("x è maggiore di 5.\n");

}

return 0;

}

Quando però mi "risponde" mi dice "x", ma io vorrei che mi indicasse il numero che ho inserito all'inizio, come faccio ?
 
Ultima modifica di un moderatore:

gGiova

e-ehi.
Alla mia domanda al prof. su ruby/pithon/ecc in confronto al C:

"I tuoi amici si sbagliano, semplicemente perché ho visto il programma dei prossimi anni. Tieni conto che gran parte della terza sarà incentrata su C (dovrete padroneggiarlo al completo), e in quarta passerete direttamente al php, e senza sapere il C è piuttosto difficile. Non penso comunque sia un percorso sbagliato il nostro, ma comunque anche lo fosse ci sarebbe da dire che non possiamo fare che attenerci al programma che ci danno dall'alto."
 

Gkx

Admin
@iro, ok, sto solo dicendo che vedere risultati subito = appassionarsi di più e autonomamente all'argomento = diventare programmatori migliori sul lungo termine. chiaramente influisce anche il tipo di approccio (accademico o meno) che uno ha verso la programmazione: per quanto mi riguarda sono un autodidatta (la mia laurea è in tutt'altro) e il c lo conosco in maniera neanche troppo approfondita; ciononostante ho un lavoro nel settore e le cose che faccio funzionano :)

per quanto riguarda il web development questa è una lettura interessante: http://lifebeyondfif...-developer.html

la velocità poi non è un tasto che ho toccato particolarmente, ma se perfino guido van rossum parla di "riscrivere in c" quando le performance sono importanti..
i casi in cui le performance sono talmente importanti da necessitare una riscrittura in c sono solitamente casi limite (e tra l'altro python come altri linguaggi offre degli ottimi binding per scrivere in c solo ciò che è assolutamente necessario), nel 99% dei casi non ce ne sarà comunque bisogno.

che poi vabbè, non mi interessa molto perché tanto so' problemi dei dev gestire javascript, ma vorrei capire quali sono i vantaggi di un webserver scritto in javascript rispetto a linguaggi umani...
con l'engine v8 di chrome i vantaggi sono nell'asincronicità e nella velocità di esecuzione usando comunque un linguaggio dinamico, che significa anche dimezzare i tempi di sviluppo. se lo usano anche microsoft e yahoo penso che due conti in tasca se li siano fatti :) (che poi js in generale rimanga un aborto sono d'accordo anch'io, ma la cosa può essere ovviata usando linguaggi che compilano in js tipo typescript o coffeescript)

penso che comunque questa discussione possa concludersi qui...

Alla mia domanda al prof. su ruby/pithon/ecc in confronto al C:

"I tuoi amici si sbagliano, semplicemente perché ho visto il programma dei prossimi anni. Tieni conto che gran parte della terza sarà incentrata su C (dovrete padroneggiarlo al completo), e in quarta passerete direttamente al php, e senza sapere il C è piuttosto difficile. Non penso comunque sia un percorso sbagliato il nostro, ma comunque anche lo fosse ci sarebbe da dire che non possiamo fare che attenerci al programma che ci danno dall'alto."
ecco, php invece è indiscutibilmente LAMMERDA e andrebbe abolito dal mondo (poi dire che è difficile impararlo senza sapere il c, vabbè, non commento)
 
Ultima modifica di un moderatore:
Top Bottom