Programmazione

gGiova

e-ehi.
ecco, php invece è indiscutibilmente LAMMERDA e andrebbe abolito dal mondo (poi dire che è difficile impararlo senza sapere il c, vabbè, non commento)
Lo sospettavo, infatti a pensare che dovrò studiarlo l'anno prossimo... Non è che passi a falsarci i programmi così che facciamo qualcosa di davvero costruttivo?
 

Iro

Amministratore di condominio
ciononostante ho un lavoro nel settore e le cose che faccio funzionano :)
che è più o meno quello che dice qualsiasi programmatore php sulla faccia della terra, eh, io non vorrei essere accomunato a gente così. "funziona" significa davvero poco, mo' non per sminuire quello che faiche poi non è un discorso di accademia o no, è un discorso di cosa si vuole fare nella vita. tendenzialmente chi fa l'itis o informatica all'uni da grande vuole fare l'informatico, e l'informatico non è il programmatore web. l'informatico, come ho già detto mille volte, deve conoscere una mole di cose che non sto a riassumere per l'ennesima volta. nel frattempo che impara questi concetti, deve già iniziare a programmare, e quale linguaggio migliore del c per unire le due cose? anche perché se esci da un corso di studio sull'informatica che non conosci almeno il c sei manco la chiavica del computer scientist.

se invece hai già fatto il tuo dovere nello studio nel c o sei un hobbista\autodidatta, puoi usare quello che cazzo ti pare, ma le nozioni di base sono una cosa seria per un corso di studi. che poi sto ripetendo le stesse cose da giorni, non mi puoi rispondere che altri linguaggi sono più divertenti o che google ha fatto l'engine javascript che fa il caffé (ricordiamoci che wikipedia e facebook usano php e mysql, manco quelle mi paiono le ultime arrivate eppure..). che poi parliamoci chiaramente, per il primo anno di studio non cambia nulla fra (esempio) progettare un albero in c e uno in java, visto che l'esercizio è proprio implementare le strutture dati. anzi, in c capisci meglio come funzionano i puntatori :D

usando comunque un linguaggio dinamico, che significa anche dimezzare i tempi di sviluppo.
non sono contrario ai linguaggi interpretati, figurati, ma tendenzialmente dire "dimezzano i tempi di sviluppo" è un po' buttata a caso, considerato anche che il debugging è tipicamente più complicato. anche perché è il problema che nella maggior parte dei casi porta alla decisione degli strumenti, sono pochi i casi in cui sia un compilato che un interpretato sarebbero scelte sensate
 
Ultima modifica di un moderatore:

Gkx

