Jump to content
bDyds

Probleme C++

Recommended Posts

Posted

Salut, am mai postat programul cu spanzuratoarea pentru atestat, am vorbit cu profa si mi-a dat alta problema. Problema este ca nici la aceasta nu am idei prea stralucite.

Se da un vector a[n].
1. Sa se determine frecventa de aparitie a fiecarui numar in vectorul A (de cate ori apare fiecare element)
2. Sa se determine cea mai lunga frecventa crescatoare.
3. Sa se termine toate secventele care incep si se termina cu numere palindroame

Nu doresc neaparat sa-mi dati mura-n gura, doar sa-mi explicati cum trebuie.

LE: Prima problema m-am gandit sa o fac asa, insa fara succes..

#include <iostream.h>
void citire(int &t, int x[20])
{cout<<"Dati numarul elementelor vectorului";
cin>>t;
cout<<"Dati elementele vectorului";
for(int i=1;i<=t;i++)
cin>>x[i];
}
void cresc(int t, int x[20])
{int a;
for(int i=1;i<=t-1;i++)
for(int j=i+1;j<=t;j++)
if(x[i]>x[j])
{a=x[i];
x[i]=x[j];
x[j]=a;
}
}
void main()
{int a[20], n, i, j, k;
citire(n, a);
cresc(n, a);
k=0;
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
if(a[i]==a[j])
k++;
else
cout<<"Numarul de aparitii al lui "<<a[i]<<"este de "<<k<<"ori."<<endl;
k=0;
}

Posted

Am reusit sa fac prima problema:

#include <iostream.h>
void citire(int &t, int x[20])
{cout<<"Dati numarul elementelor vectorului";
cin>>t;
cout<<"Dati elementele vectorului";
for(int i=1;i<=t;i++)
cin>>x[i];
}
void cresc(int t, int x[20])
{int a;
for(int i=1;i<=t-1;i++)
for(int j=i+1;j<=t;j++)
if(x[i]>x[j])
{a=x[i];
x[i]=x[j];
x[j]=a;
}
}
void main()
{int a[20], n, i, j, k;
citire(n, a);
cresc(n, a);
k=1;
for(i=1;i<=n;i++)
{if(a[i]==a[i+1])
k++;
else
{cout<<"Numarul de aparitii al lui "<<a[i]<<" este de "<<k<<" ori."<<endl;
k=1;
}
}
}

Posted

faci un for care parcurge vectorul incepand cu al doilea element.

la inceput ai o variabila contor pe care o initializezi cu 1 si o variabila max pe care o initializezi cu 1 si o variabila care retine ca ce pozitie incepe cea mai lunga secventa. o sa o numic inceput si o sa o initializezi cu 0.

dupa aia la fiecare iteratie a forului:

-daca elementu curent a mai mare ca precedentul atunci contor++

-daca nu atunci verifici daca contor e mai mare decat max. in caz afirmativ max ia valoarea contor si variabila inceput ia valoarea i (unde i e variabila de iteratie a forului) - contor.

dupa ce iese din for mai faci un for de la variabila inceput pana la inceput+max in care afisezi vector

Posted (edited)

Multumesc pentru raspunsul rapid nemesis. Am facut cum mi-ai spus si nu imi afiseaza nimic. Uite ce am facut:

#include <iostream.h>
#include <values.h>
void citire(int &t, int x[20])
{cout<<"Dati numarul elementelor vectorului";
cin>>t;
cout<<"Dati elementele vectorului";
for(int i=1;i<=t;i++)
cin>>x[i];
}
void main()
{int a[20], n, i, t, k, tmax=-MAXINT, kmax=-MAXINT;
citire(n ,a);
for(i=1;i<=n;i++)
if(a[i]<=a[i+1])
k++;
else
{t=a[i-k+1];
if(tmax<t)
tmax=t;
if(kmax<k)
kmax=k;
k=0;
}
for(i=tmax;i<=kmax;i++)
cout<<a[i];
}

In t am retinut prima cifra din fiecare secventa cu a[i-k+1], k fiind numarul de elemente crescatoare consecutive.

Imi pare rau, nu am inteles la ce te referi phreak, o sa scriu pe situl acela codul de acum.

Edit: cred ca ar fi trebuie t=i-k+1, dar nu merge nici asa..

http://ideone.com/4ybly daca ajuta cu ceva.

Edited by bDyds
Posted

Corect, am facut corectarile de rigoare, insa tot nu afiseaza ce trebuie.

#include <iostream.h>
#include <values.h>
void citire(int &t, int x[20])
{cout<<"Dati numarul elementelor vectorului";
cin>>t;
cout<<"Dati elementele vectorului";
for(int i=1;i<=t;i++)
cin>>x[i];
}
void main()
{int a[20], n, t, i, k=0, tmax=-MAXINT, kmax=-MAXINT;
citire(n ,a);
for(i=1;i<=n;i++)
if(a[i]<=a[i+1])
k++;
else
{t=i-k+1;
if(tmax<t)
tmax=t;
if(kmax<k)
kmax=k;
k=0;
}
for(i=tmax;i<=tmax+kmax;i++)
cout<<a[i];
}

Posted (edited)

http://ideone.com/x9FjT

la a treia problema faci o functie care primeste argument un numar intreg (int) si determina daca numarul e palindrom sau nu, returnand 1 in caz afirmativ, si 0 in caz contrar.

dupa o sa ai ceva gen:


for (int i = 0; i < nrElem; i++)
if (palindrom(vector[i]) == 1)
for(int j = i+1; j < nrElem; j++)
if (palindrom(vector[j]) == 1) {
for (int k = i; k < j; k++)
cout<<vector[k]<<" ";
cout<<"/n";
}

Edited by NemesisITSC
Posted
Ideone.com | Online C++ Compiler & Debugging Tool

la a treia problema faci o functie care primeste argument un numar intreg (int) si determina daca numarul e palindrom sau nu, returnand 1 in caz afirmativ, si 0 in caz contrar.

dupa o sa ai ceva gen:


for (int i = 0; i < nrElem; i++)
if (palindrom(vector[i]) == 1)
for(int j = i+1; j < nrElem; j++)
if (palindrom(vector[j]) == 1) {
for (int k = i; k < j; k++)
cout<<vector[k]<<" ";
cout<<"/n";
}

Multumesc pentru raspunsuri, mi-au fost de foarte mare ajutor. La a treia problema am trisat putin si am schimbat enuntul: Sa se afiseze cea mai lunga secventa care incepe si se termina cu un palindrom. Am aflat care este pozitia primului palindrom, care este pozitia ultimului folosind o functie, cum ai zis si tu, si am afisat elementele din vector de la pozitia primului palindrom pana la pozitia ultimului palindrom.

Multumesc again pentru raspunsuri.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...