infoarena

Comunitate - feedback, proiecte si distractie => Feedback infoarena => Subiect creat de: Da Vinci din Februarie 18, 2016, 22:38:22



Titlul: Eroare de compilare
Scris de: Da Vinci din Februarie 18, 2016, 22:38:22
De ce urmatorul cod imi merge cand introduc datele manual,dar imi da eroare de compilare in evaluatorul de pe infoarena?
Multumesc anticipat!

http://www.infoarena.ro/job_detail/1605358

Cod:
#include <fstream>
 
using namespace std;
ifstream fin("arc.in");
ofstream fout("arc.out");
int v,c,n,a[10000],b[10000],i,prev,k,p=1,mx=4,poz,aux,s;
int main()
{fin>>v>>n;
if(v==1)
{for(i=1;i<=n;i++)
 {fin>>c;
 if(c!=prev)
 
    {
        prev=c;
 k++;
 }
 
 }
fout<<k;
}
else{
k=0;
fin>>c;
prev=c;
if(c!=prev)
    {
        a[p]=prev;
        b[p]=k;
        prev=c;
        k=0;
        p++;
        }
else if(c==prev)
k++;
for(i=2;i<=n;i++)
 
 
 
{fin>>c;
if(c!=prev)
    {
        a[p]=prev;
        b[p]=k;
        prev=c;
        k=1;
        p++;
        }
else if(c==prev)
{k++;}
}
a[p]=c;b[p]=k;
n=p;
while(mx>=3){mx=-1;
 
for(i=1;i<=n;i++){
        if(b>mx)
        {mx=b;poz=i;}}
 
if(mx>=3){
    a[poz]=0;b[poz]=0;
for(i=poz;i<=n-1;i++){
    aux=a;
a=a[i+1];
a[i+1]=aux;
aux=b;
b=b[i+1];
b[i+1]=aux;}
    n--;
for(i=1;i<=n-1;i++)
    {
    if(a==a[i+1]){
            b+=b[i+1];
    a[i+1]=0;
    b[i+1]=0;
    for(i=i+1;i<=n;i++)
        {
            aux=a;
a=a[i+1];
a[i+1]=aux;
aux=b;
b=b[i+1];
b[i+1]=aux;}
n--;
break;}
    }
}
else break;
}
if(n==0)fout<<"0";
else{
        for(i=1;i<=n;i++)
        s+=b;
fout<<s<<"\n";
        for(i=1;i<=n;i++){
    while(b!=0)
        {b--;
    fout<<a<<"\n";}}
}
}
return 0;
}


Titlul: Răspuns: Eroare de compilare
Scris de: Gavrila Vlad din Februarie 18, 2016, 23:58:30
In namespace-ul std exista o functie numita tot prev, ca variabila ta. Atunci cand incerci sa compilezi si accesezi variabila prev, compilatorul nu stie daca te referi la functia din std sau la variabila ta (desi pentru tine e evident pe care o vrei). Solutia corecta ar fi sa nu mai folosesti tot namespace-ul prin
Cod:
using namespace std;
...
fin>>x;
ci sa apelezi functiile din namespace astfel
Cod:
std :: fin>>x;

Imi dau seama ca asta e incomod (nici eu nu fac asa :oops: ), asa ca o solutie alternativa ar fi sa iti numesti variabilele "prv" si "nxt" cand ai vrea "prev" si "next" (si cu next e aceeasi problema).

Cat despre de ce la tine merge si pe infoarena nu, probabil tu ai un compilator mai vechi / pe un standard mai vechi C++ unde "prev" si "next" nu sunt functii in std.