Blog del corso di Programmazione (9 CFU) tenuto da Marco La Cascia presso la sede di Agrigento dell'Universita' di Palermo per il corso di laurea in Ingegneria Gestionale e Informatica. Tratta la programmazione a oggetti in C++.
venerdì 11 ottobre 2013
Note capitolo 3 ed esercitazione
Disponibili le note relativa agli argomenti del capitolo 3 del libro di testo e una nuova esercitazione.
Nel tuo codice, come vedremo giovedì, c'è un grave errore riguardo la creazione dell'array dato che la dimensione di un array deve essere nota a tempo di compilazione. Come l'hai scritto tu compila ma potrebbe anche dare problemi a runtime. Col range for si può fare usando una variabile n per la stampa e usando un riferimento (&n) per la lettura da tastiera: for(auto n : nuovo) cout << n.x << ", " << n.y << endl; for(auto &n : nuovo) cin >> n.x >> n.y;
Salve. Io ho fatto l'esercizio 6 della terza esercitazione (quello che chiedeva di rimuovere i punti da una stringa ) in questo modo. C'è un modo piu diretto o piu corretto??
#include #include #include using std::cout; using std::cin; using std::endl; using std::string;
string string_replaced(string);
string string_reloaded(string);
int main(){ string s1; cout<<"immettere una stringa: "; cin>>s1;
In realtà, in base a quello che chiedeva il testo, bastava una scansione dell'intera stringa e inviare a cout solo i caratteri di s che non sono di punteggiatura: for(string::size_type i=0; i<s.size(); ++i) if(ispunct(s[i])) cout << s[i];
E vero , non avevo compreso bene il testo . Tra l altro ,anche a voler ottenere la stringa ,la prima funzione è inutile . La ringrazio per la risposta .
Buona sera! Questa è la mia implementazione del terzo esercizio, qualcuno è riuscito a farlo con range for?
RispondiEliminastruct punti{
double x;
double y;
};
typedef struct punti punti;
int main(){
unsigned int a;
cout<<"Inserire numero di punti";
cin>>a;
punti nuovo[a];
for(unsigned int i=0;i!=a;++i){
punti tmp;
cin>>tmp.x>>tmp.y;
nuovo[i].x=tmp.x;
nuovo[i].y=tmp.y;
}
for(unsigned int i=0;i!=a;++i){
cout<<"("<<nuovo[i].x<<","<<nuovo[i].y<<")"<<endl;
}
return 0;
}
Nel tuo codice, come vedremo giovedì, c'è un grave errore riguardo la creazione dell'array dato che la dimensione di un array deve essere nota a tempo di compilazione. Come l'hai scritto tu compila ma potrebbe anche dare problemi a runtime.
EliminaCol range for si può fare usando una variabile n per la stampa e usando un riferimento (&n) per la lettura da tastiera:
for(auto n : nuovo)
cout << n.x << ", " << n.y << endl;
for(auto &n : nuovo)
cin >> n.x >> n.y;
P.S. la typedef che hai usato non è necessaria
La ringrazio per i chiarimenti.
EliminaSalve.
RispondiEliminaIo ho fatto l'esercizio 6 della terza esercitazione (quello che chiedeva di rimuovere i punti da una stringa ) in questo modo. C'è un modo piu diretto o piu corretto??
#include
#include
#include
using std::cout;
using std::cin;
using std::endl;
using std::string;
string string_replaced(string);
string string_reloaded(string);
int main(){
string s1;
cout<<"immettere una stringa: ";
cin>>s1;
s1=string_replaced(s1);
s1=string_reloaded(s1);
cout<<s1<<endl;
return 0;
}
string string_replaced(string s1){
string::size_type i,len;
len=(s1.size());
for(i=0;i<len;++i){
if(ispunct(s1[i]))
s1[i]='\n';
}
return s1;
}
string string_reloaded(string s1){
string s2;
string::size_type i,len;
len=s1.size();
for(i=0;i<len;++i){
if(s1[i]!='\n')
s2+=s1[i];
}
return s2;
}
In realtà, in base a quello che chiedeva il testo, bastava una scansione dell'intera stringa e inviare a cout solo i caratteri di s che non sono di punteggiatura:
RispondiEliminafor(string::size_type i=0; i<s.size(); ++i)
if(ispunct(s[i]))
cout << s[i];
E vero , non avevo compreso bene il testo .
RispondiEliminaTra l altro ,anche a voler ottenere la stringa ,la prima funzione è inutile .
La ringrazio per la risposta .
Salve, qualcuno saprebbe spiegarmi perché in questo programma (esercizio 9) il compilatore non mi riconosce le funzioni "toupper" e "isspece" ?
RispondiElimina#include
#include
#include
#include
using std::toupper;
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main(){
vector v;
string s;
cout<<"Inserire parole"<>s){
v.push_back(s);
}
for(auto r=0; r7){
for(int i=0,r=0;i!=v.size();i++,r++){
cout<<v[i]<<" ";
if(r==7){
cout<<endl;
r=0;
}
}
}else if(v.size() <= 7){
for(auto r:v){
cout<<r;
}
}
return 0;
}
il codice che hai postato non ha header e non usa toupper e isspace... forse hai sbagliato copia e incolla?
RispondiEliminaQuesto commento è stato eliminato dall'autore.
Elimina