Oppure

Loading
23/10/09 11:42
zaire90
Salve a tutti.
Leggete questo programma:
/*   QUESTO PROGRAMMA ACQUISISCE DA TASTIERA UN NUMERO INTERO POSITIVO N<=50
     E SUCCESSIVAENTE n NUMERI INTERI CHE SUDDIVIDE IN QUATTRO INSIEMI A,B,C
     E D, DOVE A E' L'INSIEME DEI NUMERI DISPARI, B E' L'INSIEME DEI MULTIPLI DI
     4, C E' L'INSIEME DEI MULTIPLI DI 10 E D E' L'INSIEME CHE RACCHIUDE TUTTI
     GLI ALTRI INTERI SCRITTI. INFINE IL PROGRAMMA SCRIVE SEPARATAMENTE I
     QUATTRO INSIEMI DICHIARANDO ANCHE QUALE SIA L'EVENTUALE INSIEME VUOTO    */
     
#include <iostream>
using namespace std;

int main()
{
     int N,n[50],i;
     cout<<"- 'A' Insieme dei numeri dispari\n";
     cout<<"- 'B' Insieme dei multipli di 4\n";
     cout<<"- 'C' Insieme dei multipli di 10\n";
     cout<<"- 'D' Insieme dei numeri rimanenti";
     cout<<"\n\nScrivi un numero N positivo minore o uguale a 50:";
     cout<<"\n\n                   N = ";cin>>N;
     while ((N<0)||(N>50))
           {
            cout<<"N deve essere positvo e minore o uguale a 50!";
            cout<<"\n\nScrivi un numero N minore o uguale a 50:";
            cout<<"\n\n                N = ";cin>>N;
           }
     cout<<"\nScrivi adesso gli n[N] numeri positivi:\n";
     for (i=1;i<=N;i++)
         {
          cout<<"\nn["<<i<<"] = ";
          cin>>n[i];
         }
     cout<<"\n\nAdesso il programma dividera' i numeri inseriti nei 4 insiemi.";
     
     cout<<"\n\nINSIEME 'A':\n";
     for (i=1;i<=N;i++)
          if (!(n[i]%2==0))
             cout<<"\nn["<<i<<"] = "<<n[i];
          else
             cout<<"L'insieme 'A' e' vuoto";
             
     cout<<"\n\nINSIEME 'B':\n";
     for (i=1;i<=N;i++)
          if ((n[i]%4==0)&&(n[i]!=0))
             cout<<"\nn["<<i<<"] = "<<n[i];
     
     cout<<"\n\nINSIEME 'C':\n";
     for (i=1;i<=N;i++)
          if ((n[i]%10==0)&&(n[i]!=0))
             cout<<"\nn["<<i<<"] = "<<n[i];
     
     cout<<"\n\nINSIEME 'D':\n";
     for (i=1;i<=N;i++)
          if ((!(!(n[i]%2==0))) && (!(n[i]%4==0)) && (!(n[i]%10==0)) || (n[i]==0))
             cout<<"\nn["<<i<<"] = "<<n[i];
     
     cout<<"\n\n\n";
     system("PAUSE");
     return 0;
}


Devo riuscrire a completare il programma con un messaggio che dice quando li insiemi sono vouti. Come vedete (solo per l'insieme 'A'), così come l'ho scritto io, ripete il messaggio tante volte quanto è il numero N!
Non riesco a inserire bene questo dannato messaggio!
Mi potreste aiutare!?!?

aaa
23/10/09 12:00
theprogrammer
Saprai cosa sono i "flag" ... no ?

Per l'insieme A, ad esempio

  bool aisempty = true;
  cout<<"\n\nINSIEME 'A':\n"; 
  for (i=1;i<=N;i++) 
    if (!(n[i]%2==0)) 
    {
      cout<<"\nn["<<i<<"] = "<<n[i]; 
      aisempty = false;
    }

  if (aisempty)
    cout<<"L'insieme 'A' e' vuoto"; 
aaa
23/10/09 12:05
zaire90
Cavolo....! No mi dispiace non sono cosa sono i flag!
Mi potresti spiegare il loro uso??

PS (Cmq bool sta per "booleano" giusto?)
aaa
23/10/09 12:09
theprogrammer
Nulla di speciale ... sì booleano ... vero ... falso.

Una semplice variabile che ti dice se e' vero che l'insieme e' vuoto o e' falso.

1) Assumi all'inizio che sia vero (ovvero che l'insieme sia vuoto)
2) Esegui il ciclo e se visualizzi almeno un elemento assumi che sia falso (ovvero che l'insieme NON e' vuoto)
3) All'uscita del ciclo controlli il valore del flag


Stiamo parlando di tecniche usate alle basi del C (anche se con semplici variabili intere valorizzate a 0 o 1 ..)
Ultima modifica effettuata da theprogrammer 23/10/09 12:10
aaa
23/10/09 12:33
zaire90
Ok grazie mille per la dritta. Ora il codice funziona perfettamente!:k:
aaa