PDA

View Full Version : [C++] sono alle prime armi


cULIPETO
05-12-2007, 21:08
ciao

sto cominciando a compilare i primi programmini in C++ (uso dev c++) ora fino a hell world tutto liscio ora sto cercando di farne uno ke ci kieda il nome e poi scriva ciao, e il nostro nome..... ma riscontro un errore in fase di compilazione secondo cui l'operatore + nn si può usare...

#include <iostream>
#include <stdlib.h>

using namespace std;

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

printf ("Scrivi il tuo nome...\n");
int ReadLine ();
printf ("ciao\n" + ReadLine);
system("PAUSE");

}


la riga evidenziaa è qll in cui riscontro l'errore

grazie mille

okay
05-12-2007, 21:24
ciao

sto cominciando a compilare i primi programmini in C++ (uso dev c++) ora fino a hell world tutto liscio ora sto cercando di farne uno ke ci kieda il nome e poi scriva ciao, e il nostro nome..... ma riscontro un errore in fase di compilazione secondo cui l'operatore + nn si può usare...

#include <iostream>
#include <stdlib.h>

using namespace std;

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

printf ("Scrivi il tuo nome...\n");
int ReadLine ();
printf ("ciao\n" + ReadLine);
system("PAUSE");

}


la riga evidenziaa è qll in cui riscontro l'errore

grazie mille

printf ("ciao\n" + ReadLine);

togli il +

ReadLine lo addizioni a che cosa...? a niente.

int ReadLine(); ritorna un int quindi devi fare:

printf ("ciao \n %d" ReadLine);

%d stampa un integer ovvero quello che ritorna da RadLine();

oppure, per capire i ritorrni dalle funzioni puoi ancora fare:

int a=7;
a+=ReadLine; //ReadLine deve essere un numero intero
printf ("ciao \n %d" a);
oppure
printf ("ciao \n %d" a + ReadLine);

variabilepippo
05-12-2007, 21:27
La printf non si usa così ma come è descritto dalla documentazione e da qualsiasi testo sul C.

Forse per iniziaire è più semplice usare gli IO streams del C++ (cin/cout):


#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
string nome;
cout << "Come ti chiami? ";
cin >> nome;
cout << "Ciao " << nome << endl;
system("PAUSE");
return 0;
}

cionci
06-12-2007, 08:18
int ReadLine ();

Cosa vorresti fare con questa riga ?
Così com'è ora non fa altro che dichiarare un intero di nome ReadLine...
Perché programmi in C++ e usi printf ?

banryu79
06-12-2007, 08:31
Ma soprattutto...

ciao
sto cominciando a compilare i primi programmini in C++ (uso dev c++) ora fino a hell world tutto liscio ...


Che diavolo è "hell world"? :D (il tipico esempio di programmazione che ti a bestemmiare? :D :D )

Scusate, non ho resistito :Prrr:

cULIPETO
06-12-2007, 12:34
Quote:
Originariamente inviato da cULIPETO Guarda i messaggi
int ReadLine ();
Cosa vorresti fare con questa riga ?
Così com'è ora non fa altro che dichiarare un intero di nome ReadLine...
Perché programmi in C++ e usi printf ?



Xkè uso la bibbia del C (linguaggio C) e nn del C++ dunque includo le istruzioni del C csì si rassomigliano

cmq tt ok gia risolto kakkio appena vi kiedo risolvo da solo :rolleyes: adesso uso c# mlt + easy

un ultima cosa se volessi salvare tutto in un eseguibile autonomo ?? SEMPRE CON DEV C++

cULIPETO
07-12-2007, 14:27
come posso spiegare ke una costante è maggiore di un 'altra e minore di un'altra ancora??

ad esempio

ho le costanti sasso, carta, forbice

voglio far capire al compilatore ke

sasso > forbice, < carta
carta > sasso, < forbice
forbice > carta, < sasso

io ho rpovato csì ma nn va

wchar_t sasso, carta, forbice;


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

sasso = > forbice, < carta;
carta = > sasso, < forbice;
forbice = > carta, < sasso;ù


thx mille

Karlosoft
07-12-2007, 14:33
:D Cosa è quel codice, un nuovo linguaggio inventato da te????
Tu a ste costanti glielo vuoi dare un valore o no??? Mi dispiace, ma una robas del genere non l'avevo mai vista. Non puoi usare gli operatori standar per definire relazioni di questo tipo, devi crearti una classe, che esegui l'overflow degli operatori, cose che per il momento non sono possibili da parte tua. Prova con qualcosa di meno difficile :) :)

cionci
07-12-2007, 14:41
Tra l'altro non le hai nemmeno definite come costanti...

cULIPETO
07-12-2007, 15:35
beh se ieri sera da solo ho ftt qst bella calcolatrice usando solo la bibbia del C
credo ke ci posso almeno provare.....
ahò mika si nasce inparati......una settimana fa un nostro proffo ci ha fatto vedere una minkiata ke stampa la data e ti dice se è vera col VBA di exel dall'ora ci ho cazzeggiato e subito dopo sono passato al c++ ke nn ho mai ne visto ne sentito in vita mia prima d' ora e, semrpe a fare prove su prove ho ftt sta bella calc (na skifezza immane ma n'orgoglio x me )
dunque ora mi leggo le classi....

io faccio la prima superiore.....



#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;


// Dichiarazioni


int A,B,C;
char operatore;

void somma ()
{
C = A + B;
}

void sott ()
{
C = A - B;
}

void molt ()
{
C = A * B;
}

void divis ()
{
C = A / B;
}

// Programma
int main(int argc, char *argv[])
{
cout << " C++alcolatrice (Ver 1.0)\n";
cout << " Product by Carrozzo Luca®\n";
cout << "\n";
cout << "Inserisci primo fattore ... ";
cin >> A ;
cout << "Decidi l'operatore (+,-,*,/) ...";
cin >> operatore;
cout << "Inserisci secondo fattore ... ";
cin >> B;




switch(operatore)
{
case('+'): somma();
break;

case('-'): sott();
break;

case('*'): molt();
break;

case('/'): divis();
break;
}


cout << " il risultato e'... " << C << endl;


system("PAUSE");
return 0;
}


ciao
thx mille

RaouL_BennetH
07-12-2007, 16:36
@banryu79 : mi hai fatto cappottare :D

Fine OT.

Per quanto riguarda la calcolatrice:

Ok.. ma ti sei chiesto cosa succede se l'utente della calcolatrice anzichè inserire un numero intero mette un numero in virgola mobile oppure inserisce un carattere che succede? ;)

Poi, come consiglio da newbie a newbie (l'altro newbie sono io), per quanto riguarda il tuo quesito su forbice-carta-sasso (la morra cinese o come si chiama insomma :P ) io farei:

int carta = 1;
int forbice = 2;
int sasso = 3;

e poi mediante un controllo di flusso 'if', valuterei chi è più grande.

cionci
07-12-2007, 17:10
Ok.. ma ti sei chiesto cosa succede se l'utente della calcolatrice anzichè inserire un numero intero mette un numero in virgola mobile oppure inserisce un carattere che succede? ;)
Non è proprio una cosa da newbie ;)

RaouL_BennetH
07-12-2007, 17:18
Non è proprio una cosa da newbie ;)

Eh lo so benissimo ! Io non sono mai riuscito a farla una calcolatrice !

Il mio voleva solo essere uno spunto in più per ragionare su un problema :)

