View Full Version : Можели някой да ми реши 8 задачи на С++ и Паскал.
PisiTy93
05-21-2011, 10:51
Задача 1. Дадени са три числа. Да изведе най-голямото.
Задача 14. Да се реши неравенството: А.Х2+В.Х+С>0 (в множеството на реалните числа R) при А≠0.
Задачи от делимост
Задача 28. Дадено е четирицифрено число. Да се провери дали числото е “щастливо” т.е. дали първата му цифра е равна на втората и третата на четвъртата.
Дължина на отсечка и разделяне на отсечка в отношение
Задача 33. Два триъгълника са зададени с координатите на върховете си. Да се провери дали те са
Еднакви.
Уравнение на права, окръжност, елипса
Задача 42. Дадеи са права с уравнението си и точка с координатите си. Да се определи взаимното им положение.
Геометрични преобразувания и координати
Задача 57. Точка е зададена с координатите си. Да се изобразят на екрана точката и образът й при симетрия спрямо ординатната ос.
Задача 71. За даден паралелепипед да се изчертае сечение през три точки от околните му ръбове.
Геометрични формули
Задача 98. Дадени са дължините на страните на триъгълник. Да се определи вида му – равностранен, равнобедрен, разностранен.
MegaAlexcho
05-23-2011, 01:06
Реших 3 "задачи". Утре ако не няма какво да правя ще ти напиша някоя друга задача.Добавил съм коментари ако нещо не разбереш :)
P.S с Паскал не мога да ти помогна.
Задача 1
#include<iostream>
using namespace std;
//p1
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a>b && a>c) cout<<a<<endl; //Проверка дали a е най-голямато число
if(b>a && b>c) cout<<a<<endl; //Проверка дали b е най-голямато число
if(c>a && c>b) cout<<c<<endl; //Проверка дали b е най-голямато число
return 0;
}
Задача 28
#include<iostream>
#include<string>
using namespace std;
//p28
string s; //Деклариране на стринг като глобална променлива
int main()
{
cin>>s;
if(s[0]==s[1] && s[2]==s[3]) cout<<"yes\n"; //Проверка дали първатацифра на стринга е равна на втората и третата на четвъртата.
else cout<<"no\n"; //В противен случай
return 0;
}
Задача 98
#include<iostream>
using namespace std;
//p98
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a==b && b==c) cout<<"ravnostranen\n"; //Проверка дали триъгълникът е равностранен
else if(a!=b && a!=c && b!=c) cout<<"raznostranen\n"; //Проверка дали триъгълникът е разностранен
else cout<<"ravnobedren\n"; //Проверка дали триъгълникът е равнобедрен
return 0;
}
Задача 14
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a, b, c, x1, x2, D;
cout<<"(Vuvedete chislo, razli4no ot 0) a=";cin>>a;
while (a==0)
{
cout<<"\nVuvedete chislo razli4no ot 0!";
cout<<"\na="; cin>>a;
}
cout<<"\n
cout<<"\nb=";cin>>b;
cout<<"\nc=";cin>>c;
D=b*b-4*a*c;
if (D>=0);
x1=(-b-sqrt(D))/(2*a);
x2=(-b+sqrt(D))/(2*a);
if (x1>x2)
{
double buf;
buf=x1;
x1=x2;
x2=buf;
}
if (a>0)
{
if (D<0)
{
cout<<"Vsqko x";
}
else
{
cout<<"X prinadleji na (-bezkrainost;"<<x1<<") U ("<<x2<<";+bezkrainost)";
}
}
else
{
if (D<=0)
{
cout<<"Nqma realni koreni";
}
else
{
cout<<"X prinadleji na ("<<x1<<";"<<x2<<")";
}
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();
return 0;
}
Задача 28
#include <iostream>
using namespace std;
int main()
{
int n, d1, d2, d3, d4;
cout<<"Molq vuvedete chetiricifreno chislo:"; cin>>n;
while((n<1000) || (n>=10000))
{
cout<<"Molq vuvedete CHETIRICIFRENO chislo:"; cin>>n;
}
d1=n%10;
n=n/10;
d2=n%10;
n=n/10;
d3=n%10;
n=n/10;
d4=n%10;
if ((d1==d2) && (d3==d4))
{
cout<<"Chisloto e shtastlivo";
}
else
{
cout<<"Chisloto ne e shtastlivo";
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();
return 0;
}
(Написаната по-горе със string-a не е лоша като идея, но не проверява, дали въведеното в низа е число или дума. "ААсс" също би го разчело като щастливо число.)
И аз ще се опитам на останалите по-късно (евентуално).
Ето малко идеи, ако някой ме изпревари:
Зад 1: Мисля, че вече е решена.
зад 33: Изчисляват се дължините на отсечките и се проверява еднаквостта им по 3-ти признак.
зад 42: Заместват се координатите на точката в уравнението и се проверява, дали се получава Ax+By+C>0, <0 или =0. Ако е >0, точката се намира над правата g, ако е <0 - под правата g, ако е =0 - принадлежи на g.
зад 57: Ако е дадена точката (х,у), нейната симетрична спрямо ординатната ос е (-х,у)
зад 71: На база на 3-те точки съставяме общото уравнение на равнината Ах+By+Cz+D=0 и го решаваме в система с уравненията на равнините на околните стени (търсим общите точки), като ограничаваме х, у и z в рамките на паралелепипеда.
зад 98: Мисля, че вече е решена.
33 задача (ще предположа, че става на въпрос за координати в двумерно пространство)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double side1[3]; //masiv za stranite na purviq triygylnik
double side2[3]; //masiv za stranite na vtoriq triygylnik
double coord[6][2]; //masiv za koordinatite na vyrhovete
double buf;
int i,j,swapped;
//vuvejdane na koordinatite
for (i=0;i<6;i++)
{
for (j=0;j<2;j++)
{
cout<<"\nVuvedete "<<j+1<<"-ta koordinata na "<<i+1<<"-ta tochka:";
cin>>coord[i][j];
}
}
//presmqtane na duljinite na stranite po formulata sqrt[(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)]
side1[0]=(coord[0][0]-coord[1][0])*(coord[0][0]-coord[1][0])+(coord[0][1]-coord[1][1])*(coord[0][1]-coord[1][1]);
side1[1]=(coord[1][0]-coord[2][0])*(coord[1][1]-coord[2][1])+(coord[1][1]-coord[2][1])*(coord[1][1]-coord[2][1]);
side1[2]=(coord[2][0]-coord[0][0])*(coord[2][0]-coord[0][0])+(coord[2][1]-coord[0][1])*(coord[2][1]-coord[0][1]);
side2[0]=(coord[3][0]-coord[4][0])*(coord[3][0]-coord[4][0])+(coord[3][1]-coord[4][1])*(coord[3][1]-coord[4][1]);
side2[1]=(coord[4][0]-coord[5][0])*(coord[4][0]-coord[5][0])+(coord[4][1]-coord[5][1])*(coord[4][1]-coord[5][1]);
side2[2]=(coord[5][0]-coord[3][0])*(coord[5][0]-coord[3][0])+(coord[5][1]-coord[3][1])*(coord[5][1]-coord[3][1]);
side1[0]=sqrt(side1[0]);
side1[1]=sqrt(side1[1]);
side1[2]=sqrt(side1[2]);
side2[0]=sqrt(side2[0]);
side2[1]=sqrt(side2[1]);
side2[2]=sqrt(side2[2]);
//Sortirane na masiva side1
do
{
swapped = 0;
for (i=0; i<3; i++)
{
if (side1[i]>side1[i+1])
{
buf=side1[i];
side1[i]=side1[i+1];
side1[i+1]=buf;
swapped=1;
}
}
}
while (swapped==1);
//Sortirane na masiva side2
do
{
swapped = 0;
for (i=0; i<3; i++)
{
if (side2[i]>side2[i+1])
{
buf=side2[i];
side2[i]=side2[i+1];
side2[i+1]=buf;
swapped=1;
}
}
}
while (swapped==1);
//Proverka za ednakvost po 3-ti priznak
if ((side1[0]==side2[0]) && (side1[1]==side2[1]) && (side1[2]==side2[2]))
{cout<<"Triugulnicite sa ednakvi";}
else
{cout<<"Ne sa ednakvi";}
//Chetene ot klaviaturata, s cel da ne se zatvarq dos shell-a
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();
return 0;
}
Май не работи като хората, но това измъдрих..
Задача 42:
#include <iostream>
using namespace std;
int main()
{
double x, y, a, b, c, eq;
int position;
cout<<"Vuvedete x koordinata na tochkata:"; cin>>x;
cout<<"\nVuvedete y koordinata na tochkata:"; cin>>y;
cout<<"\nA="; cin>>a;
cout<<"\nB="; cin>>b;
cout<<"\nC="; cin>>c;
eq = a*x+b*y+c;
if (eq==0)
{cout<<"Tochkata prinadleji na pravata";}
else if (eq>0)
{cout<<"Tochkata se namira nad pravata";}
else
{cout<<"Tochkata se namira pod pravata";}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();
return 0;
}