infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Ungureanu Daniel din Aprilie 19, 2008, 23:32:47



Titlul: exemplu + oni
Scris de: Ungureanu Daniel din Aprilie 19, 2008, 23:32:47
Sorry daca este postat gresit, dar, urmatorul program ar merge pe compilatorul de la oni?

Cod:
// aflarea valorii maxime dintr-un interva, inlocuirea unei valori

#include <iostream.h>
#include <fstream.h>

ifstream f("date.in");
ofstream g("date.out");

const int dim=100000;
int N, M;
int MaxArb[2*dim+1];
int start, finish, Val, Pos, maxim;

int Maxim(int a, int b)
{
       if ( a > b ) return a;
       return b;
}

void Update(int nod, int left, int right)
{
     if ( left == right )
     {
  MaxArb[nod] = Val;
  return;
     }

     int div = (left+right)/2;
     if ( Pos <= div ) Update(2*nod,left,div);
     else              Update(2*nod+1,div+1,right);

     MaxArb[nod] = Maxim( MaxArb[2*nod], MaxArb[2*nod+1] );
}

void Query(int nod, int left, int right)
{
     if (( start <= left ) && ( right <= finish ))
     {
  if ( maxim < MaxArb[nod] ) maxim = MaxArb[nod];
  return;
     }

     int div = (left+right)/2;
     if ( start <= div ) Query(2*nod,left,div);
     if ( div < finish ) Query(2*nod+1,div+1,right);
}

int main()
{
    int X, A, B;
    f>>N;
    f>>M;
    for ( int i = 1; i <= N; i++ )
    {
f>>X;
Pos = i, Val = X;
Update(1,1,N);
    }

    for ( i=1; i <= M; i++ )
    {
f>>X;
f>>A;
f>>B;
if ( X == 0 )
{
     maxim = -1;
     start = A, finish = B;
     Query(1,1,N);
     g<<maxim;
     g<<endl;
}
else
{
    Pos = A, Val = B;
    Update(1,1,N);
}
    }
}




Titlul: Răspuns: exemplu + oni
Scris de: Lucian Boca din Aprilie 20, 2008, 00:40:25
In general, poti testa sursele pe site - daca iti compileaza aici, vor compila cu siguranta si la ONI. Spre exemplu, arborii de intervale ii poti testa in arhiva educationala, aici (http://infoarena.ro/problema/arbint)

Exemplul tau, de exemplu, compileaza cu warning-uri referitoare la fisierele header, care sunt considerate "deprecated". Foloseste in schimb
Cod:
#include <iostream>


Titlul: Răspuns: exemplu + oni
Scris de: Ungureanu Daniel din Aprilie 20, 2008, 11:48:23
Hai ca acuma am ajuns sa fiu 100% in ceata.

Pai si in loc de cele cu ".h" ce folosesc?

Da daca schimb asta mai raman valabile urmatoarele functii:


ifstream f("lala.in");             - deschiderea unui fisier din care o sa citesc             - citire f>>x;
ofstream g("lala.out");         - deschiderea unui fisier in care o sa scriu                 - scriere g<<x;


Am mai citit acuma:
"Functia main trebuie sa fie de tip int si sa intoarca 0 - return 0;"

Adica o sa fie ceva de genul:

int main()
{
...
...
...
return 0;
}

Structurile le mai pot crea astfel:

struct nod
       {
       int nr;
       nod *leg;
       } *prim, *ultim, *p, *q, *r;




Titlul: Răspuns: exemplu + oni
Scris de: Andrei Grigorean din Aprilie 20, 2008, 11:52:07
Uita-te la mesaje de eroare ca am postat acolo cum sta treaba cu librariile :).


Titlul: Răspuns: exemplu + oni
Scris de: Ungureanu Daniel din Aprilie 20, 2008, 11:53:44
Poti sa pui un link direct ca nu il gasesc :)


Titlul: Răspuns: exemplu + oni
Scris de: Cosmin Negruseri din Aprilie 20, 2008, 12:01:09
Ai cautare pe forum, ai cautare pe site. Ai si google.com :) foloseste unul dintre ele si o sa gasesti.


Titlul: Răspuns: exemplu + oni
Scris de: Ungureanu Daniel din Aprilie 20, 2008, 12:13:48
..... mamaaaa, mi s-au inmuiat picioarele pentru cateva momente

Am luat o problema si am trimis-o de cateva ori si pana la urma am observat k singura modificare kre trebuia facuta era sa pun
int main() inloce de void main().... si nu trebuia sa schimb <iostream.h> in <iostream>

Am o ultima intrebare.

Pe compilatorul linux merge iostream.h?


Titlul: Răspuns: exemplu + oni
Scris de: Sima Cotizo din Aprilie 20, 2008, 12:16:10
http://infoarena.ro/forum/index.php?topic=364.msg24956#msg24956 - poate daca ii asculti pe Cosmin si pe Wef o sa te lamuresti