Eppoi... sul maledettissimo (nel senso buono) libro di Stroustrup C++ terza edizione, il primo esempio di programma didattico in C++ è proprio una calcolatrice. Altro piccolo OT, per me didatticamente quel libro non è proprio indicato a chi inizia a interessarsi al C++, almeno a me ha fatto questo effetto :(

cionci
07-12-2007, 17:29
Altro piccolo OT, per me didatticamente quel libro non è proprio indicato a chi inizia a interessarsi al C++, almeno a me ha fatto questo effetto :(
Non è assolutamente adatto ad un principiante...è più un riferimento al linguaggio per chi già lo conosce.

cULIPETO
08-12-2007, 17:06
rispondendo a roul x la calc è sufficente dikiarare double o float al posto di int....

e x la morra cinese pensavo prpr di fare come dici te....cioè assegnare a sasso = 1, carta = 2 e forbice = 3 un valore e creare una rand ke genera valroi da ke so 1 a 3 e creare tutte le combinazioni verificabili con if ..... non è il massimo ma funzionerà perlomeno.....

cionci
08-12-2007, 17:13
rispondendo a roul x la calc è sufficente dikiarare double o float al posto di int....
Il discorso è un po' più complesso, fidati.
Prova ad immettere un lettera al posto di un numero ;)

cULIPETO
08-12-2007, 17:36
uppppsssss :D :D :D giaaaa e vabeb dai 9 me lo tengo xò....:D :D

cmq sto andando avanti cn la morra cinese.... allora mi sn fatto un altro programmino x vedere bene come funziona rand....xò sn perplesso mi genera semrpe lo stesso numero :mbe: all'inizio pensavo di aver scazzato io ma leggendo su internet credo di aver capito ke rand genera un numero a caso solo una volta...è csì o sbaglio io ???

in ogni caso ekko qui ...


int val;



int main(int argc, char *argv[])
{
val = 0 + rand() % 348;
cout << val << endl;

system("PAUSE");
return EXIT_SUCCESS;
}



adesso cerco su internet o sulla bibbia...

cULIPETO
08-12-2007, 18:26
ok nnt gia capito devo usare srand ...

-Slash
08-12-2007, 23:42
Il discorso è un po' più complesso, fidati.
Prova ad immettere un lettera al posto di un numero ;)
e vabbe basta un isalpha() :D

comunque se hai intenzione di imparare con "la bibbia del c" in c++ credo che hai sbagliato strada

banryu79
09-12-2007, 01:42
e vabbe basta un isalpha() :D

comunque se hai intenzione di imparare con "la bibbia del c" in c++ credo che hai sbagliato strada

Potrebbe essere una strategia non convenzionale per fagocitare sintassi del linguaggio E pitfall del C tutto in una botta... :sofico:

Scherzi a parte, se il C++ è il tuo strumento, nel senso che è quello che vuoi imparare e stai studiando io ti consiglio il libro di Bruce Eckel "Thinking in C++".

Sempre che tu sappia leggere l'inglese con una certa disinvoltura.

Intanto ti posto questa paginetta farcita di link a risorse sul C++ (guide, tutorial, ecc...) anche in italiano:

-> paginetta di IoProgrammo (http://forum.ioprogrammo.it/thread.php?threadid=5672&boardid=20&sid=67c84c0621c6122111f6334197f7ee5d&page=1#10)

cionci
09-12-2007, 02:00
e vabbe basta un isalpha() :D
Magari :)

int n;
cin >> n
if(cin.fail())
{
cin.clear();
while(cin.peek() != '\n')
cin.ignore();
}

In questo modo si ignora tutta una riga di input nel caso venga immessa una stringa non convertibile ad intero.
comunque se hai intenzione di imparare con "la bibbia del c" in c++ credo che hai sbagliato strada
Già...

mindwings
09-12-2007, 10:29
se sei a digiuno di programmazione inzia dai deitel!
altrimenti abbandona i libri giocattolo e inizia con "C++ Primer"
di Lippman & Lajoie di cui ne esiste una traduzione italiana:
http://hpe.pearsoned.it/site/show.php?curr_sec=catalogo&sub_sec=cat_sk_libro&ISBN=8871920716

