infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Mircea Mihai din Decembrie 11, 2011, 01:06:53



Titlul: Putin ajutor... :)
Scris de: Mircea Mihai din Decembrie 11, 2011, 01:06:53
Buna seara tuturor. Incerc sa fac problema urmatoare: Se citeste de la tastatura un text format din mai multe propozitii. Sa se afiseze numarul de propozitii, propozitia cu cele mai multe cuvinte, propozitia cu cele mai putine cuvinte, propozitia cu cele mai multe caractere, propozitia cu cele mai putine caractere.

Am facut codul de mai jos dar nu inteleg ce nu merge... O sa vi se para unele chestii ciudate pentru ca am incercat toate metodele dar tot nu reusesc. Nu primesc erori dar nu ruleaza (Terminated with code - blabla). De asemenea am un prof idiot care mi-a cerut sa fac si un GUI simplu (o fereastra cu un spatiu unde sa scriu problema, un spatiu de unde sa citesc datele si altele pentru afisari). Problema e ca habar nu am cum. Daca m-ar putea ajuta cineva si cu partea asta as ramane vesnic dator :).

Cod:
#include<iostream.h>
#include<string.h>
#include<conio.h>
#define subp ".?!"
#define Nmax 10000
using namespace std;
char v[Nmax],maxs[Nmax],mins[Nmax];
int main()
   {int nr=0,spatii,max=-1,min=Nmax+1,nrmin=Nmax+1,comp; int nrmax=0;
    cout<<"Textul:"; cin.get(v,Nmax);
    char  *p=strtok(v,subp),*q,*propcrmin,*propcrmax;
    while(p)
         {spatii=0;
          nr++;
 comp=strlen(p);
 if(comp<nrmin){nrmin=comp; strcpy(propcrmin,p);}
 if(comp>nrmax){nrmax=comp; strcpy(propcrmax,p);}
          q=strchr(p,' ');
          while(q)
               {spatii++;
                q=strchr(q+1,' ');
               }
          if(spatii>max)
            {max=spatii;
             strcpy(maxs,p);
            }
            else if(spatii<min) {min=spatii; strcpy(mins,p);}
          p=strtok(NULL,subp);
         }
    cout<<"\nNumarul de propozitii: "<<nr<<"\nPropozitia cu cele mai putine cuvinte: "<<mins;
    cout<<"\nPropozitia cu cele mai multe cuvinte: "<<maxs;
cout<<"\nPropozitia cu cele mai putine caractere: "<<propcrmin;
cout<<"\nPropozitia cu cele mai multe caractere: "<<propcrmax;
return 0;
   }

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


Titlul: Răspuns: Putin ajutor... :)
Scris de: Pripoae Teodor Anton din Decembrie 11, 2011, 17:01:33
Windows sau Linux ?


Titlul: Răspuns: Putin ajutor... :)
Scris de: Mircea Mihai din Decembrie 11, 2011, 23:42:17
Windows.


Titlul: Răspuns: Putin ajutor... :)
Scris de: Pripoae Teodor Anton din Decembrie 12, 2011, 14:24:30
Uite-te pe Visual Studio.


Titlul: Răspuns: Putin ajutor... :)
Scris de: Petru Trimbitas din Decembrie 12, 2011, 15:17:35
Daca tot ai un prof care face pe desteptul si iti cere sa-i faci un gui, spune-i ca nu prea stii cum si sa te ajute el :) . In locul tau nu m-as complica cu strtok. Eu as parcurge sirul si pentru fiecare punct as actualiza propozitiile iar numarul de cuvinte le-as actualiza la fiecare caracter care nu e litera.


Titlul: Răspuns: Putin ajutor... :)
Scris de: mdmdmd din Decembrie 23, 2011, 16:43:46
Cod:
#include <iostream>
using namespace std;

#define CUV (0)
#define CARAC (1)

int P[2][500], x(0);

void MAX_MIN_CUVINTE()
{
int maxcuv, mincuv, k[2] = {0, 0};
maxcuv = mincuv = P[CUV][0];
for(int i = 1; i < x; i++)
{
if(P[CUV][i] > maxcuv)
{
maxcuv = P[CUV][i];
k[0] = i;
}

if(P[CUV][i] < mincuv)
{
mincuv = P[CUV][i];
k[1] = i;
}
}
cout << "Propozitia cu cele mai multe cuvinte este propozitia " << ++k[0] << ", care contine " << maxcuv << (maxcuv == 1 ? (" cuvant") : (" cuvinte")) << "." << endl;
cout << "Propozitia cu cele mai putine cuvinte este propozitia " << ++k[1] << ", care contine " << mincuv << (mincuv == 1 ? (" cuvant") : (" cuvinte")) << "." << endl;
}

void MAX_MIN_CARAC()
{
int maxcarac, mincarac, k[2] = {0, 0};
maxcarac = mincarac = P[CARAC][0];
for(int i = 1; i < x; i++)
{
if(P[CARAC][i] > maxcarac)
{
maxcarac = P[CARAC][i];
k[0] = i;
}

if(P[CARAC][i] < mincarac)
{
mincarac = P[CARAC][i];
k[1] = i;
}
}
cout << "Propozitia cu cele mai multe caractere este propozitia " << ++k[0] << ", care contine " << maxcarac << (maxcarac == 1 ? (" caracter") : (" caractere")) << "." << endl;
cout << "Propozitia cu cele mai putine caractere este propozitia " << ++k[1] << ", care contine " << maxcarac << (mincarac == 1 ? (" caracter") : (" caractere")) << "." << endl;
}

int main()
{
int i, j, len, prop(0), k(0);
char S[1000];
cout << "Dati sirul: "; gets(S);
for(i = 0, len = strlen(S); i < len; i++)
{
if(S[i] == '.' || S[i] == '?' || S[i] == '!' || S[i+1] == NULL)
{
prop++;
for(j = k; j <= i; j++)
{
P[CARAC][x]++;
if(S[j] == ' ' || S[j+1] == NULL || S[j+1] == '.' || S[j+1] == '?' || S[j+1] == '!')
{
P[CUV][x]++;
}
}
++x;
k = i;

}
}
cout << endl << endl <<  "Numarul propozitiilor: " << prop << endl;
MAX_MIN_CUVINTE();
MAX_MIN_CARAC();

system("pause>nul");
return 0;
}

Ideea este ca propozitiile trebuie scrise cum le scrii pe caiet, nu cum scrii in word.
Exemplu bun: "Salut.Ce mai faci?Uite bine, pe acasa!Tu?Si eu la fel, multumesc."