infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva educationala => Subiect creat de: Adam Cristian din Octombrie 19, 2013, 19:15:52



Titlul: De ce nu-mi merge programul din topic in C++?
Scris de: Adam Cristian din Octombrie 19, 2013, 19:15:52
Acesta este programul, mai exact algorimtul fundamental de primalitate

#include <fstream>

using namespace std;
ifstream fin("primalitate.in");
ofstream fout("primalitate.out");
int n,i,prim;

int main()
{
    fin>>n;
    prim=1;
     if(n==0||n==1) prim=0;
      else for(i=2;i<=n/2;i++)
       if(n%i==0) prim=0;
       if(n%i!=0) prim=1;
    fout<<"Numarul este prim";
     else fout<<"Numarul nu este prim";
    fin.close();
    fout.close();
    return 0;
}

Vreau sa stiu de ce nu merge, deoarece de randul cu else fout imi apare o eroare spunandu-mi ca trebuie sa scriu in fata lui else if. Cand fac acest lucru imi spune ca este incorect ceea ce am scris.
Va rog mult daca ar putea cineva sa ma ajute si pe mine ca sa inteleg si eu unde am gresit


Titlul: Răspuns: De ce nu-mi merge programul din topic in C++?
Scris de: Dinu Radu din Octombrie 19, 2013, 20:07:29
Cod:
      if(n%i!=0)  prim=1;
    fout<<"Numarul este prim";
     else fout<<"Numarul nu este prim";

Primul if nu prea are sens , tu ai facut verificarea in primul for , deci trebuie eliminat.
Iti da eroarea pentru ca else-ul tau nu e corespondent niciunui if. Tu trebuie sa verifici
daca variabila prim este egala cu 1.In caz afirmativ afisezi ca nr e prim altfel afisezi mesajul ca nu e prim.

deci :
Cod:
    if (prim==1)
      fout<<"Numarul este prim";
    else fout<<"Numarul nu este prim";

  P.S nu e nevoie sa testezi divizorii decat pana la radical din n si e si mult mai rapid.


Titlul: Răspuns: De ce nu-mi merge programul din topic in C++?
Scris de: Adam Cristian din Octombrie 19, 2013, 20:32:53
Cod:
      if(n%i!=0)  prim=1;
    fout<<"Numarul este prim";
     else fout<<"Numarul nu este prim";

Primul if nu prea are sens , tu ai facut verificarea in primul for , deci trebuie eliminat.
Iti da eroarea pentru ca else-ul tau nu e corespondent niciunui if. Tu trebuie sa verifici
daca variabila prim este egala cu 1.In caz afirmativ afisezi ca nr e prim altfel afisezi mesajul ca nu e prim.

deci :
Cod:
    if (prim==1)
      fout<<"Numarul este prim";
    else fout<<"Numarul nu este prim";

  P.S nu e nevoie sa testezi divizorii decat pana la radical din n si e si mult mai rapid.

Am incercat cum mi-ai spus tu si tot mi-a dat aceeasi eroare cum ca trebuie sa adaug if in fata lui else


Titlul: Răspuns: De ce nu-mi merge programul din topic in C++?
Scris de: Andrei din Octombrie 19, 2013, 22:31:17
hei :)
incearca sa folosesti niste acolade, se observa mai usor blocurile de cod. Incearca asta

#include <fstream>

using namespace std;
ifstream fin("primalitate.in");
ofstream fout("primalitate.out");
int n,i,prim;

int main()
{
    fin>>n;
    prim=1;
     if(n==0||n==1)
        prim=0;
     else
        {
         for(i=2;i<=n/2;i++)
                {
                if(n%i==0) prim=0;
                else
                 prim=1;
                }
        if(prim==1)
                fout<<"Numarul este prim";
        else
                fout<<"Numarul nu este prim";
        }
    fin.close();
    fout.close();
    return 0;
}



Titlul: Răspuns: De ce nu-mi merge programul din topic in C++?
Scris de: Adam Cristian din Octombrie 20, 2013, 07:26:22
hei :)
incearca sa folosesti niste acolade, se observa mai usor blocurile de cod. Incearca asta

#include <fstream>

using namespace std;
ifstream fin("primalitate.in");
ofstream fout("primalitate.out");
int n,i,prim;

int main()
{
    fin>>n;
    prim=1;
     if(n==0||n==1)
        prim=0;
     else
        {
         for(i=2;i<=n/2;i++)
                {
                if(n%i==0) prim=0;
                else
                 prim=1;
                }
        if(prim==1)
                fout<<"Numarul este prim";
        else
                fout<<"Numarul nu este prim";
        }
    fin.close();
    fout.close();
    return 0;
}


Ms pt ajutor, Andrei