Daca ai trimis problema la infoarena si ai vazut ca merge cu iostream.h, si stiind ca infoarena are un compilator de linux, eu cred ca rezulta ca merge :)


Titlul: Răspuns: exemplu + oni
Scris de: Andrei Grigorean din Aprilie 20, 2008, 19:50:26
Compilatorul nostru de linux suporta si iostream.h, DAR aceasta NU este standard. Nu ti-o recomand sa o folosesti. De exemplu visual studio 2005 da eroare de compilare pentru urmatorul program:
Cod:
#include <iostream.h>

int main() {
    return 0;
}


Titlul: Răspuns: exemplu + oni
Scris de: Ungureanu Daniel din Aprilie 21, 2008, 12:19:34
Deci cei care ati mai fost la ONI, lamuriti-ma si pe mine, se poate sau nu folosi <iostream.h> ???


Titlul: Răspuns: exemplu + oni
Scris de: Andrei Grigorean din Aprilie 21, 2008, 12:24:23
In principiu se poate... Dar e mai bine sa pui

Cod:
#include <iostream>
using namespace std;

si sa codezi in rhide (presupun ca lucrezi pe windows).


Titlul: Răspuns: exemplu + oni
Scris de: Ungureanu Daniel din Aprilie 21, 2008, 12:28:36

Citat
se poate...

Atata trebuia sa aud. :D


Titlul: Răspuns: exemplu + oni
Scris de: Ungureanu Daniel din Aprilie 21, 2008, 14:02:15
da.... <ctype.h>   merge?


Titlul: Răspuns: exemplu + oni
Scris de: Lucian Boca din Aprilie 21, 2008, 14:47:02
Asa cum ti-a recomandat si wefgef, pentru a fi sigur ca librariile vor functiona asa cum te astepti, foloseste standardul actual: toate numele vor fi fara .h terminal (ex: iostream.h -> iostream, fstream.h -> fstream), iar librariile specifice C vor avea un c in fata (ex: stdio.h -> cstdio, stdlib.h -> cstdlib, ctype.h -> cctype).

Incearca sa scrii sursele dupa aceste modele din standardul ISO, asta te asigura ca vor functiona oriunde si oricand (BorlandC a iesit de mult timp din clasa "oriunde" sau "oricand")  :-'


Titlul: Răspuns: exemplu + oni
Scris de: Ungureanu Daniel din Aprilie 21, 2008, 15:00:05
Pai da, da asta insemna ca toate functiile pe care le stiam pana acuma trebuie sa le invat sub forma unui alt limbaj  #-o .. si sincer, nu prea mai am timp :((


Titlul: Răspuns: exemplu + oni
Scris de: Sima Cotizo din Aprilie 21, 2008, 15:04:04
Asa se intampla cand inveti sursele/functiile ca pe o poezie... dar daca tot "nu mai ai timp", incearca sa inveti si corespondentele astea si pe timp de concurs scrii sursa cum iti aduci aminte si apoi obligatoriu faci transformarile :)

... sau observi logica din spatele transformarilor si incerci sa acorzi atentie si aspectului astuia cand scrii o sursa.


Titlul: Răspuns: exemplu + oni
Scris de: Lucian Boca din Aprilie 21, 2008, 15:45:18
Mie nu mi se pare deloc alt limbaj. In esenta, modificarile apar asupra primelor directive #include.
Adica trebuie sa modifici doar numele librariilor (dupa regulile pe care le-am precizat in postul trecut), si sa lucrezi in namespace-ul std; astfel nu vei avea niciun fel de problema, limbajul in sine si toate functiile sunt aceleasi, si le poti folosi asa cum le-ai folosit pana acum in Borland. ;)

Cod:
#include <iostream>
#include <fstream>

using namespace std;

Testeaza cateva probleme (adunare, cmmdc etc) pe evaluatorul de aici folosind aceste librarii, si vei intelege exact la ce ma refer.


Titlul: Răspuns: exemplu + oni
Scris de: Ungureanu Daniel din Aprilie 21, 2008, 15:50:43
 :oops:  eu ma speriasem de o prostie....

M-am uitat peste niste surse si aveau total diferit fata de mine modul de creare a structurilor sau de citire din fisiere. Si apoi am vazut urmatoarele sursele si am inteles si faza cu : "toate numele vor fi fara .h terminal (ex: iostream.h -> iostream, fstream.h -> fstream), iar librariile specifice C vor avea un c in fata (ex: stdio.h -> cstdio, stdlib.h -> cstdlib, ctype.h -> cctype)."

http://infoarena.ro/job_detail/159338?action=view-source

http://infoarena.ro/job_detail/182024?action=view-source

 ](*,) asta e daca unii oameni sunt prosti  :sad:


Titlul: Răspuns: exemplu + oni
Scris de: Lucian Boca din Aprilie 21, 2008, 16:04:14
In sursa din al doilea link, era recomandabil, spre exemplu, ca in loc de
Cod:
#include <string.h>
sa fie folosit
Cod:
#include <cstring>
Cred ca acum intelegi la ce ma refer... :D