Admin
che è più o meno quello che dice qualsiasi programmatore php sulla faccia della terra, per la serie "fatti qualche domanda"
funzionano, sono commentate e mantenibili, usano tecnologie e pratiche moderne, ci sono degli unit test scritti... (cose che il "programmatore" php medio non può dire, generalmente). poi certo spazio per migliorare ce n'è sempre. alla fine della fiera il compito del programmatore (che non fa ricerca) è risolvere nel miglior modo possibile problemi concreti nel mondo reale, e in questo si diventa bravi solo con l'esperienza - anche se sicuramente chi esce da un contesto accademico è decisamente avantaggiato. (molti degli hacker migliori che conosco sono autodidatti, e molti altri vengono da un'università. approcci diversi).

non sono contrario ai linguaggi interpretati, figurati, ma tendenzialmente dire "dimezzano i tempi di sviluppo" è un po' buttata a caso, considerato anche che il debugging è tipicamente più complicato. anche perché è il problema che nella maggior parte dei casi porta alla decisione degli strumenti, sono pochi i casi in cui sia un compilato che un interpretato sarebbero scelte sensate
il "dimezzano" è buttato a caso, ma di solito il workflow edit-compile-test è molto più veloce... oltre al fatto che in generale a parità di funzionalità si devono scrivere molte meno righe di codice (che cmq non è di per sé un fattore particolarmente indicativo). il debugging poteva essere un problema 10 anni fa forse, ma al giorno d'oggi la quantità di tool che vengono in aiuto (per qualsiasi linguaggio interpretato) è enorme, e per tutto il resto basta scrivere test per un po' tutto (che è una buona pratica a prescindere).
 

gGiova

e-ehi.
Codice:
#include
#include
int main () {
int risposta;
char risposta2;
int somma1;
int somma2;
int sottr1;
int sottr2;
int per1;
int per2;
float div1;
float div2;
float media1;
float media2;

int num1;
int num2;

int num3;
int num4;
int num5;

int num6;
int num7;

int num8;
int num9;
int num10;

int num11;
int num12;

int num13;
int num14;
int num15;

float num16;
float num17;

float num18;
float num19;

float num20;
float num21;
float num22;

system("title Risoluzione di problemi semplici");
system("MODE CON: COLS=125 LINES=30");
system("color C0");
system("color 0");
printf ("Questo programma ti fornira' una assistenza completa nella risoluzione delle quattro operazioni fondamentali e della media.\n");
inizio:
printf ("\n");
printf ("Digitare:\n");
printf ("1, per la somma di due numeri\n");
printf ("2, per la somma di tre numeri\n");
printf ("3, per la sottrazione di due numeri\n");
printf ("4, per la sottrazione di tre numeri\n");
printf ("5, per il prodotto di due numeri\n");
printf ("6, per il prodotto di tre numeri\n");
printf ("7, per il quoziente di due numeri\n");
printf ("8, per la media di due numeri\n");
printf ("9, per la media di tre numeri\n");
printf ("\n");
printf ("10, per informazioni\n");
printf ("\n");
printf ("\n");
printf ("0, per uscire\n");
scanf("%i",&risposta);
if (risposta==1) {
printf ("Somma di due numeri! Inserisci il primo valore:\n");
scanf("%d", &num1);
printf ("Inserisci il secondo valore:\n");
scanf("%d", &num2);
somma1 = num1 + num2;
printf("la somma dei due numeri e': %d \n" ,somma1);
printf ("Vuoi eseguire un altro problema? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}


else if (risposta==2) {
printf ("Somma di tre numeri! Inserisci il primo valore:\n");
scanf("%d", &num3);
printf ("Inserisci il secondo valore:\n");
scanf("%d", &num4);
printf ("Inserisci il terzo valore:\n");
scanf("%d", &num5);
somma2 = num3 + num4 + num5;
printf("la somma dei tre numeri e': %d \n" ,somma2);
printf ("Vuoi eseguire un altro problema? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}

else if (risposta==3) {
printf ("Sottrazione di due numeri! Inserisci il primo valore:\n");
scanf("%d", &num6);
printf ("Inserisci il secondo valore:\n");
scanf("%d", &num7);
sottr1 = num6 - num7;
printf("la somma dei due numeri e': %d \n" ,sottr1);
printf ("Vuoi eseguire un altro problema? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}
else if (risposta==4) {
printf ("Sottrazione di tre numeri! Inserisci il primo valore:\n");
scanf("%d", &num8);
printf ("Inserisci il secondo valore:\n");
scanf("%d", &num9);
printf ("Inserisci il terzo valore:\n");
scanf("%d", &num10);
sottr2 = num8 - num9 - num10;
printf("la somma dei tre numeri e': %d \n" ,sottr2);
printf ("Vuoi eseguire un altro problema? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}
else if (risposta==5) {
printf ("Prodotto di due numeri! Inserisci il primo valore:\n");
scanf("%d", &num11);
printf ("Inserisci il secondo valore:\n");
scanf("%d", &num12);
per1 = num11 * num12;
printf("Il prodotto dei due numeri e': %d \n" ,per1);
printf ("Vuoi eseguire un altro problema? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}
else if (risposta==6) {
printf ("Prodotto di tre numeri! Inserisci il primo valore:\n");
scanf("%d", &num13);
printf ("Inserisci il secondo valore:\n");
scanf("%d", &num14);
printf ("Inserisci il terzo valore:\n");
scanf("%d", &num15);
per2 = num13 * num14 * num15;
printf("Il prodotto dei tre numeri e': %d \n" ,per2
);
printf ("Vuoi eseguire un altro problema? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}
else if (risposta==7) {
printf ("Quoziente di due numeri! Inserisci il primo valore:\n");
scanf("%f", &num16);
printf ("Inserisci il secondo valore:\n");
scanf("%f", &num17);
div1 = num16 / num17;
printf("Il quoziente dei due numeri e': %.1f \n" ,div1);
printf ("Vuoi eseguire un altro problema? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}
else if (risposta==8) {
printf ("Media di due numeri! Inserisci il primo valore:\n");
scanf("%f", &num18);
printf ("Inserisci il secondo valore:\n");
scanf("%f", &num19);
media1 = (num18 + num19) / 2;
printf("la media dei tre numeri e': %.1f \n" ,media1);
printf ("Vuoi eseguire un altro problema? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}
else if (risposta==9) {
printf ("Media di tre numeri! Inserisci il primo valore:\n");
scanf("%f", &num20);
printf ("Inserisci il secondo valore:\n");
scanf("%f", &num21);
printf ("Inserisci il terzo valore:\n");
scanf("%f", &num22);
media2 = (num20 + num21 + num22) / 3;
printf("la media dei tre numeri e': %.1f \n" ,media2);
printf ("Vuoi eseguire un altro problema? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}
else if (risposta==10) {
printf("/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////");
printf("/ /");
printf("/ /");
printf("/ /");
printf("/ /");
printf("/ /");
printf("/ ///// /");
printf("/ Risoluzione di operazioni elementari / /");
printf("/ di gGiova / /");
printf("/ //// / // / //// / / // /");
printf("/ / / / / / / / / / //// /");
printf("/ //// ///// / //// / / / /");
printf("/ Itis G. Riva, 2012/2013 / /");
printf("/ //// /");
printf("/ /");
printf("/ /");
printf("/ /");
printf("/ /");
printf("/ /");
printf("/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////");
printf ("Vuoi tornare alla scelta? (y/n)\n");
scanf("%s",&risposta2);
if (risposta2=='y') {
goto inizio;
}
}




system ("pause");
return 0;
}
[/CODE]
http://www.mediafire...es49pfldsn8ul4n

(Lasciate perdere l'ultima parte di codice, è il tag del forum che non la riconosce bene)

Programmino per verifica, preso 9.

Piuttosto avanti comunque, tecnicamente il voto massimo era 8, e tutti gli altri facevano somme di tre numeri con forse un if

Scusate i vari system che ammazzano chiunque non abbia windows, ma essendo una verifica di due ore non avevo tempo per ricordarmi come funzionasse il getchar, ne come funzionasse il resto non only windows
 
Ultima modifica di un moderatore:

Evolvix 85

One is All, All is One
E bravo Giova ! Da quant'è che hai iniziato il linguaggio C ?

Per i vari system, io per ultimo non uso il pause, ma uso _getch(); e all'inizio metto #include <conio.h>, questo è compatibile con tutti i sistemi ?

P.S.: quando eseguo il programma mi dice che il comando MODE non è riconosciuto come comando... ecc. A te lo fa ?
 
Ultima modifica di un moderatore:

HeroGian

Parroco
Ti consiglio di usare il costrutto switch se devi fare un menù tipo quello.. al contrario di tutti quegli else if rende il codice molto più leggibile.. altre cose per migliorare un po il codice.. raggruppa tutti i num, non è il massimo vedere una lista così lunga tanto puoi scrivere anche

int num1, num2, .. , numn così risparmi anche delle righe di codice!

Altra cosa cerca di indentare un po il codice, può essere molto d'aiuto per vedere dove inizia e finisce un blocco..
 
Ultima modifica di un moderatore:

Maze

TypoMzn
Wiki
Ma è proprio necessario definire tutte quelle variabili? Non puoi riciclarle? Cioè, per la somma di tre mumeri portesti usare le stesse della somma di due e un'altra aggiuntiva. Poi, come ti abbiamo detto tutti, indenta, basta premere il tab XD

E bravo Giova ! Da quant'è che hai iniziato il linguaggio C ?

P.S.: quando eseguo il programma mi dice che il comando MODE non è riconosciuto come comando... ecc. A te lo fa ?
probabilmente non c'è nei comandi del tuo sistema, ma in quello di gGiova sì. A me su linux non prende nemmeno il system("PAUSE"), o come diamine si scrive XD
 

Evolvix 85

One is All, All is One
Ma è proprio necessario definire tutte quelle variabili? Non puoi riciclarle? Cioè, per la somma di tre mumeri portesti usare le stesse della somma di due e un'altra aggiuntiva. Poi, come ti abbiamo detto tutti, indenta, basta premere il tab XD

probabilmente non c'è nei comandi del tuo sistema, ma in quello di gGiova sì. A me su linux non prende nemmeno il system("PAUSE"), o come diamine si scrive XD
Prova a vedere se su Linux prende _getch(); includendo <conio.h>.
 

Maze

TypoMzn
Wiki
Mi sa che è perché non includo mai la libreria standard. Comunque non me ne frega nulla, non ho mai nemmeno pensato di usarlo, perché dovrei fermarmi a caso in esercizi semplici come quelli che faccio ora?

Comunque premetto che siamo partiti direttamente dai C++, ergo abbiamo sempre usato la libreria iostream (probabilmente non disponibile nel puro e semplice C) e quindi i favolosi cin>> e cout<< al posto delle varie getchar, printf, scanf e via dicendo. Comunque eccetto questa cosa fino alla scorsa settimana, quando abbiamo iniziato la programmazione a più moduli, abbiamo studiato puro e semplice C.
 

Maze

TypoMzn
Wiki
il goto però non si può guardare, abituati a usare i cicli do-while...
Lo volevo dire io, però ho pensato "E se in C nudo e crudo non esiste e faccio figuradimmerda?"

Non ho ancora capito cosa significa "indentare", lol
Tieni, il mio ultimo prodotto. https://dl.dropbox.com/u/5802304/ex37.cpp

Vedi che le istruzioni dopo if () e while() sono "spostate" verso destra? Lo spostamento è l'indentazione (e infatti si dice anche che sono "indentate"), si fa premendo il tab e serve a capire meglio il codice, nella fattispecie le istruzioni con la stessa indentazione fanno parte del blocco del while() o dell'if(), a seconda dei casi.
 

gGiova

e-ehi.
Ah allora nulla, già le indento. Il Code del forum non l'ha rilevato (anche il motivo per cui l'ultima parte è tutta scrausata)
 

Gkx

Admin
allora piuttosto che usare il tag del forum usate https://gist.github.com/ (incollate il codice, date un titolo e nomefile se volete, selezionate il linguaggio per il syntax highlighting, "create private gist")

edit: tra l'altro la cosa fica è che è un repository git, quindi (con un account) se si modifica il codice resta la revisione vecchia per fare il confronto
 
Ultima modifica di un moderatore:

Evolvix 85

One is All, All is One
Maze, io uso il getch perchè se non lo uso quando apro l'exe mi si chiude subito...

Ma quindi per indentare devo solo metere i printf, gli scanf, gli if ecc. Sulla stessa linea ?
 

Maze

TypoMzn
Wiki
Tu usi il getch perché programmi in C, in C++ con l'iostream e un cin>>variabile_char si fa molto prima.

L'indentazione è una cosa del codice sorgente, non c'entra nulla con quello che mandi a video: premi il tab per spostare destra alcune righe di codice al fine di renderlo più comprensibile. Al compilatore non frega nulla nemmeno della maggior parte delle spaziature, figuriamoci dell'indentazione: serve solo per gli umani che leggono il codice, che così capiscono prima.
 

Gkx

Admin
(senza intento polemico) un altro dei motivi per cui python è fico è che i blocchi sono delimitati dall'indentazione e non dalle graffe, così sei costretto a scrivere qualcosa di leggibile
 
Ultima modifica di un moderatore:

Iro

Amministratore di condominio
conio.h (leggetevi un po' manuali e specifiche, però, eh..) è una libreria windows only, così come "PAUSE" è una systemcall windows only (oltre ad essere profondamente sbagliata se usata come "premere un tasto per continuare")
 

Evolvix 85

One is All, All is One
Infatti non ne ero mica certo e sono agli inizi, almeno c'è di positivo che non la uso come "premere un tasto per continuare"...
 

Iro

Amministratore di condominio
Siete appena agli inizi, quindi non posso linkarvi risorse troppo specifiche (oppure sì?): in breve, system pause è una cosa sbagliata, lenta e che funziona solo su windows. Volete interrompere il programma fino alla pressione di un tasto? Bene, questa cosa si chiama getchar(). Veloce, è quello che volete fare e funziona su qualsiasi sistema.

Si potrebbe obiettare che in realtà quello che volete è semplicemente controllare il programma e controllarne l'esecuzione, ed è una cosa che ha più senso ottenere tramite un debugger, ma sono concetti già più avanzati.
 
Ultima modifica di un moderatore:

gGiova

e-ehi.
Mi sto sentendo terribilmente nabbo, non capisco gli switch, while, for , i cicli ed il loro senso/funzionamento in generale.

Argh
 

Gkx

Admin
in soldoni

switch = alternativa a serie di if/else concatenati: anziché un if (var == 1) { qualcosa } else if (var == 2) { qualcos'altro } ecc., hai uno switch (var) { case 1: qualcosa; break; case 2: qualcos'altro; break; }.

while = esegui questo blocco di codice finché la condizione dichiarata resta vera. es. x = 0; while (x < 10) { qualcosa; x++; } // ripeti qualcosa finché x è inferiore a 10 (al termine di ogni ciclo x aumenta di 1)

for = variante di while. puoi scrivere l'esempio precedente come: for (x = 0; x < 10; x++) { qualcosa; }.

un ciclo è semplicemente un blocco di codice che viene ripetuto (solitamente con input diversi) finché non viene soddisfatta una determinata condizione (oppure all'infinito).
 

Evolvix 85

One is All, All is One
Siete appena agli inizi, quindi non posso linkarvi risorse troppo specifiche (oppure sì?): in breve, system pause è una cosa sbagliata, lenta e che funziona solo su windows. Volete interrompere il programma fino alla pressione di un tasto? Bene, questa cosa si chiama getchar(). Veloce, è quello che volete fare e funziona su qualsiasi sistema.

Si potrebbe obiettare che in realtà quello che volete è semplicemente controllare il programma e controllarne l'esecuzione, ed è una cosa che ha più senso ottenere tramite un debugger, ma sono concetti già più avanzati.
Per getchar() devo per caso richiamare qualche libreria ? Quelli che ha citato Giova più o meno li ho capiti, ma per saltare ad esempio un numero usando "continue", il codice che posto è giusto ?

for(x = 1; x <= 10; x++) {

if(x == 5)

continue;

printf("%d ", x);

}

Dovrebbe fare 1 2 3 4 6 7 8 9 10 ?
 

Iro

Amministratore di condominio
non è più elegante direttamente fare così?

Codice:
for (blabla)
{
if(x !=5) printf()
}
[/CODE]:)

io non sono generalmente contrario ai salti incondizionati (goto, continue, etc), ma solo quando il codice sarebbe molto più complicato da scrivere senza
 
Ultima modifica di un moderatore:

Evolvix 85

One is All, All is One
non è più elegante direttamente fare così?

Codice:
for (blabla)
{
if(x !=5) printf()
}
[/CODE]:)

io non sono generalmente contrario ai salti incondizionati (goto, continue, etc), ma solo quando il codice sarebbe molto più complicato da scrivere senza

Sì, in effetti si può far benissimo così, ma dato che stavo dando un'occhiata al continue ho voluto usarlo.
 

Evolvix 85

One is All, All is One
#include <stdio.h>
int quadrato(int);
int main() {
    int x;
    for(x = 1; x <= 10; x++) {
        printf("%d   ", quadrato(x));
    }
    printf("\n");
    return 0;
}
int quadrato(int y) {
    return y * y;
    
}


Questo mi da il quadrato dei numeri da 1 a 10 OK, ma dove devo inserire il _getch();/system("PAUSE"); ?
 

Maze

TypoMzn
Wiki
https://gist.github.com/4684907

Non riesco a venirne a capo. Replica gli elementi della matrice in posizioni random. Però solo con matrici non quadrate. Probabilmente è l'accesso alla riga con la lettera.

EDIT: Errore clamoroso nell'aritmetica dei puntatori accedendo agli elementi della matrice: avevo messo le righe invece delle colonne. Perché? È da una vita che mi capitano solo esercizi con matrici quadrate, ergo non mi pongo il problema su quale dimensione mettere da troppo tempo XD
 
Ultima modifica di un moderatore:
Top Bottom