cULIPETO
09-12-2007, 20:36
ok benone allora intanto mi sono fagocitato il funzionamento di while e for (magari vi posto i programmini poi) ora sn tornato sulla morra cinese...:D :D allora come dicevo sto creande tutte le combinazioni possibili cn if e else if (un modo forse nn trp lineare ma cn switch ho dei problemini ....:muro: )
ma mi da un errore cioè invece ke cercare l'ipotesi corretta e in base a qll eseguire il set di istruzioni mi salta subito alla prima ora vi posto il codice

#include <cstdlib>
#include <iostream>

using namespace std;

int val_pc; // scelta del PC

int A; // tu cosa sciegli ??




int main(int argc, char *argv[])
{
srand(time(0));//seleziona il seme

val_pc = 1 + rand() % 3;

cout << val_pc << endl;


cout << "Giochiamo a sasso, carta, forbice ??\n";
cout << " 1 ...\n";
cout << " 2 ...\n";
cout << " 3 ...\n";
cout << "\n";
cin >> A ;



if (val_pc = 1)
{

if (A = 'sasso')
{
cout << "pari\n";
}
else if (A = 'carta')
{
cout << "hai vinto\n";
}
else if (A = 'forbice')
{
cout << "hai perso\n";
}

else if (val_pc = 2)

if (A = 'sasso')
{
cout << "hai perso\n";
}
else if (A = 'carta')
{
cout << "pari\n";
}
else if (A = 'forbice')
{
cout << "hai vinto";
}

else if (val_pc = 3)
{
if (A = 'sasso')
{
cout << "hai vinto\n";
}
else if (A = 'carta')
{
cout << "hai perso\n";
}
else if (A = 'forbice')
{
cout << "pari\n";
}

}







}
system("PAUSE");
return EXIT_SUCCESS;}




io ci sto ankora lavorando se trovate prima voi la soluzione fate un fiskio ( cosa sikuramente + probabile)

x qll ke dikono del libro diko ke avete assolutamente ragione mi devo convertire tutti gli esempi x c++ il ke x ora nn risulta essere trp difficile (differenze solo in printf --> cout ecc ) ma in futuro....cmq io ho dei libir sul c++ mio papoz ha detto ke dovrei avere qll di heckel poi ho turbo c++ e altri due .... sl ke sn tutti in inglese....:mc: io nn lo mastiko male x nnt xò nn credo ke nn mi verra facile cmq.....adesso vedo...


grazie mille ankora

carter100
09-12-2007, 20:52
Se metti val_pc==1 (2 e 3) probabilmente ti funziona, per come è ora forzi l'entrata nel primo if

Edit: come non detto, devi sistemare le uguaglianze in ogni if, non solo nei 3 principali

cULIPETO
09-12-2007, 21:11
ok ...


facendo come dici te.........nn scrive proprio niente...:D :D sikuramente sbaglio io.... potresti linkare il codice per favore??


thx mille
cmq la prossima versione mi studio un modo x assegnare a sasso carta forbice un numero e far si ke il compilatore rikonosca il numero come la costante stessa....
csì diventa molto + semplice anke x generare la giokata del pc....qlkn ha idee??

cionci
10-12-2007, 00:44
Quando hai finito ti faccio vedere come si può fare con una tabella ;)

cULIPETO
10-12-2007, 20:08
iuuuuupppppppiiiiiiiiiiiiiiiiii funzionaaaa
signorti vi presento il mio "morra cinese" ver 1.0!!!!!!!!!!!!!!!


grazie mille a tutti x il supporto!!!!!!!!!!!

[edit} adesso posto il codice un secondo ....



"MORRA CINESE"


#include <cstdlib>
#include <iostream>

using namespace std;

int val_pc; // scelta del PC

char A; // tu cosa sciegli ??




