PDA

View Full Version : es 10 capitolo 5 del vangelo secondo Stroustrup. l'ho fatto bene?


ndakota
15-10-2008, 14:19
ciao a tutti, sto seguendo il libro "c++ - linguaggio, libreria standard, principi di programmazione" di Bjarne Stroustrup e facendo gli esercizi che si trovano a fine capitolo. volevo sapere se ho fatto bene questo esercizio che il libro propone:

si definisca un array di stringhe in cui le stringhe contengano i nomi dei mesi. Si stampino queste stringhe e poi si passi l'array ad una funzione che stampi le stesse stringhe.

io ho fatto così:


#include <iostream>

using namespace std;

void f(char*[], int);

int main()
{
const int dim = 12;
char* arr[dim] = { "gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio",
"agosto", "settembre", "ottobre", "novembre", "dicembre" };

for(int i = 0; i < dim; ++i)
{
cout << arr[i] << endl;
}

cout << endl;

f(arr, dim);

return 0;
}

void f(char* arr[], int dim)
{
for(int i = 0; i < dim; ++i)
{
cout << arr[i] << endl;
}
}



è chiaro che l'esercizio(almeno arrivare all'output desiderato) è banalissimo ma l'ho fatto nel modo giusto? questo thread nasce soprattutto per chiedere:
non si trovano le soluzioni degli esercizi del libro su internet? ho provato a cercare ma non le ho trovate. nel caso, posso usare questo thread per scriverci tutti gli esercizi che farò da qui alla fine? :sofico:

Vincenzo1968
15-10-2008, 16:11
Si, l'esercizio è svolto nel modo corretto.

Per le soluzioni, c'è questo libro:

http://www.amazon.com/C-Solutions-Companion-Programming-Language/dp/0201309653

non so se ci sia qualche risorsa gratuita su internet.

Ciao

ndakota
15-10-2008, 16:28
addirittura un libro per le soluzioni degli esercizi?? :eek:

Vincenzo1968
15-10-2008, 16:52
addirittura un libro per le soluzioni degli esercizi?? :eek:

Allucinante vero?

Dovrebbero seguire tutti l'esempio del grande Knuth: mettere le soluzioni alla fine del libro.

DanieleC88
15-10-2008, 20:20
Dovrebbero seguire tutti l'esempio del grande Knuth: mettere le soluzioni alla fine del libro.
Magari. Sono giorni che cerco di risolvere un problema del Cormen e non ne vengo a capo... e su Internet nemmeno lo trovo. :D

sottovento
16-10-2008, 07:29
<CUT>
si definisca un array di stringhe in cui le stringhe contengano i nomi dei mesi. Si stampino queste stringhe e poi si passi l'array ad una funzione che stampi le stesse stringhe.
<CUT>


Sei sicuro che si riferisse alle stringhe C-like? L'esercizio sembra avere piu' senso se si tenta di risolverlo con le std::string, no?
In questo caso, l'obiettivo sarebbe quello di verificare alcuni concetti del C++ (e non del C).

ndakota
16-10-2008, 11:08
si sono sicuro, semplicemente perchè l'esercizio è nel capitolo "puntatori, array e stutture". la libreria standard è moooooolto piu avanti :p

ndakota
16-10-2008, 12:24
Sei sicuro che si riferisse alle stringhe C-like? L'esercizio sembra avere piu' senso se si tenta di risolverlo con le std::string, no?
In questo caso, l'obiettivo sarebbe quello di verificare alcuni concetti del C++ (e non del C).

inizio a pensare che hai ragione tu.. in altri esercizi dice "in un array di char terminato da 0(nello stile del C)". quindi mi sa che quando dice stringhe si riferisce sempre a std::string.

sottovento
16-10-2008, 12:32
inizio a pensare che hai ragione tu.. in altri esercizi dice "in un array di char terminato da 0(nello stile del C)". quindi mi sa che quando dice stringhe si riferisce sempre a std::string.

Beh, ti credo. Cmq secondo me l'esercizio comincia a diventare un attimo piu' interessante quando usi anche qualche container invece dell'array. Che so, un vector. Ovviamente IMFO....

ndakota
16-10-2008, 12:37
si ovviamente a questo punto penso bisogna utilizzare un vector<string> solo che stavo pensando a come inizializzarlo in un colpo solo ma non mi viene in mente niente.. ho guardato su cplusplus.com i vari costruttori sia di string che di vector ma nada :mc:

ndakota
16-10-2008, 13:11
bon l'ho fatto così:


#include <iostream>
#include <vector>
#include <string>

using namespace std;

void f(vector<string>&);

int main()
{

vector<string> arr;

arr.push_back("gennaio");
arr.push_back("febbraio");
arr.push_back("marzo");
arr.push_back("aprile");
arr.push_back("maggio");
arr.push_back("giugno");
arr.push_back("luglio");
arr.push_back("agosto");
arr.push_back("settembre");
arr.push_back("ottobre");
arr.push_back("novembre");
arr.push_back("dicembre");

for(size_t i = 0; i < arr.size(); ++i)
{
cout << arr.at(i) << endl;
}

cout << endl;

f(arr);

return 0;
}

void f(vector<string>& arr)
{
for(size_t i = 0; i < arr.size(); ++i)
{
cout << arr.at(i) << endl;
}
}

sottovento
16-10-2008, 14:26
Direi che hai svolto l'esercizio con successo. Vorrei aggiungere due considerazioni:

1 - passi alla funzione un riferimento. Ottimo. Potresti pero' metterlo costante;

