download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Една задачка на C++ да ми кажете къде бъркам в кода :)

<1 2 3 4 5 6 7 8 9 >

Автор
Съобщение
angelicstar
Вто, 02.03.10, 13:37
Ами в оня самоучител дето го казваш на 291 стр. има примерче за 3ъгълник.
anonymous
Вто, 02.03.10, 18:54
Опитай нещо от рода на:
__try{
.........
}
__catch(cin.fail()){ ... }
__catch( ... ){ ... }

kookki
Вто, 02.03.10, 20:34
Бойчо , мерси за акъла.
Яя , това май ще ми свърши работа. Иначе временно сам го изоставил този учебник , че е за по-напреднали .
phrozencrew
Вто, 02.03.10, 20:36

RE: Една задачка на C++ да ми кажете къде бъркам в кода :)

” Опитай нещо от рода на:
__try{
.........
}
__catch(cin.fail()){ ... }
__catch( ... ){ ... }

Ах, че хубаво! Хич ме няма в ООП-то, но това май не е само за него. Не мога да не номинирам с полезен съвет.
Koko5, трябва да се вясваш по-често! Радвам се да те чета!
kookki
Вто, 02.03.10, 20:44

RE: Една задачка на C++ да ми кажете къде бъркам в кода :)

” Опитай нещо от рода на:
__try{
.........
}
__catch(cin.fail()){ ... }
__catch( ... ){ ... }

А това как се ползва ?

Koko , би ли го вмъкнал в кода на моята програмка ,за да си го обясня как се използва.
И не ми се смей на кода - аз толкова си мога.
И един въпрос към всички как се прави проверка , от моя вид без да се налага да се използва GOTO - само с допълнителни функции ли е възможно ?
#include <iostream>
#include <iomanip>
#include <windows>
#include <math>
using namespace std;
 
 
int main()
{
	double a,b,c,p,s,min,sr,max;
	cout<<"Programkata iz4islqva perimetara i liceto na tragalnik po ";
	cout<<"\n zadadeni tri strani"<<endl;
	cout<<"Vavedete parvata strana\n";
k1: cout<<"\t A = ";
	cin>>a;
	if (cin.fail()){
		cout<<"Vavedete korektni danni";
		cin.clear();
		cin.ignore();
		goto k1;
	}
	else if (a<=0){
		cout<<"Vavedete korektni danni";
		goto k1;
	}
	cout<<"Vavedete vtorata strna\n";
k2:	cout<<"\t B = ";
	cin>>b;
	if (cin.fail()){
		cout<<"Vavedete korektni danni";
		cin.clear();
		cin.ignore();
		goto k2;
	}
	else if (b<=0){
		cout<<"Vavedete korektni danni";
		goto k2;
	}
			cout<<"Vavedete tretata stsrana\n";
k3: cout<<"\t C = ";
	cin>>c;
		
	if (cin.fail()){
		cout<<"Vavedete korektni danni";
		cin.clear();
		cin.ignore();
		goto k3;
	}
	else if (c<=0){
		cout<<"Vavedete korektni danni";
		goto k3;
	}
	bool x1=((a+b<=c)||(a+c<=b)||(b+c<=a));
	if(x1){
		cout<<"Ne sa6testvuva triagalnik sas strani:"<<" "<<a<<" , "<<b<<" i "<<c<<endl;
		goto k1;
	}
	max=(a>(b>c?b:c)?a:b>c?b:c);
	min=(a<(b<c?b:c)?a:b<c?b:c);
	sr=a+b+c-min-max;
	bool x2=((a==b)&&(b==c));
	bool x3=(((a==b)&&(a!=c))||((a==c)&&(a!=b))||((b==c)&&(b!=a)));
	if(x2)
		cout<<"Triagalnika e ravnostranen i\n";
	else if(x3)
		cout<<"Triagalnika e ravnobedren i"<<endl;
	else
		cout<<"Triagalnika e raznostranen i"<<endl;
	if (fabs(pow(max,2))-(pow(min,2)+pow(sr,2))<1e-11)
		cout<<"pravoagalen ,"<<endl;
	else if (pow(max,2)>pow(min,2)+pow(sr,2))
		cout<<"tapoagalen ,"<<endl;
	else cout<<"ostroagalen ,"<<endl;
	p=(a+b+c)/2;
	s=sqrt(p*(p-a)*(p-b)*(p-c));
	cout<<"liceto mu e "<<setprecision(2)<<setiosflags(ios::fixed)<<s<<" cm. ,"<<endl;
	cout<<"a obikolkata e "<<p*2<<" cm."<<endl;
	char ch;
		cout<<"Kak misli6, dali 6te stane programist ot men?"<<endl;
		cin>>ch;
		while ((cin.fail())||((ch!='y')&&(ch!='Y')&&(ch!='n')&&(ch!='N'))){
			cout<<"Molq otgovorete s "<<"\'"<<"Y"<<"\'"<<" ili "<<"\'"<<"N"<<"\'!"<<endl;
			cin>>ch;
	}
		if ((ch=='y')||(ch=='Y'))
			cout<<"Blagodarq za doverieto! Mnogo mi se iska da e taka."<<endl;
		else 
			cout<<"Eeeeeeeeee, za6to taka?"<<endl;
		system("pause");
 
		return 0;
}