int main(int argc, char *argv[])
{
srand(time(0));//seleziona il seme

val_pc = 1 + rand() % 3;

//cout << val_pc << endl; // per verifiarne il funzionamento..,


cout << "Giochiamo a sasso, carta, forbice ??\n";
cout << " 1 ...\n";
cout << " 2 ...\n";
cout << " 3 ...\n";
cout << "\n";
cin >> A ;


// cosa gioka il pc ??


if (val_pc == 1)
{
cout << "sasso\n";
}
else if (val_pc == 2)
{
cout << "carta\n";
}
else if (val_pc == 3)
{
cout << "forbice\n";
}



// ki vince??


if (val_pc == 1)
{

if (A = 'sasso')
{
cout << "pari\n";
}
else if (A = 'carta')
{
cout << "hai vinto\n";
}
else if (A = 'forbice')
{
cout << "hai perso\n";
}


}


else if (val_pc == 2)

{
if (A = 'sasso')
{
cout << "hai perso\n";
}
else if (A = 'carta')
{
cout << "pari\n";
}
else if (A = 'forbice')
{
cout << "hai vinto";
}
}
else if (val_pc == 3)


{
if (A = 'sasso')
{
cout << "hai vinto\n";
}
else if (A = 'carta')
{
cout << "hai perso\n";
}
else if (A = 'forbice')
{
cout << "pari\n";
}
}




system("PAUSE");
}






CONVERTITORE KM --> M CN CICLO WHILE



#include <cstdlib>
#include <iostream>

#define MIN 0

using namespace std;

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

long M, Km;

long MAX, STP;

cout << "Definisci MAX..\n";
cin >> MAX;
cout << "Definisci INCREMENTO..\n";
cin >> STP;
cout << "\n";
cout << "\n";
cout << "Km" << " - " << "M\n";


for(Km=MIN; Km<MAX; Km+=STP)
{
M = Km * 1000;
cout << Km << " - " << M << "\n";

}


cout << "\n";



system("PAUSE");

}

cionci
12-12-2007, 15:40
cULIPETO: sai usare i vettori ?

cULIPETO
15-12-2007, 18:52
mmmmmm vagamente provo a leggermi qlks ...... scusate se sono stato un pò assente in sti gg ma ero semrpe in giro.....

ma perchè??


EDIT: ah ma sarebbero gli array???? se sn qll li so usare in modo molto vago anzi ci ho cominciato a guardare prpr l'altro gg a crare un array di 6 caratteri ke era + o meno csì:

char salve [5] = {'s', 'a', 'l', 'v', 'e'};

cout << salve;


era pressapoko csì
ma ora nn ce l'ho sotto ..... e funzionava solo ke dopo la parola "salve" mi scriveva 5 caratteri strani "tipo faccine freccette strane o altro.."

ndakota
15-12-2007, 19:08
perchè usi variabili globali? sono il male :D

carter100
15-12-2007, 19:15
perchè usi variabili globali? sono il male :D

In effetti...anche perchè non usi altre funzioni a parte il main quindi è la stessa cosa che scrivere quelle 2 righe di codice all'inizio del main

cULIPETO
15-12-2007, 19:50
Quote:
Originariamente inviato da ndakota Guarda i messaggi
perchè usi variabili globali? sono il male
In effetti...anche perchè non usi altre funzioni a parte il main quindi è la stessa cosa che scrivere quelle 2 righe di codice all'inizio del main



mmmmmmmmmmmm :mbe: :mbe: :mbe: :mbe: :mbe: :D :D :D :D
ahh ok kapito tuttttooooo :D :D :D

cionci
15-12-2007, 20:16
char salve [5] = {'s', 'a', 'l', 'v', 'e'};

cout << salve;


era pressapoko csì
ma ora nn ce l'ho sotto ..... e funzionava solo ke dopo la parola "salve" mi scriveva 5 caratteri strani "tipo faccine freccette strane o altro.."
Questo perché non hai messo il carattere di fine stringa...
Prova così:

char salve [] = {'s', 'a', 'l', 'v', 'e', '\0'};

Comunque ti volevo fare vedere come mettere tutti quegli if-else in una tabella ed al loro posto usare una sola istruzione ;) Più in là :)

cULIPETO
15-12-2007, 20:29
ottima idea ;)

