infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Mircea Pasoi din Februarie 21, 2005, 20:19:01



Titlul: 046 Text
Scris de: Mircea Pasoi din Februarie 21, 2005, 20:19:01
Aici puteţi discuta despre problema Text (http://infoarena.ro/problema/text).


Titlul: Re: 046 Text
Scris de: la la ala din Martie 22, 2005, 12:12:11
[editat de moderator]
Invata sa vorbesti mai frumos.. daca nu poti, nu mai intra pe forum  [-(


Titlul: Re: 046 Text
Scris de: la la ala din Martie 22, 2005, 12:17:04
Are cineva vreo  :idea:  cum se face in pascal?


Titlul: 046 Text
Scris de: Bogdan-Cristian Tataroiu din Martie 22, 2005, 12:17:36
Ok.... n-am inteles care era faza... Care e problema ca faci citirea caracter cu caracter? E mai rapid asha, decat sa citesti odata un sir si dupa aia sa il si parcurgi. Eu fac in C si tot caracter cu caracter am citit....  Si daca vrei, n-ai decat sa ramai la pascal si in liceu, chiar nu conteaza daca esti in C sau pascal... Problemele sunt facute sa mearga pentru ambele limbaje...

[later edit] Asta era raspunsu la ce zicea el inainte sa fie cenzurat :mrgreen:


Titlul: Re: 046 Text
Scris de: la la ala din Martie 22, 2005, 12:22:55
Esti geniul pe care-l cautam!!!!  =D>  Cum ai facut? Eu am luat numai 50 p amarate! Toti cu care am vb mi-au zis ca e nu shtiu ce functie in zi care ia bucati de memorie si le pune in buffer...nu shtiu cum...

P.S. Dintr-a 8-a m-apuc de C (adik de la anu'), ca pascalu' e varza!


P.P.S. Daca nu o sa iesi primu la nationala te ridic in slavi! :!:  [-X


Titlul: 046 Text
Scris de: Marin Radu din Martie 23, 2005, 10:05:31
Pustiu are dreptate(adik Mircea de la CNU). :D Sa citesti un fisier caracater cu caracter e total diferit de a citi acelasi fisier prin blocuri mari(de 64Kb de exemplu). Ca il parcurgi in memorie inca o daca n-are importanta daca iei in considerare timpul mic  de acces la memoria RAM, insa hard-ul e mullltttt!!!! mai lent si o citire caracter cu caracter poate sa-ti ia ca timp de peste  10-20!! mai mult decat o citire "OPTIMA". 8)


Titlul: 046 Text
Scris de: la la ala din Martie 24, 2005, 10:23:30
Mersi, rss-ule :lol: ! Da' te refereai numai la citirea caracter cu caracter? Sau la amandoua?


Titlul: Text
Scris de: Stan Alexandru din Martie 25, 2005, 13:11:01
Am citit caracter cu caracter am zis ca ele trebuie sa fie intre "A" si "z",
se incadreaza in timp si in memorie dar totusi da wrong answer la cateva.
DE CE?


Titlul: 046 Text
Scris de: Kelemen Stelian din Martie 25, 2005, 13:17:45
ai  grija ca intre  Z  si  a  mai sunt cateva  caractere  cum ar fi  ]  \  [ ^
_ `


Titlul: 046 Text
Scris de: u-92 din Aprilie 11, 2005, 09:46:16
pt o sursa de genul:
#include <fstream.h>
#include <string.h>
ifstream fin("text.in");
ofstream fout("text.out");
unsigned long nrc,nrl,medie;
int ok;
char c;
int main()
{ fout<<3;
   return 0;
}
primesc eroarea de compilare:
/usr/lib/gcc-lib/i486-linux/3.3.5/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to `main'
collect2: ld returned 1 exit status
 :-k


Titlul: 046 Text
Scris de: u-92 din Aprilie 27, 2005, 10:47:51
am pus aici sursa: http://www.u-92.as.ro/text.c
am compilat-o sub fedora3 si merge fara nici o problema.. dar daca trimit sursa pe infoarena primesc: "collect2: ld returned 1 exit status"
poate sa arunce cineva o privire si sa-mi explice de ce?
va multumesc.


Titlul: 046 Text
Scris de: Dobre Catalin Andrei din Aprilie 27, 2005, 15:56:14
Eu am facut citirea caracter cu caracter... Iau 90 p pe ea, la un test imi da WA...Eu lucrez in Pascal, in C nu stiu ce sa zic...

P.S mirceanu:
1.  Pls, nu incepe iarasi cu cine ia locul I...  :lol:
2.  De ce zici tu ca pascalul este varza... Ai gasit tu ceva naspa la el !?, la olimpiada se pot rezolva la fel de bine si in pascal si in C... Fiecare au avantaje si dezavantaje...
Sa-mi spui ce ai gasit naspa la pascal, cred ca vb. gura fara tine...


Titlul: 046 Text
Scris de: cristi8 din Aprilie 27, 2005, 16:46:41
Citat din mesajul lui: u-92
am pus aici sursa: http://www.u-92.as.ro/text.c
am compilat-o sub fedora3 si merge fara nici o problema.. dar daca trimit sursa pe infoarena primesc: "collect2: ld returned 1 exit status"
poate sa arunce cineva o privire si sa-mi explice de ce?
va multumesc.


mie nu mi-o compileaza din cauza ca ai declarat variabile "la mijlocul" functiei... unele compilatoare vor sa declari totul la inceput, si dupa aia sa scrii instructiunile

PS: in caz ca o sa se compileze, vezi sa nu faci impartire la 0(zero)


Titlul: 046 Text
Scris de: u-92 din Aprilie 27, 2005, 17:21:19
Citat

mie nu mi-o compileaza din cauza ca ai declarat variabile "la mijlocul" functiei... unele compilatoare vor sa declari totul la inceput, si dupa aia sa scrii instructiunile


eu am evaluat cu gcc3.3.3 si n-am primit nici o eroare.. oricum.. am declarat tot chiar la inceput.. si primesc aceiasi eroare.. am initializat nrc cu 1 sa ma asigur ca nu impart prin 0.. dar tot aceiasi eroare o primesc...

EDIT:
am gasit problema.. nu mi-o compila din cauza ca aveam declarat acolo sirul
p[]=" ?>:.,...";


Titlul: 046 Text
Scris de: Alb Gabriel din Mai 14, 2005, 22:04:21
eu am facut problema de 80 de puncte cu un program despre care eu zic ii bun... primesc WA la testele 5 si 8... va rog ajutatzi-ma.


Titlul: 046 Text
Scris de: cristi8 din Mai 14, 2005, 22:41:01
Citat din mesajul lui: hellheim
eu am facut problema de 80 de puncte cu un program despre care eu zic ii bun... primesc WA la testele 5 si 8... va rog ajutatzi-ma.


..pai cum sa te ajutam ?

...un algoritm simplu de rezolvare e asta:
Cod:

len <- 0
cuv <- 0
k <- 0

cat timp se citeste un caracter din fisier
  daca s-a citit o LITERA
      len <- len+1
      daca k=0
         cuv <- cuv+1
      k <- 1
  altfel
      k <- 0
sfarsit cat timp;
sol <- len/cuv


Titlul: 046 Text
Scris de: Toma Radu din Iunie 18, 2005, 22:48:48
eu am incercat sa citesc tot fisieru si apoi sa elimin caracterele separatoare cu functia strtok, dar primesc numai 80 de puncte. Ce nu e bine?


Titlul: 046 Text
Scris de: Alb Gabriel din Iunie 26, 2005, 13:48:00
Tot cu separatori am facut si eu, si primesc in continuare 80 de puncte. De aceea va rog mult de tot sa-mi dati macar unul din testele 5 sau 8, ca sa-mi dau seama unde am gresit. Eu personal nu gasesc greseala.


Titlul: 046 Text
Scris de: Alb Gabriel din Iunie 26, 2005, 14:27:35
Citat din mesajul lui: Fr3eM4n


..pai cum sa te ajutam ?

...un algoritm simplu de rezolvare e asta:
Cod:

len <- 0
cuv <- 0
k <- 0

cat timp se citeste un caracter din fisier
  daca s-a citit o LITERA
      len <- len+1
      daca k=0
         cuv <- cuv+1
      k <- 1
  altfel
      k <- 0
sfarsit cat timp;
sol <- len/cuv


Poate gresesc eu, dar cu algoritmul acesta nu imi iese nici macar exemplul.


Titlul: 046 Text
Scris de: cristi8 din Iunie 26, 2005, 18:03:38
..eu iau 100.
poate nu procesezi toate caracterele. eu folosesc  
Cod:
while(scanf("%c", &ch)!=EOF)


..alte precizari.. cand vezi daca e litera sa compari "de la 'a' la 'z' sau de la 'A' la 'Z' "

..si vezi sa nu fi trecut doar un = in C/C++ unde am scris in pseudocod "daca k=0" :D
aa.. si vezi sa pui acolade unde trebuie.. sau begin si end daca faci in pascal


Titlul: 046 Text
Scris de: Alb Gabriel din Iunie 26, 2005, 21:00:09
Mersi mult... acum am luat si eu 100.

P.S.

Citat din mesajul lui: Fr3eM4n
..si vezi sa nu fi trecut doar un = in C/C++ unde am scris in pseudocod "daca k=0" :D
aa.. si vezi sa pui acolade unde trebuie.. sau begin si end daca faci in pascal


Chiar nu era necesar :P


Titlul: 046 Text
Scris de: Prigoana Alexandru din Ianuarie 03, 2006, 13:12:38
tot textul este scris in fisier pe o singura linie sau pot aparea mai multe caractere de sfarsit de linie ?


Titlul: 046 Text
Scris de: Filip Cristian Buruiana din Ianuarie 03, 2006, 13:17:48
Eu cred k pot aparea mai multe linii... Programul meu citeste linie cu linie pana la EOF / NULL ( depinde cu ce functie citesti )...


Titlul: 046 Text
Scris de: Iacob Ioan Fanica din Februarie 03, 2006, 22:28:50
Va rog ajutati-ma si pe mine.
Fac citirea caracter cu caracter in c++ si nu imi citeste spatiile(citesc: f>>ch,unde ch este un caracter).De ce?
Fac cu strtok si nu iau numai 60 de puncte. Imi zice si mie cineva ce gresesc?
Trebuie folosita cumva adunarea pe numere mari?
Si impartirea?
 :?:


Titlul: 046 Text
Scris de: Tomescu Alin din Martie 16, 2006, 17:23:07
ca sa citesti caracter cu caracter trebuie sa foloseste functia membru get(), adica in loc de f>>ch, pui f.get(ch), in felul asta iti citeste si spatiile.


Titlul: 046 Text
Scris de: Valentin Stanciu din Martie 16, 2006, 21:24:41
oricum, este recomandat sa nu folositi streamuri pentru citire/scriere, nu sunt foarte rapide..


Titlul: 046 Text
Scris de: Tomescu Alin din Martie 17, 2006, 14:38:36
in cazul acesta ce se recomanda pentru citirea rapida caracter cu caracter sau linie cu linie... stdio.h cumva? cu functia fget()? mie mi se pare mult mai comod de folosit streamuri... pacat ca sunt mai lente...  :(


Titlul: 046 Text
Scris de: Marius Stroe din Martie 17, 2006, 15:26:26
Citat din mesajul lui: tomescu_alin
in cazul acesta ce se recomanda pentru citirea rapida caracter cu caracter sau linie cu linie... stdio.h cumva? cu functia fget()? mie mi se pare mult mai comod de folosit streamuri... pacat ca sunt mai lente...  :(

Ar trebui sa citesti mai mult pe forum inainte sa intrebi! Vezi ce a scris cristi8 (,) 8 posturi mai sus!


Titlul: Raspuns: 046 Text
Scris de: Valentin Bora din Aprilie 05, 2006, 13:16:31
Am facut citirea intr-un pointer char... ex. declarat char *sir si apoi citit cu sir = fgets(sir, 1024, fin); ... apoi facut cu strtok si alea alea, pe Borland C++ 3.1 imi merge perfect, pe gcc imi da Runtime Error - Invalid Memory Reference si nu imi dau seama unde am bushit-o. Help someone...


Titlul: Re: 046 Text
Scris de: Valentin Stanciu din Aprilie 05, 2006, 13:24:05
nu stiu daca am intels exact.. dar ia incearca declararea: char sir[1024];


Titlul: Raspuns: 046 Text
Scris de: Valentin Bora din Aprilie 05, 2006, 15:26:05
nu pot sa fac asta pentru ca eu din cate stiu pe stiva pot aloca doar 1MB si in plus eu personal nu mai stiu cum sa ies din while-urile pe care le am acolo care se opresc din executie in momentul in care strtok si fgets isi pierd obiectul muncii si imi returneaza NULL.


Titlul: Raspuns: 046 Text
Scris de: Adrian Dobrescu din Aprilie 05, 2006, 22:40:42
Invalid m. ref. iti da cand ai vectorii prea mici si citesti intr-o
zona de memorie care nu exista.Asta cu siguranta
Despre NULL nu stiu ce sa spun, dar nu stiu cum ai reusit sa umpli stiva:
Incearca sa faci asta in main:
daca ai un pointer *p :   p=new char[100..0] si vezi daca merge...
In rest algoritmul e simplu.
Da' nu-stiu de ce va complicati sa cititi in tipuri structurate de date ca
vectori,pointeri, etc si folosirea unor fct. ca strtok sau etc.
Pt a cauta sau a accesa un element un element intr-un vector consuma foarte
mult timp, mai ales daca e mare( In enunt nu-ti da lungimea unui rand).
Pur si simplu citesti caracter cu caracter fara nici un vector sau altceva,
cu complexitate liniara.
Succes!!! :D


Titlul: Raspuns: 046 Text
Scris de: Valentin Bora din Aprilie 06, 2006, 10:08:09
;)) okay, io am facut asa pt. ca imi facea cu ochiul strtok si pt. ca n-am mai folosit-o pana acum si pt. ca era mai elegant :D
Dar trecem la char-by-char :D

Later edit: am facut char by char si mi-a iesit 90 puncte. La testul 9 am WA. Aveti vreo sugestie?
si asa de curiozitate am debugged si aia cu strtok si mi-au iesit 70 de puncte.


Titlul: Raspuns: 046 Text
Scris de: Tabara Mihai din Decembrie 29, 2006, 05:47:30
Eu iau 60 pe problema asta si nu prea inteleg ce gresesc. :-s
In plus, cu evaluatorul asta nou, nici nu mai vad ce teste nu iau.

Eu am facut asa:
Cod:
....
string s;

while ( !fin.eof() )
    {
            if ( fin.peek() == ' ' )
            {
"                 fin.get();
                 s += ' ';
            }
            else
            {
                fin >> ch;
                s += ch;
            }
    }
for ( i = 0; i < s.size(); ++i )
    {
          if ( isalpha( s[i] ) || s[i] == ' ' || s[i] == '-' ) rez += s[i];
    }
iar apoi am mai luat inca un string in care am despartit cum trebuie cuvintele.( pt cazurile cu cratima.de exemplu cuvantul "lasa-ma" )
Iar apoi am facut asa:
Cod:
istringstream st;
    st.str( prov );
    string ss;
    while ( st >> ss )
    {
            sol.push_back( ss );
    }
    for ( j = 0 ;j < sol.size(); ++j )
    {
            lungime += sol[j].size();//fout << sol[j] << " ";
            nrc++;
    }
    ok = (int)(lungime/nrc);
    fout << ok << "\n";
Am citit ce s-a postat pana acuma pe forum, insa nu prea am prins alte idei pentru ceea ce am facut eu.Daca are cineva o idee, va rog sa ma ajutati


[Later edit] Am luat 100 cu algorimutl ala naiv.Totusi, as vrea sa stiu ce greseam aici.....daca stie cineva va rog sa imi spuneti  :sad:


Titlul: Raspuns: 046 Text
Scris de: Andrei Grigorean din Decembrie 29, 2006, 18:11:47
poti sa vezi ce teste nu iei dand click pe punctaj dupa ce se termina evaluarea  :ok:


Titlul: Raspuns: 046 Text
Scris de: Tabara Mihai din Decembrie 29, 2006, 19:21:30
poti sa vezi ce teste nu iei dand click pe punctaj dupa ce se termina evaluarea  :ok:

NU e vorba de asta. :ok:
Nu mergea evaluatorul...imi dadea ceva eroare ca nu gaseste link-ul catre monitorul care trebuia sa imi afiseze rezultatul....
Acuma am vazut.Iau WA pe 4 teste :-'


Titlul: Observatie
Scris de: Vladulescu Adrian din Ianuarie 10, 2007, 20:58:55
Fiti atenti la parcurgerea fisierului de intrare. Sa parcurgeti pana la sfarsitul fisierului nu pana la sfarsitul liniei. Eu am parcurs pana la sfarsitul liniei si am luat 40 de pct iar dupa aceea pana la sfarsitul fisierului si am luat 100 asa ca succes!!.


Titlul: Răspuns: 046 Text
Scris de: Luca Eduard din Martie 02, 2007, 23:36:23
Imi spune si mie cineva cum pot citi caracter cu caracter, dar sa-mi citeasca si spatiile? Am incercat ceva de genul:
Cod:
[...]
FILE *in=fopen...; // restul e clar
char *words[10000];
while (fscanf(in,"%s",&words)!=EOF){
[...]
}

Dar asa nu-mi citeste spatiile. Am incercat si cu fgets, dar asa nu mai e caracter cu caracter... Ma poate ajuta cineva?
Multumesc!


Titlul: Răspuns: 046 Text
Scris de: Andrei Grigorean din Martie 02, 2007, 23:55:33
Poti sa citesti cu scanf("%c", &character) cat timp nu ai ajuns la sfarsitul fisierului.


Titlul: Răspuns: 046 Text
Scris de: Valentin Stanciu din Martie 02, 2007, 23:56:10
fgetc citeste un caracter din stream.. indiferent daca e spatiu sau '\n' (new_line)
fgets citeste o linie din stream (citeste n-1 caractere sau pana da de '\n'; ce conditie se indeplineste prima)

Deci daca vrei caracter cu caracter, incearca fgetc sau fscanf(in, "%c", &caracter); cu %s citesti cuvinte


Titlul: Nelamurire
Scris de: Emanuel Cinca din Martie 18, 2007, 22:44:11
Imi puteti spune dupa si inainte de care caractere sunt puse spatiu pentru ca nu pot da cu presupusul ca asa iau doar 30 puncte  :sad:, iar algoritmul meu se bazeaza pe lucrul asta. Multumesc de ajutor!


Titlul: Răspuns: Nelamurire
Scris de: Tabara Mihai din Martie 18, 2007, 23:00:27
Imi puteti spune dupa si inainte de care caractere sunt puse spatiu pentru ca nu pot da cu presupusul ca asa iau doar 30 puncte  :sad:, iar algoritmul meu se bazeaza pe lucrul asta. Multumesc de ajutor!

Poi daca ai facut cu separatori, pune toate caracterele care crezi ca ar putea aparea.
"`~1234567890!{@#$%^&**()-}|":+?=><,./;'[]\"

Oricum, in caz ca nu iti iese, merita sa faci cu algoritmul acela naiv din solutie ca nu scrii mai mult de 10 linii de cod in total.
 :thumbup:


Titlul: Răspuns: 046 Text
Scris de: Emanuel Cinca din Martie 19, 2007, 19:10:17
Mersi Mihai. Sper sa reusesc cu varianta asta. Daca nu, m-am mai gandit la una, dar nu vreau sa renunt la prima inca.


Titlul: Răspuns: 046 Text
Scris de: Florian Marcu din Martie 26, 2007, 20:13:21
Problema in sine este foarte usoara. Este nevoie sa citesti cu fscanf(f,"%c",&character) si sa verifici daca este o litera (atentie: poate fi si mica si mare)....in rest de tinut contoarele e  simplu.....e algoritm de cateva linii..am luat 100 :-'


Titlul: Răspuns: 046 Text
Scris de: razyelx din Aprilie 01, 2007, 23:05:53
iau doar 90 de pct pe pb ... am WA la testul 9 care mapoate ajuta pls.. ](*,) nu mai stiu ce sa fac


Titlul: Răspuns: 046 Text
Scris de: Pandia Gheorghe din Aprilie 01, 2007, 23:26:09
Incearca sa dai un test programului tau de forma:
" ==  lasa-   a" fara ghilimele si fara nici un caracter (deci si fara ENTER) dupa ultimul "a". Cel mai probabil crapa sau da un rezultat gresit. De ex. daca citesti caractere din randul literelor fara sa si verifici sa nu fi ajuns la sf fisierului crapa.
Sper ca am fost de folos. Multa bafta!  :thumbup:


Titlul: Răspuns: 046 Text
Scris de: razyelx din Aprilie 02, 2007, 16:30:07
ms mult ai avut dreptate la aia nu m-amgandit. Sincer nu vrea sa fiu nepoliticos cu adminii dar mi se poate explica si mie cum de o propozitie nu se termina cu un semn de punctuatie si cu o litera... verificati testul 9 e cam ilogic. Inca o data sper sa nu fiu prea naspa...


Titlul: Răspuns: 046 Text
Scris de: Adrian Diaconu din Aprilie 02, 2007, 17:05:34
Nu zicea nicaieri in enuntul problemei ca ar fi vorba de propozitii. Textul respectiv poate fi de exemplu mijlocul unei propozitii.


Titlul: Răspuns: 046 Text
Scris de: razyelx din Aprilie 02, 2007, 17:31:16
corect ce ziceai tu ca nu o zis ca is propoziti... dar a zis ca e text... ma rog fie...


Titlul: Răspuns: 046 Text
Scris de: Savin Tiberiu din Aprilie 02, 2007, 17:34:57
nu vad cu ce este afecteactat algoritmul tau dak textul este format sau nu din propozitii. Probabil sunt teste random, deci cuvintele sunt ceva de genu "aofu sodfh uisabbvdlfvb lav basdf" so :-'


Titlul: Răspuns: 046 Text
Scris de: razyelx din Aprilie 02, 2007, 21:28:55
citeste mai atent postul lui Bluedrop_demon si o sa iti dai seama unde bat


Titlul: Răspuns: 046 Text
Scris de: Bula Ionut din Decembrie 15, 2007, 14:10:20
poate nu voi primi nici un raspuns si poate ca nu e bine daca pun sursa pe forum...
totusi de curiozitate ce gresesc cand scriu asta

Cod:
#include<fstream>
#include<ctype.h>
#include<stdio.h>
using namespace std;
ifstream f("text.in");
ofstream o("text.out");

char s[1000][1000];
int i=1,n,m=0,j,n1;

int main()
{
f>>s[i];
 while(!f.eof())
 {n=i; i++;  f>>s[i]; }

 for(i=1;i<=n;i++)
 {for(j=0;j<=' ';j++)
 if(isalpha(s[i][j])) m++; //verific sa fie intre A..Z sau a..z
  }

o<<m/n;

 return 0;
}


Titlul: Răspuns: 046 Text
Scris de: HighScore din Decembrie 15, 2007, 14:34:23
alphanumeric contine si numeric nu doar alpha :P (adica are si 0...9)


Titlul: Răspuns: 046 Text
Scris de: Bula Ionut din Decembrie 15, 2007, 14:36:11
isalnum() este pentru litere su cifre
isalpha() este pentru litere numai


Titlul: Răspuns: 046 Text
Scris de: HighScore din Decembrie 15, 2007, 14:42:35
Citat
j<=' '
ce vrea sa insemne asta... j este de tip int
Oricum mi se pare ca te complici prea mult p-acolo tu treb sa aflii cate cuvinte sunt ("da-te" in cazul problemei sunt 2, la tine este considerat 1(f>>s iti citeste pana la spatiu))


Titlul: Răspuns: 046 Text
Scris de: Bula Ionut din Decembrie 15, 2007, 15:06:02
ups!
da asa e cu j<=' '
oricum mergea pana la 255 dar am corectat asta inainte.
in fine, am inteles gresit problema si am un caracter "-" ca un cuvant de asta la exemplul din enunt am numarat tot 11 cuvinte. de fapt "-" nu inseamna nimic ci separa un duvant in doua. "da-te" sunt 2 cuvinte ai sups.
a fost o interpretare gresita.


Titlul: Răspuns: 046 Text
Scris de: Farcasanu Alexandru Ciprian din Ianuarie 11, 2008, 22:56:38
Am si eu o problema ......cand incerc sa rulez imi da eroare si zice ceva de genu    cannot conver char to char * ....uitati fragmentul de sursa

Cod:
while(!feof(f));
{
ok=0;
fscanf(f,"%c",&x);
if ((x==" " || x=="-")&& car>1) cuv++;
else for (i="a";i<="z";i++)
if (i==x) {ok=1; break;}
if (ok==0) for (i="A";i<="Z";++i)
if(i==x) {ok=1; break;}
if (ok==1) car++;
}
fprintf(g,"%d",car/cuv);


Titlul: Răspuns: 046 Text
Scris de: Stefan Istrate din Ianuarie 11, 2008, 23:10:38
Ai grija sa pui ghilimele simple cand e vorba de caractere si ghilimele duble cand e vorba de siruri. In codul tau, inlocuieste "A" cu 'A' (si in mod similar pentru celelalte) si o sa mearga.


Titlul: Răspuns: 046 Text
Scris de: Farcasanu Alexandru Ciprian din Ianuarie 11, 2008, 23:18:35
Merci mult a mers............dar acum cand ii dau rulare imi intra in ciclu infinit si nu se mai opreste...ai vreo idee de ce?


Titlul: Răspuns: 046 Text
Scris de: Stefan Istrate din Ianuarie 11, 2008, 23:28:10
Vezi ca dupa while(!feof(f)) ai punct si virgula, deci nici nu se intra in blocul scris intre acolade. :) Scapa de el (de punct si virgula).


Titlul: Răspuns: 046 Text
Scris de: Lazar Vlad din Ianuarie 28, 2008, 17:29:20
Ce ii gresit la programu asta?( iau 60 puncte); Daca citesc caracter cu caracter iau 100
Cod:
#include <stdio.h>   
 #include <string.h>   
 FILE *in,*o;   
 char s[10000],sep[]="_ 1234567890,.?/!;\'-@#$%^&*(){}[]|:<>+~`",*a;   
 int n,nr,nrc,l,i,se,j;   
 float r;   
 main()   
 {   
 in=fopen("text.in","r");   
 o=fopen("text.out","w");   
 while (!feof(in))   
 {   
 fgets(s,10000,in);   
 n=strlen(s);   
 for (i=0;i<n;i++)   
  {   
  if (s[i]<='z' && s[i]>='a' || s[i]<='Z' && s[i]>='A')   
   nr++;   
  }   
 a=strtok(s,sep);   
 if (a!=NULL)   
  nrc++;   
 while (a!=NULL)   
  {nrc++;   
  a=strtok(NULL,sep);   
  }   
 nrc--;   
 }   
 r=nr/nrc;   
 fprintf(o,"%d",int(r));   
 fclose(in);   
 fclose(o);   
 return 0;   
 }   


Titlul: Răspuns: 046 Text
Scris de: Florian Marcu din Ianuarie 28, 2008, 19:03:29
Ce ii gresit la programu asta?( iau 60 puncte); Daca citesc caracter cu caracter iau 100
Cod:
#include <stdio.h>   
 #include <string.h>   
 FILE *in,*o;   
 char s[10000],sep[]="_ 1234567890,.?/!;\'-@#$%^&*(){}[]|:<>+~`",*a;   
 int n,nr,nrc,l,i,se,j;   
 float r;   
 main()   
 {   
 in=fopen("text.in","r");   
 o=fopen("text.out","w");   
 while (!feof(in))   
 {   
 fgets(s,10000,in);   
 n=strlen(s);   
 for (i=0;i<n;i++)   
  {   
  if (s[i]<='z' && s[i]>='a' || s[i]<='Z' && s[i]>='A')   
   nr++;   
  }   
 a=strtok(s,sep);   
 if (a!=NULL)   
  nrc++;   
 while (a!=NULL)   
  {nrc++;   
  a=strtok(NULL,sep);   
  }   
 nrc--;   
 }   
 r=nr/nrc;   
 fprintf(o,"%d",int(r));   
 fclose(in);   
 fclose(o);   
 return 0;   
 }   


Pai nu spune nicaieri ca textul se afla pe o singura linie. Probabil de astea iei doar 60.  :)


Titlul: Răspuns: 046 Text
Scris de: Lazar Vlad din Ianuarie 28, 2008, 19:39:56
am luat pt. mai multe linii, am citit pe rand fiecare linie


Titlul: Răspuns: 046 Text
Scris de: Florian Marcu din Ianuarie 28, 2008, 20:18:47
Aa.. scuze. Nu am vazut ca ce ai tu e intr`un while. Vezi ca s-ar putea sa fie de la faptul ca pe o linie sunt mai multe de 10.000 de caractere. Altceva nu prea vad...  :ok:


Titlul: Răspuns: 046 Text
Scris de: Sorin Rita din Februarie 05, 2008, 19:04:55
am o intrebare
ati tinut cont de cratima?
eu am luat doar 40 puncte ](*,)

am facut programul bazandu-ma ca un cuvant este o succesiune de litere,iar cand intalneste cratima
sa imi considere doua cuvinte.
Acum imi ia in calcul si linia de dialog si imi iese cu un cuvant mai mult :fighting:

ce sa fac?


LE: hmm 70 pct  :-k
stiti cum pot calcula partea intreaga a unui nr?


Titlul: Răspuns: 046 Text
Scris de: Gabriel Bitis din Februarie 05, 2008, 19:16:44
In exemplul din enuntul problemei sunt 11 cuvinte, inseamna ca "Lasa-ma" este luat ca doua cuvinte.


Titlul: Răspuns: 046 Text
Scris de: Florian Marcu din Februarie 05, 2008, 19:22:56
LE: hmm 70 pct  :-k
stiti cum pot calcula partea intreaga a unui nr?

Pai ca sa calculezi partea intreaga a catului impartirii lui a la b faci doar  x = a/b.  :-k Iar daca, cumva x e de tip real, faci y=(int)x, unde y e de tip int.


Titlul: Răspuns: 046 Text
Scris de: Sorin Rita din Februarie 05, 2008, 19:30:05
 :'(
asa am facut si eu, dar am observat ca daca nu am nimic scris programul crapa, si probabil de acolo am WA.  :-'

ma intreb daca pot sa vad de la inceput daca-i gol fisierul din care citesc este gol si sa afisez 0 :-k
 


Titlul: Răspuns: 046 Text
Scris de: Florian Marcu din Februarie 05, 2008, 19:32:50
:'(
asa am facut si eu, dar am observat ca daca nu am nimic scris programul crapa, si probabil de acolo am WA.  :-'

ma intreb daca pot sa vad de la inceput daca-i gol fisierul din care citesc este gol si sa afisez 0 :-k
 

Pai..probabil ca imparti la 0, pt ca numarul de cuvine e 0, in caz ca fisierul e gol. Pune si tu o conditie sa ai nr de cuvine >=1. Daca nr de cuvinte = 0 atunci afisezi 0. Ma indoiesc insa ca e din cauza asta...


Titlul: Răspuns: 046 Text
Scris de: Sorin Rita din Februarie 05, 2008, 19:42:47
:'(
asa am facut si eu, dar am observat ca daca nu am nimic scris programul crapa, si probabil de acolo am WA.  :-'

ma intreb daca pot sa vad de la inceput daca-i gol fisierul din care citesc este gol si sa afisez 0 :-k
 

Pai..probabil ca imparti la 0, pt ca numarul de cuvine e 0, in caz ca fisierul e gol. Pune si tu o conditie sa ai nr de cuvine >=1. Daca nr de cuvinte = 0 atunci afisezi 0. Ma indoiesc insa ca e din cauza asta...

da imparteam ca "desteptu" la 0
dar tot am WA pe testele 2,5,8
nu stiu unde gresesc


Titlul: Răspuns: 046 Text
Scris de: hulparu adrian din Februarie 26, 2008, 11:31:03
Secventele numerice sunt considerate cuvinte??? Pentru ca iau WA pe testul 9 si nu stiu unde gresesc...


Titlul: Răspuns: 046 Text
Scris de: Adrian Diaconu din Februarie 26, 2008, 12:00:53
Nu. Nu sunt considerate cuvinte.
Citat
un cuvant fiind definit ca o secventa continua maximala de caractere ale alfabetului englez ('a' .. 'z' , 'A' .. 'Z').


Titlul: Răspuns: 046 Text
Scris de: Stefan Gheorghe din Martie 08, 2008, 16:58:18
Vreau sa stiu si eu ceva..... la problema text ce am gresit de iau numai 70 pct????
Cod:
var ct,S,d:longint;
    i,c1:char;
    f,g:text;
    m:set of char;
begin
assign(f,'text.in'); reset(f);
m:=[];
for i:='a' to 'z' do
m:=m+[i];
d:=0;
ct:=0; s:=0;
for i:='A' to 'Z' do
m:=m+[i];
while (not eof(f)) do
begin
read(f,c1);
if eoln(f) then readln(f);
if [c1]*m<>[] then begin
d:=d+1;
inc(S);
end;
if (([c1]*m=[]) and (d<>0)) then begin inc(ct);
                                       d:=0;
                                 end;
end;
close(f);
assign(g,'text.out'); rewrite(g);
if ct=0 then writeln(g,'0')
else
writeln(g,S div ct);
close(g);
end.


Titlul: Răspuns: 046 Text
Scris de: Stefan Gheorghe din Martie 12, 2008, 22:28:17
Cine imi spune si mie unde gresesc deoarece imi ia WA pe testul 6 si 9
Am incercat toate posibilitatile, dar nimik :sad:


Titlul: Răspuns: 046 Text
Scris de: Bogdan-Alexandru Stoica din Martie 23, 2008, 17:15:45
problema e la
Cod:
do{ok=0;
   while(c>='a'&&c<='z' || c>='A'&&c<='Z'){nrl++;fin.get(c);ok=1;}
   fin.get(c);
   if(ok==1){i++;okk=1;}

   }while((int)c!=-1);

programul tau cicleaza pentru ca nu verifici (bine) cand ajungi la sfarsitul fisierului.

ca sa citesti dintr-un fisier pana la ultimul caracter foloseste acest cod.
Cod:
while (fin.get(c))
{
        if (c>='a'&&c<='z' ||c>='A'&&c<='Z') {nrl++; ok = 1;}
        else
            if (ok==1) {i++; okk=1;}
}



Titlul: Răspuns: 046 Text
Scris de: Danci Emanuel Sebastian din Aprilie 03, 2008, 12:17:43
cifrele intra la separatori sau se iau ca si cuvinte?tot 40 de pct ...si nu inteleg unde e problema  ](*,)

imi puteti da si mie testele 2,5 si 6?vreau sa vad ce nu merge si de ce nu merge... :'(


Titlul: Răspuns: 046 Text
Scris de: Toma Radu din Aprilie 03, 2008, 14:53:41
zalman : Ce metoda folosesti? Stiu ca luam 40 de puncte daca foloseam separatori si apoi am luat 100 dupa ce citeam fisierul caracter cu caracter si retineam doar numarul de cuvinte si lungimea totala a lor.


Titlul: Răspuns: 046 Text
Scris de: Cosmin-Mihai Tutunaru din Aprilie 04, 2008, 15:37:21
Eu cred ca asta e cel mai simplu algoritm, insa nu inteleg de ce imi pica testul 7. Imi da wrong Answer!....Vedeti voi ceva gresit?, ca eu nu vad...
Cod:
#include <fstream>
using namespace std;
fstream in,out;
long i;
char v[1050000];
long c=0,l=0,t=0;

int main()
{
in.open("text.in",ios::in);
out.open("text.out",ios::out);
in.getline(v,1050000,'EOF');
in.close();
i=0;
while(v[i]!=0)
  {
  t=0;
  while(((v[i]>=65 && v[i]<=90) || (v[i]>=97 && v[i]<=122)) && v[i]!=0)
    {
    t++;
    i++;
    }
  if(t>0)
    {
    l=l+t;
    c++;
    }
  else i++;
  }
if(c>0)
  out<<(l/c);
else
  out<<"0";
out.close();
return 0;
}


Titlul: Răspuns: 046 Text
Scris de: Cosmin-Mihai Tutunaru din Aprilie 04, 2008, 16:29:48
Sunt mult mai multe cazuri;)
Dar in enunt scrie negru pe alb: cuvantul are doar [a-z][A-Z]....deci iese din discuti eceasta problema;)


Titlul: Răspuns: 046 Text
Scris de: Herpesius din Aprilie 04, 2008, 16:36:25
:) , nu a fost cine ştie ce problema (ca grad de dificultate)... am folosit un cache , o funcţie şi câteva linii în main :P

in cache reţineam ultimul caracter introdus, cu ajutorul lui verificam dacă fac sau nu trecerea la un alt cuvânt nou....


Foarte frumoasă problema :D

P.S.: nu mai folosiţi toate funcţiile pe care le întâlniţi , că unele din ele nu sunt eficiente (la concursuri) ...
Încercaţi să vă feriţi când le întâlniţi.


Titlul: Răspuns: 046 Text
Scris de: Bogdan-Alexandru Stoica din Aprilie 04, 2008, 16:38:49
@marius: citeste cu atentie enuntul. "intr-o" sunt 2 cuvinte.
Citat
"...un cuvant fiind definit ca o secventa continua maximala de caractere ale alfabetului englez ('a' .. 'z' , 'A' .. 'Z')
@cosmin:
Cod:
in.getline(v,1050000,'EOF');
'EOF' nu este end of file. foloseste functie pentru citire (in.get) citire sau foloseste (in loc de 'EOF') un caracter care nu apare niciodata (spre exemplu '\0')


Titlul: Răspuns: 046 Text
Scris de: Herpesius din Aprilie 04, 2008, 16:46:47
Mai am o întrebare...

Cum poţi să înveţi azi-noapte , toată ziua ?  :rotfl: e prea tare fraza

Citat
- Lasa-ma in pace, ca am invatat azi noapte toata ziua!


Titlul: Răspuns: 046 Text
Scris de: Cosmin-Mihai Tutunaru din Aprilie 04, 2008, 16:53:30
@marius: citeste cu atentie enuntul. "intr-o" sunt 2 cuvinte.
Citat
"...un cuvant fiind definit ca o secventa continua maximala de caractere ale alfabetului englez ('a' .. 'z' , 'A' .. 'Z')
@cosmin:
Cod:
in.getline(v,1050000,'EOF');
'EOF' nu este end of file. foloseste functie pentru citire (in.get) citire sau foloseste (in loc de 'EOF') un caracter care nu apare niciodata (spre exemplu '\0')
Multumesc:)
Nu stiam ca '\0' este pana la sfarsitul fisierului:)
Multumesc inca o data...am mai invatat ceva;))


Titlul: Răspuns: 046 Text
Scris de: Bogdan-Alexandru Stoica din Aprilie 04, 2008, 17:52:07
Nu stiam ca '\0' este pana la sfarsitul fisierului:)
Multumesc inca o data...am mai invatat ceva;))

cred ca m-am exprimat eu prost. EOF este end of file, dar tu ai scris 'EOF'. intre ' ' se pune un sigur caracter in c/c++. iei 100 si daca scrii
Cod:
in.getline(v,1050000,EOF);

'\0' marcheaza sfarsitul unui sir de caractere. daca scrii codul urmator
Cod:
char s[10];
s[0] = '1';
s[1] = '2';
si te uiti la pozitia s[2], o sa vezi ca s[2] = '\0'.
am zis sa folosesti '\0' pt ca este un caracter care nu apare niciodata in fisier.


imi cer scuze ca te-am bulversat  :oops:


Titlul: Răspuns: 046 Text
Scris de: Adrian Diaconu din Aprilie 04, 2008, 19:48:17
'\0' marcheaza sfarsitul unui sir de caractere. daca scrii codul urmator
Cod:
char s[10];
s[0] = '1';
s[1] = '2';
si te uiti la pozitia s[2], o sa vezi ca s[2] = '\0'.

Nu cred ca este neaparat '\0', continutul vectorilor este initalizat aleator daca sunt variabile locale.


Titlul: Răspuns: 046 Text
Scris de: Andrei Grigorean din Aprilie 04, 2008, 20:01:43
lol cat de usoara era pr asta si eu mam chinuit ptr 100 dar acu miai dat seama ca era foarte usoara ... am intrebato si pe profa de roamana care cuvinte despartite in silabe sunt considerate doua =)) lol  :rotfl: si nici nu trebuia mia facut profa mea o lista cu toate cuvintele despartite cu - care sunt considerate ca doua =)) si acu vad ca era foarte usoara prima oara asa am facuto dar citeam cu stream-uri si de aia luam doar 40 acu vad ce usoara era si eu mam chinuit ca un prost =))

Ce ar fi sa scrii corect? Forumul infoarena nu este yahoo messenger  [-X


Titlul: Răspuns: 046 Text
Scris de: Bogdan-Alexandru Stoica din Aprilie 04, 2008, 20:46:49
[...] Eu de obicei nu prea citesc enunturile dar stiu ca am incercat si asa si nu luam 100

nu este o atitudine corecta. daca vrei sa ajungi la ONI anul viitor, ar trebui sa citesti pana la ultima virgula.
si un sfat offtopic... n-ar strica sa nu te mai grabesti si sa scrii mai ingrijit.  :thumbup:


Titlul: Răspuns: 046 Text
Scris de: Anonim din Aprilie 05, 2008, 12:01:50
Am inteles !! Mersi pentru sfaturi .


Titlul: Răspuns: 046 Text
Scris de: Vlad Schnakovszki din Decembrie 28, 2008, 17:12:49
Imi poate spune cineva cum pot optimiza programu asta ? Ca pe 3 teste iau TLE ](*,)
Cod:
#include <stdio.h>  
#include <ctype.h> 
int s=0, c;
bool sw; 
char x; 
int main() 

freopen("text.in","r",stdin); 
freopen("text.out","w",stdout); 
while(scanf("%c", &x)!=EOF) 
{
   sw=1;
   while (!isalpha(x)&&!EOF)
    scanf("%c", &x);
   while (isalpha(x)&&!EOF)
    {
      sw=0;
    s++;
      scanf("%c", &x);
      }
   if (sw==0)
    c++;
   }
printf("%d", s/c); 
return 0; 
}



Titlul: Răspuns: 046 Text
Scris de: Popescu Marius din Decembrie 28, 2008, 17:46:24
Daca schimbi citirea iei sigur 100 de puncte .

Uite cum am citit eu :
Cod:
x=fgetc(stdin);
while(!feof(stdin)
 // deci ce citesti tu cu scanf("%c",&x) schimbi si citesti cu x=fgetc(stdin)
// si in loc de !EOF pui ! feof(stdin)
 

Eu am facut problema mai de mult dar am trimis sursa ta din nou cu citirea asta sa fiu sigur ca nu iti spun prostii.


Titlul: Răspuns: 046 Text
Scris de: Emanuel Cinca din Decembrie 28, 2008, 19:06:28
eu am citit cu streamuri si tot a intrat :-k

scapa de while-uri... pastreaza-l doar pe cel pana la sfarsitul fisierului, si in blocul respectiv foloseste doar if-uri... nu are rost sa postez partea aceea de cod ca ar fii toata rezolvarea la problema... :peacefingers:


LE: @marius: cum ai trimis tu sursa lui cand a ta are 0.90 kb si a lui 0.40? :rotfl:


Titlul: Răspuns: 046 Text
Scris de: Popescu Marius din Decembrie 28, 2008, 20:55:40
Sursa mea are 0.90 kb pentru ca in sursa sunt doua variante:
  1.  E varianta asta a lui numai ca i-am schimbat citirea
  2.  Este problema cu care am luat eu 100 de p si am rezolvat-o mai de mult numai ca am pus-o in comentariu .

Am trimis-o si fara comentariu sa vezi ca are 0.40 si ca nu mint .
 :weightlift:


Titlul: Răspuns: 046 Text
Scris de: Vlad Schnakovszki din Decembrie 29, 2008, 11:35:53
Ambele variante dau 100 de puncte :) Ms mult  :winner1:


Titlul: Răspuns: 046 Text
Scris de: DarkMan din Martie 17, 2009, 11:04:36
Daca citesti problema atent iei 100... trebuie sa afisezi nr intreg ci nu cu zecimale


Titlul: Răspuns: 046 Text
Scris de: Alexandru-Iancu Caragicu din Martie 29, 2009, 14:50:40
Daca in problema scrie ca pe prima linie se citeste textul, de ce se intinde textul si pe liniile urmatoare. N-ar trebui modificat enuntul in "incepand cu prima linie"?  :angry:
Am luat 40 puncte cand citeam doar prima linie si 100 cand am citit toate liniile.  :eyebrow:


Titlul: Răspuns: 046 Text
Scris de: Chibici Tiberiu din Martie 31, 2009, 11:18:22
pt o sursa de genul:
#include <fstream.h>
#include <string.h>
ifstream fin("text.in");
ofstream fout("text.out");
unsigned long nrc,nrl,medie;
int ok;
char c;
int main()
{ fout<<3;
   return 0;
}
primesc eroarea de compilare:
/usr/lib/gcc-lib/i486-linux/3.3.5/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to `main'
collect2: ld returned 1 exit status
 :-k

Trebuie sa pui #include<fstream> in loc de #include<fstream.h> si dupa #include pui 'using namespace std;'.
GCC nu e la fel ca Borland C.


Titlul: Răspuns: 046 Text
Scris de: Gabriel Bitis din Martie 31, 2009, 18:24:08
pt o sursa de genul:
#include <fstream.h>
#include <string.h>
ifstream fin("text.in");
ofstream fout("text.out");
unsigned long nrc,nrl,medie;
int ok;
char c;
int main()
{ fout<<3;
   return 0;
}
primesc eroarea de compilare:
/usr/lib/gcc-lib/i486-linux/3.3.5/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to `main'
collect2: ld returned 1 exit status
 :-k

Trebuie sa pui #include<fstream> in loc de #include<fstream.h> si dupa #include pui 'using namespace std;'.
GCC nu e la fel ca Borland C.

Trimite'i si un mail ca i'ai raspuns, sa citeasca si u-92. Probabil si'a pierdut toate sperantele ca il va lamuri cineva.  :thumbup:


Titlul: Răspuns: 046 Text
Scris de: George Popoiu din Mai 01, 2009, 15:44:45
Nu inteleg, se considera si numerele cuvinte?

ex: Mi-am luat 1 kg de cirese.

Voi cum ati facut?

Daca iau numa caracterele a,...,z si A,....,Z primesc doar 40 pct. Iau WA la 5 teste si Killed by signal 8(SIGFPE) la 1.

Ma puteti ajuta?


Titlul: Răspuns: 046 Text
Scris de: Antoche Ioana Alexandra din Mai 14, 2009, 13:01:20
Eu am citit initial s[i-1] si s, i={1,...scanf()!=EOF} si am verificat daca s[i-1]==litera=> ++litera; iar daca s!= litara =>++cuvant;
Am luat separat s[n]==0 s[n-1] ultimul caracter din sir:daca s[n-1]==litera atunci ++litera; si daca e litera verificam caracterul s[n-2] si dak nu era litera ++cuvant;
daca s=("...aaa...a") fara " ", nu imi da corect...
Unde gresesc? :(


Titlul: Răspuns: 046 Text
Scris de: Andrici Cezar din Mai 14, 2009, 14:09:16
Trebuie sa faci test la final deoarece el nu citeste si enterul;) si trebuie sa ai grija ca daca e "alex alex" tie o sa iti zica ca e un singur cuvant si trebuie sa pui "if (s[n]==litera) ++cuvant;" asta o pui fix dupa ce ai iesit din while;) sau e alta problema?


Titlul: Răspuns: 046 Text
Scris de: A Cosmina - vechi din Iulie 23, 2009, 18:29:57
Cod:
len <- 0
cuv <- 0
k <- 0

cat timp se citeste un caracter din fisier
  daca s-a citit o LITERA
      len <- len+1
      daca k=0
         cuv <- cuv+1
      k <- 1
  altfel
      k <- 0
sfarsit cat timp;
sol <- len/cuv

It works perfect, thanks a lot guy !  :ok:


Titlul: Răspuns: 046 Text
Scris de: Petrican Teodor din August 14, 2009, 13:42:22
70 de puncte... Nu-mi dau seama deloc unde gresesc. Fac citirea caracter cu caracter si daca intalneste cumva un caracter care nu e litera imi creste numarul de cuvinte. Intra si cazul cand e un cuvant la EOF (adica nu mai sunt caractere dupa ultimul cuvant). Am verificat si cazul cu spatii inainte de primul cuvant, fara caractere dupa ultimul cuvant, imi dau ok. De asemenea, citesc de pe mai multe linii. Cand verific, verific de la 'a' la 'z' si de la 'A' la 'Z', deci nu iau caracterele dintre 'z' si 'A'. Dar... Cand il pun sus... 70 de puncte  ](*,)

O singura chestie... daca am spre exemplu b54a mie imi ia b ca un cuvant si a ca un cuvant. Ar putea fi problema de aici? Desi ma indoiesc dinn moment ce in enunt e specificat limpede ca un cuvant e o insiruire de caractere ale alfabetului englez.

Totusi... care ar putea fi problema? Ma poate lamuri si pe mine cineva? :)

L.E.: Nevermind, am luat 100  =D&gt;


Titlul: Răspuns: 046 Text
Scris de: Paul-Dan Baltescu din August 14, 2009, 22:01:23
Fiecare problema se discuta pe propriul ei topic.


Titlul: Răspuns: 046 Text
Scris de: Dogaru Beniamin din Noiembrie 24, 2009, 20:49:26
Mie imi da numai 40 de pct si nu stiu unde ar fi problema, probabil e o prb la numararea cuvintelor.Care sunt cazurile in care se trece la un cuvant nou in afara de spatiu si "-"? poate ma ajuta si pe mn cineva


Titlul: Răspuns: 046 Text
Scris de: Cristian Zloteanu din Noiembrie 27, 2009, 17:27:54
imi da 90 de puncte. la testul noua e WA. aveti vreo sugestie?


Titlul: Răspuns: 046 Text
Scris de: Teodor Plop din Decembrie 12, 2009, 21:11:05
am folosit algoritmul
Cod:
len <- 0
cuv <- 0
k <- 0

cat timp se citeste un caracter din fisier
  daca s-a citit o LITERA
      len <- len+1
      daca k=0
         cuv <- cuv+1
      k <- 1
  altfel
      k <- 0
sfarsit cat timp;
sol <- len/cuv

doar ca am citit mai intai cu gets apoi am parcurs sirul.
iau 40 puncte,5 wrong si 1 tle:(.
ma puteti ajuta cu ceva?:D

PS:cu fgets iau 5 wrong si 1 killed by signal:))

[editat de moderator] nu mai posta consecutiv, mai bine foloseste butonul "modifica"; de asemenea, incearca sa folosesti tag-ul "code" si cand postezi pseudocod, e mai lizibil...


Titlul: Răspuns: 046 Text
Scris de: Simoiu Robert din Ianuarie 22, 2010, 16:06:27
Pai nu e bun algoritmul: tu trebuie cu acel k sa vezi daca ai un cuvant: daca ai acel cuvant ii dai lui b sa zicem valoarea 1 si lui k=0. Apoi pe a il incrementezi daca k=1, adica inca nu a ajuns la un cuvant, ci doar litere. Iar aici
Cod:
daca k=0
         cuv <- cuv+1
      k <- 1
  altfel
      k <- 0
trebuie k<-1 in daca, cu sfarsit si inceput, nu in afara lui.


Titlul: Răspuns: 046 Text
Scris de: Vlad Tarniceru din Februarie 05, 2010, 20:12:38
40 de puncte :)
Cod:
#include<fstream.h>
#include<string.h>
 ifstream f("text.in");
 ofstream g("text.out");
 int litera(char a){
     if((a>='a' && a<='z') || (a>='A' && a<='Z')) return 1;
     return 0;
 }
 int bun(char a,char b){
if(litera(a) && b=='-') return 1;
return 0;
 }
  int main(){
      char a[10001];
      int cuv=0,nr=0,l,i,len,k;
      f.getline(a,2000);
      l=strlen(a);
      i=0;
      while(i<l){
          if(litera(a[i])) nr++;
          i++;
      }
      i=0;
    while(litera(a[i])==0) i++;//cat timp exista spatii la inceput le elimini
      while(i<l){
while(litera(a[i])) i++;
if(litera(a[i-1]) || litera(a[i+1])) cuv++; 
while(!litera(a[i])) i++;
}
g<<nr/cuv;
g.close();
return 0;
 }


Titlul: Răspuns: 046 Text
Scris de: laurentiu pavel din Martie 25, 2010, 22:09:02
ce e asa de deosebit la testul 9 de iau TLE?


Titlul: Răspuns: 046 Text
Scris de: Vlad Tarniceru din Martie 28, 2010, 14:03:52
am luat 100... trebuie citit caracter cu caracter pentru ca nu sti cat de mare e vectorul(spune ca dim e de maxim 1MB dar trebuie sa sti sa-l masori)

in rest algoritmul cosminei e de fapt:

        while(c!=EOF){
            c=f.get();
            if(litera(c)){
                ++lit;
                if(x==0){
                    ++cuv;
                    x=1;
                }
            }
            else
                x=0;
        }


Titlul: Răspuns: 046 Text
Scris de: Halalai Tudor Andrei din Mai 05, 2010, 18:50:02
Am si eu o intrebare tehnica:
Ce inseamna "Killed by signal 11(SIGSEGV)."?!?!?! ](*,)


Titlul: Răspuns: 046 Text
Scris de: alexandru din Mai 05, 2010, 19:34:51
Am si eu o intrebare tehnica:
Ce inseamna "Killed by signal 11(SIGSEGV)."?!?!?! ](*,)
Accesezi ilegal o zona de memorie ( e.g  incerci sa accesezi v[100] sau v[-100] cand vectorul are maxim 20 de elemente ). http://infoarena.ro/documentatie/evaluator


Titlul: Răspuns: 046 Text
Scris de: Halalai Tudor Andrei din Septembrie 07, 2010, 09:09:59
am trimis o sursa si la 3 teste mi-a dat
Citat
Killed by signal 8(SIGFPE).
ma poate ajuta cineva


Titlul: Răspuns: 046 Text
Scris de: Vlad Tarniceru din Septembrie 07, 2010, 10:35:33
pai poate fi asa:

1. ai impartit un numar la 0 (impartirea la 0 nu are sens)
2. ai declarat un vector prea mare (de exemplu v[1.000.000.000] si nu intra in memorie)
3. ai luat o variabila locala si nu ai initializat-o (de exemplu:

long long a;
int b;
b=a;//exista sansa ca a sa fie initializat la inceput cu un numar foarte mare, care depaseste intul (de 15 cifre sa zicem), asa ca ori le initializezi, ori le pui globale (globale adica inainte de "int main ()" )

cam astea ar fi motivele principale ...

succes ! :peacefingers:


Titlul: Răspuns: 046 Text
Scris de: Halalai Tudor Andrei din Septembrie 08, 2010, 08:07:28
merci...nu intlegeam mesajul


Titlul: Răspuns: 046 Text
Scris de: Halalai Tudor Andrei din Septembrie 08, 2010, 08:41:12
ce inseamna ca fisierul poate contine shi simboluri?
adik */-+!@#$%^&*()_+-={}[]::"|<<?>?,./;'\  ????
nu a inteles


Titlul: Răspuns: 046 Text
Scris de: Simoiu Robert din Septembrie 08, 2010, 08:48:23
Adica daca pui numele unui fisier : porumbel@suma+diferenta.cpp ( sa zicem ) , nu te lasa pentru ca contine simboluri care nu sunt admise.


Titlul: Răspuns: 046 Text
Scris de: Halalai Tudor Andrei din Septembrie 08, 2010, 09:02:32
Nu numele fisierului ci in fisier
text.in
bla bla @blablabla+blablabla^bla7
nu nume ci ca si continut


Titlul: Răspuns: 046 Text
Scris de: Simoiu Robert din Septembrie 08, 2010, 09:07:56
The same thing . :ok:


Titlul: Răspuns: 046 Text
Scris de: Oancea Catalin din Decembrie 26, 2010, 00:56:06
Cod:
#include<fstream>
using namespace std;
fstream f("text.in", ios::in),
g("text.out", ios::out);
short stie;
int nrlit, cuv;
char l;
int main()
{

stie=0;
nrlit=0;
cuv=1;
while(f>>l)
{
if( (l>='A' &&l<='Z')||(l>='a' && l<='z') ) // verifica daca l este litera
{
nrlit++;
stie=1; // exista un cuvat ( deoarece contine litera)
}
else // daca nu e litera
{
if(stie==1) // si stie ca deja a avut un cuvant in fata
cuv++;//numara cuvantul
stie=0;// si "stie" se reseteaza
}
}
g<<nrlit/cuv;

f.close();
g.close();
return 0;
}

Cand citesc un nou l nu imi dau seama cand e spatiu... defapt daca in fisier am :
Cod:
fag pin molid

imi afiseaza
Cod:
11

deoarece sare spatiile .
Cum pot sa remediez asta?  :-k


Titlul: tesul xxx
Scris de: pasat cristian din Ianuarie 12, 2011, 11:29:17
:-' ia vedeti ce se intampla daca propozitia  se gata cu o litera  8)

Later edit : pardon, sirul de caractere  :rotfl:





Editat de moderator : Nu posta de mai multe ori consecutiv. Editeaza-ti posturile anterioare.


Titlul: Răspuns: 046 Text
Scris de: Cristian Lambru din Februarie 19, 2011, 13:48:11
Sirul, propozitia, linia, daca citesti caracter cu caracter, se termina cu '\n' la sfarsit deci n-ai nicio sansa :) !

Nota : In C !


Titlul: Răspuns: 046 Text
Scris de: Silasi Alex din Martie 08, 2011, 10:32:50
#include<iostream.h>
void med();
int main()
{
   med();
   return 0;
}
void med()
{
   char a[256];
   int n,i,k=0,l=0;
   cin.get(a,256);
   n=strlen(a);
   for(i=0;i<n;i++)
      if(a==' ' && a[i-1]!=a)
         k++;
   for(i=0;i<n;i++)
      if(a!=' ')
         l++;
   cout<<l/k;
}


Titlul: Răspuns: 046 Text
Scris de: Alexandru Meterez din Martie 27, 2011, 09:58:29
Imi spuneti si mie, va rog, de ce solutia asta nu merge  ??? ?
Cod:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int main()
{
   char a;
   int n=0,c=0;
   int ok=0;
   while(fin>>a && !fin.eof())
   if((a>='a' && a<='z') || (a>='A' && a<='Z'))
   {

      n++;
   if(ok==0) c++;
   ok=1;
   }
   else ok=0;

   fout<<n/c;
   fin.close();
   fout.close();
   return 0;
}
  :weightlift:


Titlul: Răspuns: 046 Text
Scris de: Alex Velea din Iunie 11, 2011, 19:45:05
fiserul nu e "date.in" si "date.out"  :rotfl:


Titlul: Răspuns: 046 Text
Scris de: Simoiu Robert din Iunie 11, 2011, 21:34:31
Daca te-ai uita, la surse trimise Alexandru Meterez a pus bine numele fiserelor :P.


Titlul: Răspuns: 046 Text
Scris de: UBB Bora Dan din Februarie 11, 2012, 14:16:36
Am facut problema; si merge struna la mn... si cand o pun- eroare de compilare-->
Eroare de compilare: user.cpp: In function ‘int main()’: user.cpp:11: error: ‘strlen’ was not declared in this scope
care-i faza?
 :x :thumbdown: :-k


Titlul: Răspuns: 046 Text
Scris de: Simoiu Robert din Februarie 11, 2012, 14:31:41
Strlen este o functie prestabilita care este localizata in headerul cstring. Adica daca ai adauga # include <cstring> ar trebui sa mearga ;).


Titlul: Răspuns: 046 Text
Scris de: marin alexandru din Martie 01, 2012, 20:17:27
Cod:
imi poate spune cineva de ce pe o solutie ca asta iau TLE ? 

[cide]
program text1;
var c:string[1];
f,g:text;
nr,cuv,k:integer;
begin
assign(f,'text.in'); reset(f);
assign(g,'text.out'); rewrite(g);
nr:=0 ; cuv:=0 ; k:=1;
while not(eof(f)) do
begin
read(f,c);
if ((c>='A') and (c<='Z')) or ((c>='a') and (c<='z')) then
begin
k:=0;
nr:=nr+1;
end
else
if k=0 then
begin
cuv:=cuv+1;
k:=1;
end;
end;
write(g,nr div cuv); close(f); close(g);
end.

Editat de admin: Foloseste tagul "code" cand postezi surse.


Titlul: Răspuns: 046 Text
Scris de: George Marcus din Martie 01, 2012, 20:34:59
Fiindca e ineficienta :)
Incearca sa citesti textul pe bucati.


Titlul: Răspuns: 046 Text
Scris de: Petenchea Alexandru din Aprilie 12, 2012, 09:46:23
Am facut in C++ citirea fara buffer, apoi am parcurs ce am citit. E mai eficient asa cand ai foarte mult de citit  :peacefingers:


Titlul: Răspuns: 046 Text
Scris de: vatavu oana din Aprilie 26, 2012, 22:27:03
Pentru problema "Text":
Solutia mea:

Cod:
#include<fstream>
#include<iostream>
#include<string.h>
 using namespace std;
 ifstream f("o.in");
 ofstream g("o.out");
 int k=0,nr=0,i;
 char *p,a[256]="",b[11]=" -:.;',?! ";
 int main()
{
 f.getline(a,100);
 while(a[0]=='-'||a[0]=='"'||a[0]==' ')
strcpy(a,a+1);
 p=strtok(a,b);
 while(p)
{cout<<p<<endl;
 nr+=strlen(p);
 k++;
 p=strtok(NULL,b);
}
 if(k)
g<<(int)nr/k<<' '<<nr<<' '<<k;
 f.close();
 g.close();
 return 0;
}
De ce nu imi ia nici un test?

Editat de moderator: Foloseste tagul [ code ] cand postezi cod.


Titlul: Răspuns: 046 Text
Scris de: Boaca Cosmin din Aprilie 26, 2012, 23:17:10
O prima greseala este ca citesti doar 100 de caractere iar inputul poate avea undeva la 1.000.000 de caractere . Declara vectorul mai mare si mareste numarul de caractere citite .


Titlul: Răspuns: 046 Text
Scris de: Mihai Calancea din Aprilie 26, 2012, 23:24:09
Si fisierele sunt gresite.


Titlul: Răspuns: 046 Text
Scris de: FMI Alexandru Banu din Martie 23, 2013, 17:25:55
Intrebare... Textul poate avea si alineate? Adica trebuie sa iau in considerare si new line? Eu unul opresc executia cand dau de caracterul new line.


Titlul: Răspuns: 046 Text
Scris de: Radu-Andrei Szasz din Martie 23, 2013, 18:42:42
"Pe prima linie a fisierului de intrare text.in se gaseste textul dat."

Totul este pe o linie in fisierul de intrare.


Titlul: Răspuns: 046 Text
Scris de: agent47 din Octombrie 26, 2013, 20:11:29
Salut tocmai am facut problema dar imi spune ca nu este buna.Vedeti careva vreo greseala ?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{ifstream f("text.in");
ofstream g("text.out");
char s[256];
unsigned i,n=0,m=0,k;
f.get(s,256);
for(i=0;i<strlen(s);i++)
   {if(s<='z' && 'a'<=s || 'A'<=s && s<='Z')
      n=n+1;
      if(s==' ')
         m=m+1;
          if(s=='-')
      if((s[i-1]<='z'&& 'a'<=s[i-1] || 'A'<=s[i-1] && 'Z'<=s[i-1])&&(s[i+1]<='z'&& 'a'<=s[i+1] || 'A'<=s[i+1] && 'Z'<=s[i+1]))
         m=m+1;}
k=(int)n/m;
g<<k;}


Titlul: Răspuns: 046 Text
Scris de: George Marcus din Octombrie 27, 2013, 09:55:28
Ai eroare de compilare. Ai nevoie de <string.h>.


Titlul: Răspuns: 046 Text
Scris de: Strimbu Alexandru din Noiembrie 01, 2013, 22:36:24
De ce nu merge sa citesc tot sirul inainte si apoi sa-l parcurg?
Acesta este codul:
Cod:
#include <iostream>
#include <fstream>
#include <cstring>
#include <cctype>

using namespace std;
char a[1100010];
int main()
{
    ifstream fin("text.in");
    ofstream fout("text.out");
    int i;
    fin.getline(a,1100000);
    int n=strlen(a);
    int s=0,k=0,ok=1;
    for(i=0;i<n;i++)
    {
        if(isalpha(a[i]))
        {
            s++;
            if(ok)
                k++,ok=0;
        }
        else
            ok=1;
    }
        fout<<s/k;
    return 0;
}
Daca il fac identic, doar ca il citesc caracter cu caracter functioneaza.
Multumesc anticipat.


Titlul: Răspuns: 046 Text
Scris de: Paulica din Noiembrie 06, 2013, 13:16:48
De ce nu merge sa citesc tot sirul inainte si apoi sa-l parcurg?
Acesta este codul:
Cod:
#include <iostream>
#include <fstream>
#include <cstring>
#include <cctype>

using namespace std;
char a[1100010];
int main()
{
    ifstream fin("text.in");
    ofstream fout("text.out");
    int i;
    fin.getline(a,1100000);
    int n=strlen(a);
    int s=0,k=0,ok=1;
    for(i=0;i<n;i++)
    {
        if(isalpha(a[i]))
        {
            s++;
            if(ok)
                k++,ok=0;
        }
        else
            ok=1;
    }
        fout<<s/k;
    return 0;
}
Daca il fac identic, doar ca il citesc caracter cu caracter functioneaza.
Multumesc anticipat.

Pentru ca pui in vectorul a linia 1100000.
http://www.dreamincode.net/forums/topic/127452-converting-ifstream-to-char-array/

Dar nu fa asa, e foarte aiurea, si ineficient :p

Rezolvarea mea (100 p)

Cod:
#include <iostream>
#include <fstream>
using namespace std;

int e_litera(char a)
{
    if((a>=65 && a<=90) || (a>=97 && a<=122) )
        return 1;

        return 0;
}
int main()
{
    int nrcuvinte=0;
    int nrlitere=0;
    ifstream cit("text.in");
    char c;
    char lastChar=0;
    while(cit>> noskipws >>c)
    {

        if(e_litera(c))  nrlitere++;

        if(lastChar!=0)
        {
            if(!e_litera(c) && e_litera(lastChar))
                nrcuvinte++;
        }
        lastChar=c;


    }
    ofstream cut("text.out");
    cut<<nrlitere/nrcuvinte;
    cut.close(); cit.close();

    return 0;
}


Titlul: Răspuns: 046 Text
Scris de: Gherghita David din Decembrie 22, 2013, 16:33:18
Va rog... nu inteleg de ce nu functioneaza sursa asta... Uita-ti fragmentul din sursa:
n - nr de cuvinte
l - nr de litere

Cod:
getline(infile, str);
len = str.length() - 1;
    for (i = 0; i <= len; i += 1) {
        if (isalpha(str[i])) {
            l++;
            if (!(isalpha(str[i + 1]))) {
                n++;
            }
        }
    }

M-am gandit ca daca caracterul e litera, atunci adauga 1 la litere. Si daca urmatorul caracter nu mai e litera, atunci inseamna ca s-a termiant cuvantul, deci adauga 1 la cuvinte. Un exemplu de propozitie care nu o face corect v-as ruga sa imi dati...


Titlul: Răspuns: 046 Text
Scris de: George Marcus din Decembrie 22, 2013, 22:12:06
Ar fi bine sa declari stringul global. (cred ca asa scapi de KBS)


Titlul: Răspuns: 046 Text
Scris de: Ciprian O. din Mai 07, 2014, 22:18:53
Buna! Ma puteti ajuta, va rog? :) Omit ceva, sau am gresit ceva, pentru ca nu pot lua punctaj maxim. Mi-ati putea da, va rog, un indiciu ? :D

int main()
{
   while(fin.get(s,2))
   {
       if((s>='a'&&s<='z')||(s>='A'&&s<='Z')) //verifica daca e litera
            {litere++; sw=1;}
        else if(sw==1) {cuvinte++; sw=0;} //verifica daca e cuvant
   }

   if(sw==1) cuvinte++;
   fout<<litere/cuvinte;
    return 0;
}


Titlul: Răspuns: 046 Text
Scris de: fabbbyyy din Mai 01, 2015, 22:11:22
Salut!
Ma puteti ajuta va rog? Nu stiu de ce primesc WA la 3 teste (printre care si primul)
Ideea mea este relativ simpla, citesc caracter cu caracter, daca gasesc o litera si inainte era simbol am gasit un cuvant nou, daca nu, creste doar nr de litere.

Codul este urmatorul
Cod:
#include <fstream>
#include <string.h>
using namespace std;
ifstream f ("text.in");
ofstream g ("text.out");
int main(){
    char x; int ok = 0, lungime = 0, cuvinte = 0;
    while (f >> noskipws >> x){
        if (!isalpha(x)){
            ok = 1;
        }
        else if (isalpha(x)){
            lungime++;
            if (ok){
                cuvinte++;
                ok = 0;

            }
        }
    }
    if (cuvinte > 0)
        g << lungime/cuvinte;
    else g << "0";
    f.close();
    g.close();

}
Multumesc :) .

LE: Acum ca ma gandesc, cred ca problema e  ca textul poate fi  pe mai multe linii si programul meu se opreste la primul rand. In acest sens problema poate fi rezolvata cu stream si citit caracter cu caracter, sau trebuie cu get sa memorez toate caracterele intr-un char[] ?


Titlul: Răspuns: 046 Text
Scris de: Raul Gavris din Octombrie 25, 2015, 10:16:37
salut :D de ce imi arata "in asteptare" la evaluator?deja de ieri


Titlul: Răspuns: 046 Text
Scris de: Negulescu Anca-Mihaela din Noiembrie 20, 2015, 14:38:07
Pot vedea undeva testele? Am incercat sa numar cuvintele fara sa ma folosesc de functii precum isspace etc, si ar trebui dpdv logic sa mearga, dar imi da wrong answers si killed by signals. Multumesc.


Titlul: Răspuns: 046 Text
Scris de: Vlad Rochian din August 09, 2016, 10:33:45
http://www.infoarena.ro/job_detail/1739323 (http://www.infoarena.ro/job_detail/1739323)
Cel puțin un test are format greșit.


Titlul: Răspuns: 046 Text
Scris de: Bogdan Pop din Noiembrie 24, 2016, 21:46:49
Mi se pare ca e ceva ciudat.
Am trecut de la 40 la 100 inlocuind
Cod:
 getline(f,s) 
cu
Cod:
 while(getline (f,s)) 
si nu am vazut sa ia cineva 100 cu functia de citire a unei singure linii(scuzati-ma daca gresesc).Din cate am verificat functia  getline() nu ar trebui sa fie restrictionata de vreo dimensiune mai mica decat cea a  testelor.Cred ca testele nu respecta(in totalitate) restrictia ca textul se afla pe prima linie.