Sunteți pe pagina 1din 7

Algoritmică şi programare

Probleme rezolvate (vezi L04)

Setul 1. (5-6)

Problema 1. Să se calculeze şi să se afişeze valoarea distanţei dinte două


puncte ale căror coordonate sunt citite de la tastatură.

#include<iostream>
#include<math.h>
using namespace std;
void main(void)
{
double x1,x2,y1,y2,distanta;
cout<<"Introduceti coordonatele primului punct : "<<endl;
cout<<"x1 = ";cin>>x1;
cout<<"y1 = ";cin>>y1;
cout<<"x2 = ";cin>>x2;
cout<<"y2 = ";cin>>y2;
distanta=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
cout<<"Distanta dintre cele doua puncte este : "<<distanta<<endl;
}

Problema 2. Să se scrie un program pentru rezolvarea ecuaţiei de gradul I:


ax+b=0, unde coeficienţii a şi b sunt citiţi de la tastatură. Să se analizeze
situaţiile care apar.

#include<iostream>
using namespace std;
void main(void)
{
double a,b,x;
cout<<"Introduceti coeficientii ecuatiei : "<<endl;
cout<<"a = ";cin>>a;
cout<<"b = ";cin>>b;
if (a==0)
if (b==0)
cout<<"Ecuatia are o infinitate de solutii !"<<endl;
else
cout<<"Ecuatia nu are solutii !"<<endl;
else {
x=(-b)/a;
cout<<"Solutia ecuatiei este x = "<<x<<endl;
}
}

Problema 3. Se citesc de la tastatură trei valori a, b şi c. Să se afişeze,


în ordine crescătoare, valorile acestor variabile, fără modificarea
conţinutului lor.

#include<iostream>
1
using namespace std;
void main(void)
{
int a,b,c;
cout<<"Dati primul numar = ";cin>>a;
cout<<"Dati al doilea numar = ";cin>>b;
cout<<"Dati al treilea numar = ";cin>>c;
if (a<b){
if(b<c)
cout<<a<<","<<b<<","<<c<<endl;
else
{
if(a<c)
cout<<a<<","<<c<<","<<b<<endl;
else
cout<<c<<","<<a<<","<<b<<endl;
}
}
else
{
if(a<c)
cout<<b<<","<<a<<","<<c<<endl;
else{
if(b<c)
cout<<b<<","<<c<<","<<a<<endl;
else
cout<<c<<","<<b<<","<<a<<endl;
}
}
}

Problema 4. Să se scrie un program care citeşte un şir de caractere şi


transformă şirul în şir cu litere mari.

#include<iostream>
using namespace std;
void litere_mici(char s[30])
{
int i=0;
while(s[i]!=0) {
if((s[i]>=97) && (s[i]<=122))
s[i]=s[i]-32;
i++;
}
return;
}
void main(void)
{
char s[30];
cout<<"Introduceti sirul de caractere : ";cin>>s;
litere_mici(s);
cout<<"Sirul transformat in litere mici este : "<<s<<endl;
}

***********************************

2
Setul 2. (7-8)

Problema 5. Să se scrie un program pentru rezolvarea ecuaţiei de gradul II:


ax2+bx+c=0, unde coeficienţii a, b şi c sunt citiţi de la tastatură. Să se
analizeze situaţiile care apar.

#include<iostream>
#include<math.h>
using namespace std;
void main(void){
float a,b,c,x,x1,x2,delta,real,imag;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"c=";cin>>c;
if(a==0){
cout<<"Ecuatie de gradul I"<<endl;
if(b==0){
if(c==0)
cout<<"Avem o infinitate de solutii"<<endl;
else
cout<<"Ecuatie imposibila"<<endl;
}
else{
x=-c/b;
cout<<"Solutia ecuatiei este x= "<<x<<endl;
}
}
else{
delta=b*b-4*a*c;
if(delta>=0){
cout<<"Radacini reale: "<<endl;
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
cout<<"x1 = "<<x1<<"; x2 = "<<x2<<endl;
}
else{
cout<<"Radacini complexe :"<<endl;
delta=-delta;
real=-b/(2*a);
imag=sqrt(delta)/(2*a);
cout<<"x1 = "<<real<<" + i*"<<imag<<endl;
cout<<"x2 = "<<real<<" - i*"<<imag<<endl;
}
}
}

Problema 6. Scrieţi un program care citeşte un număr natural n de la


tastatură şi, folosind criteriile de divizibilitate, să se stabilească dacă
acest număr se divide cu 5 şi cu 3.

#include<iostream>
using namespace std;
void main(void){
int n,c,s=0,uc;
cout<<"n = ";cin>>n;
3
uc=n%10;
while(n!=0){
c=n%10;
s=s+c;
n=n/10;
}
if((s%3==0)&&((uc==0)||(uc==5)))
cout<<"Numarul este divizibil prin 3 si 5"<<endl;
else
cout<<"Numarul nu este divizibil prin 3 si 5"<<endl;
}