illustrame come si può fare?? ;)

grazie mille

cionci
16-12-2007, 08:41
In teoria bisogna fare una tabella.

Se ancora ti vuoi limitare ai vettori (non è che le matrici siano più complicate) basta usare 3 vettori:

int giocatore1[] = {1, 1, 1, 2, 2, 2, 3, 3, 3};
int giocatore2[] = {1, 2, 3, 1, 2, 3, 1, 2, 3};
int vittoria[] = {0, 2, 1, 1, 0, 2, 2, 1, 0};

Il vettore vittoria serve per decidere chi vince (0 = pareggio, 1 e 2 vittoria del rispettivo giocatore).
Ora in teoria bisognerebbe andarsi a ricercare la riga corrispondente alle giocate dei due giocatori. Per un problema così semplice non ne vale la pena. Come vedi gli elementi così disposti fanno venire in mente una cosa...e se usassi le giocate dei giocatori per indicizzare direttamente vittoria ?

(giocata1 - 1) * 3 ci permette di posizionarci all'inizio della posizione delle possibili giocate del vettore 2...ma non ci serve nemmeno il vettore due, perché sommando a (giocata1 - 1) * 3 la giocata dell'altro giocatore posso indicizzare direttamente il vettore vittoria:

int vincitore = vittoria[(giocata1 - 1) * 3 + giocata2 - 1];

ecco qua già deciso chi vince ;)
Ora basta stampare "pareggio" in caso di 0, "vittoria giocatore 1" in caso di 1, "vittoria giocatore 2" in caso di 2.
Quindi con un solo vettore abbiamo tolto una decina di if :)

cULIPETO
16-12-2007, 18:02
bene ok adesso riesco a usare un array di caratteri m ase voglio creare un array ke mi stampa una serie di numeri ???

facendo int numeri [26]; nn funzia...

cionci
16-12-2007, 18:05
Sì, funziona proprio così. Devi metterci i numeri dentro.

cULIPETO
16-12-2007, 18:11
cioè dovrei scrivere

int numeri [26] = { '1', '2', '3', ...........

allora perde un pò di utilità.... :mbe: :mbe: :mbe:

cionci
16-12-2007, 18:17
No, ce li puoi anche mettere dentro dopo.

numeri[0] = 5;
numeri[1] = 2;
numeri[2] = 3;

Oppure:

for(i = 0; i < 26; i++)
scanf("%d", &numeri[i]);

cULIPETO
16-12-2007, 18:23
ah ok kapito cmq adesso uso anke io cin e cout... sto lasciando il c.......


EDIT no asp il rpimo metodo ke mi hai dato nn funziona....

cULIPETO
16-12-2007, 18:34
ok allora scusate se stavo rispondendo un pò rincoglionito ma ero preso dal fare una cosa....... comunque... allora adesso adesso sono alle prese con un altro progettino un pò ambizioso (enigma :stordita: :stordita: :stordita: ).

allora intanto ho stampato in colonna i numeri da 1 a 26 (le lettere dell'alfabeto) poi vorrei far in modo ke il computer stampi in colonna difianco in corrispondenza di ogni numero una lettera....è possibile farlo usando sempre i vettori ???

wingman87
16-12-2007, 22:51
Se intendi scrivere prima una colonna e poi affianco un'altra lascia perdere è troppo complicato. Quello che puoi fare senza difficoltà è scrivere insieme le due colonne, quindi immagino che avrai scritto un ciclo for al cui interno avrai fatto una cosa del tipo:
cout<<i<<endl;
Quello che devi fare è fare in modo che questo cout oltre al numero inserisca dello spazio e poi la lettera (che se ho capito hai messo in un array) quindi diventa una cosa così:
cout<<i<<"\t\t"<<a[i]<<endl;
la \t è una tabulazione, serve a fare spazio, a[i] invece è l'elemento i-esimo dell'array a (nel tuo caso l'array di caratteri).

PS: il tuo avatar è il protagonista di Doom?