2 - Il tuo codice (che funziona perfettamente) ha una "richiesta implicita" al container: quella dell'accesso casuale ad ogni elemento del container stesso.
A ben vedere, non ne avresti bisogno. Se stessi scrivendo una libreria, per esempio, questa richiesta limiterebbe l'uso del tuo algoritmo ad un certo numero di container.
Siccome non ne hai veramente bisogno, potresti eliminare questa richiesta, rendendo l'algoritmo (beh, e' solo una stampa, ma non toglie nulla al discorso) piu' generale e quindi utilizzabile in un maggior numero di casi.

ndakota
16-10-2008, 15:30
per il punto 1 ci sono, è stata solo una dimenticanza.. purtroppo è del punto 2 che non ho capito niente :cry: intanto il thread prende una bella piega, sapevo che pure con esercizi semplici ci sarebbe stato da imparare, grazie :p

M4rk191
16-10-2008, 17:56
un piccolo OT:
il libro sopra citato, si potrebbe come definire "il più ufficiale per il c++"
per il java, quale potrebbe essere?

ndakota
16-10-2008, 22:15
un piccolo OT:
il libro sopra citato, si potrebbe come definire "il più ufficiale per il c++"
per il java, quale potrebbe essere?

non penso ce ne sia uno.. io ho trovato ottimo "concetti di informatica e fondamenti di java" Cay Horstmann Apogeo l'ultima edizione del 2007..

khelidan1980
17-10-2008, 09:51
Magari. Sono giorni che cerco di risolvere un problema del Cormen e non ne vengo a capo... e su Internet nemmeno lo trovo. :D

piccolo OT
se ti interessa il mio prof di Algoritmi mi ha passato il pdf delle soluzioni della seconda edizione inglese,io purtroppo ho la prima e non ci azzecca molto e di spendere 71 euro per la seconda non ci penso minimamente,va bene tutto che è la bibbia degli algoritmi ma 71 euro per un libro francamente mi sembrano troppi....fine OT

ndakota
17-10-2008, 11:10
prenderlo in italiano a 55 fa proprio schifo? :D

banryu79
17-10-2008, 11:39
...io purtroppo ho la prima e non ci azzecca molto e di spendere 71 euro per la seconda non ci penso minimamente,va bene tutto che è la bibbia degli algoritmi ma 71 euro per un libro francamente mi sembrano troppi....fine OT

OT:
io veramente ho comprato la seconda edizione di quel testo a 50 euro, tramite bol.

sottovento
17-10-2008, 11:54
per il punto 1 ci sono, è stata solo una dimenticanza.. purtroppo è del punto 2 che non ho capito niente :cry: intanto il thread prende una bella piega, sapevo che pure con esercizi semplici ci sarebbe stato da imparare, grazie :p

Scusa se sono sparito, ma ho lavorato fino a notte fonda (ovviamente senza ottenere alcun risultato).
In sostanza: hai usato un vector, in modo di scrivere qualcosa del tipo "vect[index]", assumendo che il container in uso lo possa fare.
Se il container in uso fosse stato per esempio una lista, questa operazione non l'avresti potuta fare. Pero' a ben vedere, la potresti evitare poiche' quello che a te interessa e' partire dal primo elemento, stamparlo e passare al successivo.

La richiesta "passa al successivo" e' piu' "debole" della richiesta "dammi l'elemento in posizione i", quindi il tuo algoritmo sara' piu' generale....

Ti prego di scusarmi se sto parlando di cose che devi ancora affrontare.

ndakota
17-10-2008, 12:08
e se usassi un iteratore non aggirerei questo problema?

khelidan1980
17-10-2008, 12:52
prenderlo in italiano a 55 fa proprio schifo? :D

OT:
io veramente ho comprato la seconda edizione di quel testo a 50 euro, tramite bol.

Buono a sapersi,l'avevo trovato a 70! ;) Ora la smetto che sto inzozzando il 3d! ;)

ndakota
17-10-2008, 13:31
Buono a sapersi,l'avevo trovato a 70! ;) Ora la smetto che sto inzozzando il 3d! ;)

ma va figurati.. mi stupisco che sia ancora aperto piuttosto visto la manca di [C++] nel titolo :O

DanieleC88
17-10-2008, 13:43
piccolo OT
se ti interessa il mio prof di Algoritmi mi ha passato il pdf delle soluzioni della seconda edizione inglese,io purtroppo ho la prima e non ci azzecca molto e di spendere 71 euro per la seconda non ci penso minimamente,va bene tutto che è la bibbia degli algoritmi ma 71 euro per un libro francamente mi sembrano troppi....fine OT
Sì, in effetti... se ce l'hai passamelo che ho il sospetto che sia un quesito bastardo (cioè senza una soluzione ottimale). :D
prenderlo in italiano a 55 fa proprio schifo? :D
Io l'ho preso dall'India e costava 8 dollari. Comprese spedizioni sarà costato poco più di 20€. :asd:

khelidan1980
17-10-2008, 14:00
Sì, in effetti... se ce l'hai passamelo che ho il sospetto che sia un quesito bastardo (cioè senza una soluzione ottimale). :D

Io l'ho preso dall'India e costava 8 dollari. Comprese spedizioni sarà costato poco più di 20€. :asd:

Ma siete troppo avanti! :D
Passami la tua mail in mp che te lo spedisco,cmq i quesiti non ancora risolti hanno il temutissimo asterisco! ;)

M4rk191
17-10-2008, 15:42
di che esercizi si tratta? per n00b, o di programmazione avanzata?