Problema 7. Să se citească un număr întreg de la tastatură şi să se


stabilească dacă acesta este perfect sau nu (un număr este perfect dacă el
este egal cu suma divizorilor săi, mai puţin el însuşi).

#include <iostream>
using namespace std;
void main(void){
int n,i,s=0;
cout<<"Introduceti numarul ce va fi testat"<<endl;
cout<<"n=";cin>>n;
for(i=1;i<=n/2;i++)
if(n%i==0)
s=s+i;
cout<<"s="<<s<<endl;
if(n==s)
cout<<"Numarul "<<n<<" este numar PERFECT"<<endl;
else
cout<<"Numarul "<<n<<" NU este numar PERFECT"<<endl;
}

Problema 8. Să se elaboreze un program care numără de câte ori apare un


anumit caracter într-un şir de caractere citit de la tastatură.

#include<iostream>
using namespace std;
void main(void){
char s[100],a;
int i,k=0;
cout<<"Sirul de caractere este : ";cin>>s;
cout<<"Introduceti caracterul ce va fi cautat : ";cin>>a;
for(i=0;i<100;i++)
if(s[i]==a)
k++;
cout<<"Caracterul "<<a<<" apare de "<<k<<" ori."<<endl;
}
***********************************

Setul 3. (9-10)

Problema 9. Să se citească de la tastatură două cuvinte (sub forma a două


şiruri de caractere) şi să se ordoneze lexicografic. Spunem ca un şir de
caractere este mai mic lexicografic decât un altul dacă ele coincid până la o

4
poziţie i0, iar pe poziţia i0+1 caracterul din primul cuvânt este alfabetic
înaintea caracterului de pe aceeaşi poziţie din cel de al doilea cuvânt.

Observație. O variantă imbunătățită a acestui algoritm a fost construită în


laboratorul precedent!

#include<iostream>
using namespace std;
void main(){
char s1[100],s2[100];
int i,k=1;
cout<<"Dati primul sir: ";
cin.get(s1,50);cin.get();
cout<<"Dati al doilea sir: ";
cin.get(s2,50);
for(i=0;(s1[i]||s2[i])&&k;i++)
if(s1[i]<s2[i]){
cout<<"Sirul <"<<s1<<"> este mai mic lexicografic decat
sirul <"<<s2<<">"<<endl;
k=0;
}
else
if(s1[i]>s2[i]){
cout<<"Sirul <"<<s2<<"> este mai mic lexicografic
decat sirul <"<<s1<<">"<<endl;
k=0;
}
if(k)
cout<<"Sirurile sunt egale lexicografic."<<endl;
}

Problema 10. Să se elaboreze un program care numără de câte ori apare fiecare
cifră distinctă într-un şir de numere reale introdus de la tastatură.

#include<iostream>
using namespace std;
void main(){
float x[100],y[100],f[100];
int i,n,j,ok,k=0;
cout<<"Introduceti dimensiunea sirului : ";
cin>>n;
for(i=1;i<=n;i++){
cout<<"x["<<i<<"]=";
cin>>x[i];
}
y[0]=x[0];
f[0]=1;
for(i=1;i<=n;i++){
ok=0;
for(j=0;j<=k-1;j++)
if(x[i]==y[j]){
ok=1;
f[j]++;
}
if(!ok){
5
y[k]=x[i];
f[k++]=1;
}
}
for(i=0;i<=k-1;i++){
cout<<y[i]<<" are frecventa "<<f[i];
cout<<endl;
}
}

Problema 11. Să se citească de la tastatură două şiruri de numere întregi: x,


cu nx elemente şi y cu ny elemente (nx< ny). Să se stabilească dacă primul şir
este subşir al celui de al doilea.

Observație. Să se rezolve problema fără a folosi funcții ce prelucrează


string-uri!

#include<iostream>
using namespace std;
void main(){
char s[200],t[200];
cout<<"Introduceti primul sir : ";
cin.getline(s,200);
cout<<"Introduceti al doilea sir : ";
cin.getline(t,200);
if(strstr(s,t)!=NULL)
cout<<"Da, "<<t<<" este subsir "<<" al lui "<<s<<endl;
else
cout<<"Nu, "<<t<<" nu este subsir "<<" al lui "<<s<<endl;
}

Problema 12. Să se determine cel mai mare divizor comun a n numere citite de
la tastatură.

#include<iostream>
using namespace std;
int a[100],n,c;
int cmmdc(int a,int b){
while(a!=b)
if(a>b)
a-=b;
else
b-=a;
return a;
}
void main(){
cout<<"n= ";
cin>>n;
for(int i=0;i<n;i++){
cout<<"a["<<i<<"]= ";
cin>>a[i];
}
c=a[0];
for(int i=1;i<n;i++)
c=cmmdc(a[i],c);

6
cout<<"c.m.m.d.c. al numerelor introduse este : "<<c<<endl;
}

S-ar putea să vă placă și