Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Fisiere auxiliare  (Citit de 2220 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
moon
Strain
*

Karma: -7
Deconectat Deconectat

Mesaje: 28



Vezi Profilul
« : Martie 12, 2011, 16:57:59 »

Este permisa folosirea de fisiere auxiliare la OJI/ONI ?
Spre exemplu, daca doresc sa schimb structurile folosite de program, imi vine mai usor sa fac o afisare intr-un fisier auxiliar , urmand apoi sa le recitesc sub alt format, decat sa fac atribuirile manual. Nu e cea mai eficienta metoda, dar te salveaza de o gramada de eforturi.
Memorat
andrei-alpha
Client obisnuit
**

Karma: 103
Deconectat Deconectat

Mesaje: 91



Vezi Profilul
« Răspunde #1 : Martie 12, 2011, 17:19:52 »

Nu este permisa scrierea/citirea in fisiere auxiliare.
Memorat
moon
Strain
*

Karma: -7
Deconectat Deconectat

Mesaje: 28



Vezi Profilul
« Răspunde #2 : Martie 12, 2011, 18:37:59 »

Esti sigur ? Eu m-am uitat peste regulament si nu am sesizat nicio astfel de precizare.
Am trimis niste solutii bazate pe folosirea de fisiere auxiliare atat pe infoarena cat si pe campion, si nu am avut probleme la evaluare.
Exemplu: (Problema Reteta2)
Cod:
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
int i=1,j,n,s=0,nr,inc,ii,sum,tot=0,u2,u,vc[1000];
char v[1020],v2[1000],v3[1000][1000];
int trans(char x)
{
if(x=='9') return 9;
else if(x=='8') return 8;
else if(x=='7') return 7;
else if(x=='6') return 6;
else if(x=='5') return 5;
else if(x=='4') return 4;
else if(x=='3') return 3;
else if(x=='2') return 2;
else if(x=='1') return 1;
else if(x=='0') return 0;
return 10;
}
int check(int x,int y)
{
int z;
z=strlen(v3[x]);
for(i=0;i<=z;i++)
if(v3[x][i]>v3[y][i])
return 2;
else if(v3[x][i]<v3[y][i])
return 3;
return 0;
}
int main()
{

ifstream f("reteta2.in");
while(f>>v[i])
{
i++;
}
//cout<<v[30]<<" ";
for(j=0;j<=i;j++)
if(v[j]==')' && trans(v[j+1])<10)
{
nr=0;
inc=j+1;
while(trans(v[j+1])<10)
{
nr++;
j++;
}
sum=0;
for(ii=inc;ii<=j;ii++)
{
sum=sum*10+trans(v[ii]);
v[ii]=' ';
}
v[inc-1]=' ';
tot+=sum;
}
else if(v[j]=='(' || v[j]==')')
v[j]=' ';

ofstream g("reteta2.out");
g<<tot<<'\n';
//u2=2;
int n=0;
for(j=1;j<=i;j++)
if(v[j]!=' ')
{
n++;
v2[n]=v[j];
}
int tot2=0;
ofstream g2("reteta2.aux");
for(j=1;j<=n;j++)
{
if(trans(v2[j])<10 && trans(v2[j])>=0) u=2;
else u=1;
if(trans(v2[j+1])<10 && trans(v2[j+1])>=0) u2=1;
else u2=2;
if(u==2 && u2==2)
{
g2<<v2[j]<<'\n';
tot2++;
}
else if(u==1 && u2==1)
{
g2<<v2[j]<<" ";
}
else g2<<v2[j];
//else if(u==
}
g2.close();
ifstream f2("reteta2.aux");
for(j=1;j<=tot2;j++)
{
f2>>v3[j]>>vc[j];
// cout<<v3[j]<<" "<<vc[j]<<'\n';
}
int ccc=0,viz[1001],jj,sol[1000],nrrr=0;
for(j=1;j<=tot2;j++)
{
if(!viz[j])
{
nrrr++;
sol[nrrr]=j;
for(jj=j+1;jj<=tot2;jj++)
if(!check(j,jj) && !viz[jj])
{
vc[j]+=vc[jj];
viz[jj]=1;
}
viz[j]=1;
}
}
//for(j=1;j<=nrrr;j++)
//cout<<v3[sol[j]]<<" "<<vc[sol[j]]<<'\n';
int aux;

for(j=1;j<=nrrr;j++)
for(jj=j+1;jj<=nrrr;jj++)
if(check(sol[j],sol[jj])==2)
{
aux=sol[j];
sol[j]=sol[jj];
sol[jj]=aux;
}

for(j=1;j<=nrrr;j++)
g<<v3[sol[j]]<<" "<<vc[sol[j]]<<'\n';

}
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #3 : Martie 12, 2011, 20:46:09 »

Interesant, nu ar trebui sa poti sa faci asa ceva. Nu iti inteleg exact motivatia pentru care vrei sa scrii in fisiere auxiliare (nu inteleg de ce ti-ar fi mai simplu asa), insa acest lucru nu este permis la olimpiade si nu ar trebui sa fie permis nici pe infoarena.
Memorat
moon
Strain
*

Karma: -7
Deconectat Deconectat

Mesaje: 28



Vezi Profilul
« Răspunde #4 : Martie 12, 2011, 21:24:34 »

In problema de mai sus spre exemplu, aveam de transpus un vector de tip char, intr-o matrice de tip char + un vector de tip int. (Alta idee pe langa folosirea unui fisier auxiliar nu mi-a venit. )

Citirea am facut-o cu ajutorul unui vector de tip char:
Fisier.in:
Cod:
(((((((unt 20 ou 4 apa 500)10 rom 100 apa 20 zahar 2 abracadabraabracadab 5)30 zaha 10 abracadabraabracadab 50)99(apa 10 zahar 20 unt 100 apa 999)5)30(a 1 b 1 c 1 apa 25 abracadabraabracadab 5)20)10 abracadabraabracadab 150)4 abracadabraabracadab 52)98

Dupa preprocesare, am facut afisarea (de caractere) in fisierul auxiliar:
fisier.aux
Cod:
unt 20
ou 4
apa 500
rom 100
apa 20
zahar 2
abracadabraabracadab 5
zaha 10
abracadabraabracadab 50
apa 10
zahar 20
unt 100
apa 999
a 1
b 1
c 1
apa 25
abracadabraabracadab 5
abracadabraabracadab 150
abracadabraabracadab 52

Pentru recitire, am folosit o matrice de cuvinte, si un vector de tip int, pentru a retine valorile corespunzatoare fiecarui ingredient (afisate initial sub forma de caractere).
Restul e can-can.
 

Citat din mesajul lui: devilkind
si nu ar trebui sa fie permis nici pe infoarena.
De ce nu ?
« Ultima modificare: Martie 12, 2011, 21:42:43 de către Chichi Radu » Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines