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.

9 commenti:

  1. Buona sera! Questa è la mia implementazione del terzo esercizio, qualcuno è riuscito a farlo con range for?


    struct 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;
    }

    RispondiElimina
    Risposte
    1. 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;

      P.S. la typedef che hai usato non è necessaria

      Elimina
  2. 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;

    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;
    }

    RispondiElimina
  3. 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];

    RispondiElimina
  4. 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 .

    RispondiElimina
  5. Salve, qualcuno saprebbe spiegarmi perché in questo programma (esercizio 9) il compilatore non mi riconosce le funzioni "toupper" e "isspece" ?

    #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;
    }

    RispondiElimina
  6. il codice che hai postato non ha header e non usa toupper e isspace... forse hai sbagliato copia e incolla?

    RispondiElimina