редактиран от kookki на 02.03.10 21:16
редактиран от kookki на 02.03.10 21:23
кака.лара
Вто, 02.03.10, 21:49
Абе по идея щом някоя конструкция се повтаря повече от 2 пъти направо си е кандидат за писане на отделна функция. GOTO-то може да го избегнеш с WHILE-блок. Нарочно не казвам как та да се измъчиш и да го разбереш

Номерът с TRY-CATCH си е същата гарга като GOTO ама казано малко срамежливо.
Срине ли ти се проверката няма значък как ще я обработиш. Чистата работа е да направиш проверка дето не се срива. Или се срива по много точно сметнат начин Хич не ми е ясно от кой зор напираш да слагаш cin.fail(). Тая гад връща "истина" даже да няма никакви валидни данни от клавиатурата. За файлове върши работа ама за клавиатера бахти.

Абе засега си е добре програмата, само да не е GOTO-то. Даже да ти кажа и с него си е добре. Който не се е плел в кълчищата на директни преходи няма да стане програмист пожизнено.

А да те светна. Не само `||` ами и `&&`-проверката действа така. Само дето провеките спират на първото условие с "неистина" /false/.

anonymous
Сря, 03.03.10, 00:04
@kookki всичко, което е от и за компютър е beta завинаги така,че няма по-правилен начин на писане . предполагам, че нещо от рода на:
try{
cin>>a;
}
catch(cin.fail()){
		cout<<"Vavedete korektni danni";
		cin.clear();
		cin.ignore();
		goto k1;
}
catch( ... ){
		cin.clear();
		goto k1;
}

ще работи. Идеята е за експеримент, не казвам, че трябва да е try

@phrozencrew точно си мислех кой ще ми изнесе една лекция по regexp (идеята е да е написан точно по определен начин), даже съм намислил пример, ама ще си поиграя утре сам

kookki
Сря, 03.03.10, 08:06

RE: Една задачка на C++ да ми кажете къде бъркам в кода :)

” GOTO-то може да го избегнеш с WHILE-блок. Нарочно не казвам как та да се измъчиш и да го разбереш

Какче , в края на кода точно така съм го направил , но при вавеждане на страните не ми се получаваше и вече знам , че е било заради неправилна употреба на && и || . Пък cin.fail() се натискам да го ползвам , защото само тази проверка съм научил засега за проверка дали входните данни отговарят на декларирания тип. Ще потърся малко за проверките. Много е тъпо, с тия проверки - ако няма такава и вместо цифра се ваведе буква, кода забива

kookki
Нед, 07.03.10, 18:18
Открих вариант за проверка на входните данни за съответствие без да се налага употреба на GOTO . Надявам се да е полезно за някой - гледам че освен мен има и други начинаещи във форума. И този вариант обаче ме дразни, защото ако въведеш 5 букви (примерно) ,на екрана ще се изведе 5 пъти : а= . Въпреки това е по-добър вариант.
int a ;
   do {
   cout<<"a=";
   cin>>a;
     if (cin.fail()) {
	   cin.clear();
	     char ch;
	     cin>>ch;
	 }
  } while(a<=0);

kookki
Нед, 21.03.10, 00:02
Малко е рано , но съм замислил шега на жената за 1-ви април ,въпроса е че не знам какво да напиша в кода ,че да стартира ексето на цял екран. В смисъл като ALt+Enter в командния промпт.

<1 2 3 4 5 6 7 8 9 >

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.