Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2009, 17:20   #1
Gram
 
Регистрация: 02.12.2008
Сообщений: 6
По умолчанию Проблема с задачами С++

Уважаемые эксперты!
Памагите разобраться.... надо чтобы при вводе любого математического выражения проверялось правильное написание скобок... всмысле того что если скобка открыта то она длжна быть закрыта где то в выражении ... я сделал так но при вводе )))((( прога показывает что верно ... надо сделать проверку на равенство открывшихся скобок и закрывшихся...

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int flag=0;
int z=RichEdit1->Lines->Text.Length()-2;

for (int i=1; i<=z; i++)
{
if (RichEdit1->Lines->Strings[0][i] =='(')
flag--;

if (RichEdit1->Lines->Strings[0][i] ==')')
flag++;

if (RichEdit1->Lines->Strings[0][i] =='[')
flag--;

if (RichEdit1->Lines->Strings[0][i] ==']')
flag++;


}

if (flag==0)
ShowMessage("Правильно");
else
ShowMessage("Не правильно");


}

Да и еще есть проблема...
Задача
Изобразить на экране N кривых-эвольвент, образованных точкой, лежащей на прямой, обкатывающейся по окружности без скольжения. Каждая эвольвента строится при обкатывании по дуге в 2пи/N угловых градусов.
как ваааще делать ее ???? ума не преложу... можете подсказать..?(очень прошу )
С уважением Дмитрий.
Gram вне форума Ответить с цитированием
Старый 03.05.2009, 17:42   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
надо чтобы при вводе любого математического выражения проверялось правильное написание скобок..
У вас проверяется балланс скобок, но не правильность расстановки.

Вот вариант для консоли. Переделайте как вам надо.
Код:
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;

const char s1[2]={'(',')'};
const char s2[2]={'[',']'};

int main()
{
int s1c=0,s2c=0;
string str;
int i;
bool err=false;
bool s1b=false,s2b=false;

cout<<"Vvedite stroku: \n";
cin>>str;

for(i=0;i<str.length();i++)
 {
  if(str[i]==s1[0]) 
   {
    s1c++;
    s1b=true;
    s2b = false;
   }
  if(str[i]==s1[1])
   {
    s1c--;
    if(s2b==true) err=true;
    s1b=false;
   }
  if(str[i]==s2[0]) 
   {
    s2c++;
    s2b = true;
    s1b = false;
   }
  if(str[i]==s2[1]) 
   {
    s2c--;
    if(s1b==true) err=true;
    s2b=false;
   }
 }

if(s1c==0 && s2c==0) cout<<"Balans skobok ne narushen\n";
else 
 {
  if(s1c!=0)
   {
    cout<<"Narushen balans skobok tipa '"<<s1[0]<<s1[1]<<"'\n";
    if(s1c<0) cout<<"Izbytok '"<<s1[1]<<"'("<<-s1c<<")\n";
    else cout<<"Izbytok '"<<s1[0]<<"'("<<s1c<<")\n";
   }
  if(s2c!=0)
   {
    cout<<"Narushen balans skobok tipa '"<<s2[0]<<s2[1]<<"'\n";
    if(s2c<0) cout<<"Izbytok '"<<s2[1]<<"'("<<-s2c<<")\n";
    else cout<<"Izbytok '"<<s2[0]<<"'("<<s2c<<")\n";
   }
 }

if(err) cout<<"\nSkobki rasstavleny neverno!\n"; 

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.05.2009, 18:30   #3
Gram
 
Регистрация: 02.12.2008
Сообщений: 6
По умолчанию

Sazary Спасибо тебе огромное ...
Если можеш помаги со второй задачей....
Gram вне форума Ответить с цитированием
Старый 03.05.2009, 18:59   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Gram
Изобразить на экране N кривых-эвольвент, образованных точкой, лежащей на прямой, обкатывающейся по окружности без скольжения. Каждая эвольвента строится при обкатывании по дуге в 2пи/N угловых градусов.
Нарисуйте ЭТО и прикрепите сюда. Что-то мне трудно представить.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.05.2009, 12:45   #5
Gram
 
Регистрация: 02.12.2008
Сообщений: 6
По умолчанию

Gram вне форума Ответить с цитированием
Старый 04.05.2009, 13:35   #6
Gram
 
Регистрация: 02.12.2008
Сообщений: 6
По умолчанию

http://ru.wikipedia.org/wiki/%D0%AD%...BD%D1%82%D0%B0
Gram вне форума Ответить с цитированием
Старый 04.05.2009, 13:38   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Тогда и это добавлю: http://ru.wikipedia.org/wiki/Эвольвента_окружности

Gram, собственно, все формулы, вроде, даны. Вы приступайте. Что непонятно - спрашивайте.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 09.02.2011, 20:20   #8
Liceist
Новичок
Джуниор
 
Регистрация: 09.02.2011
Сообщений: 1
По умолчанию

Здравствуйте, господа. Я в С++ ламер, так что сильно не пинайте. Но хочу помощи с одной задачей.

Вообщем она должна искать корень многочлена некой степени(в нашем случае только 3,4,5). А корни могут быть дробными и целыми. Так вот. Сначала в программу вводится степень, а потом коэффициенты в порядке убывания степени. Но проблемма в том, что при НЕКОТОРЫХ примерах, в результате появляется две различных дроби. А потом семерка мне пишет, что работа программы прекращена. За своей неопытностью, причину найти не могу. Но могу только догадываться, что при делении получаются не целые числа и программа их округляет. Вот и получается неправильный ответ. Но что с этим делать - не знаю. Подскажите пожалуйста.

Вот код:

Код:
#include<iostream>
#include<vector>
using namespace std;
int main(){
	int x,y,z,f,n,e,step;
	int u=0;
	int uspeh=0;
	cout<<"vvedite stepen' mnogochlena"<<endl;
	cin>>step;
	if(step==3){
		cout<<"vvedite koeficienty mnogjchlena nachinaya c koeficienta vyshey stepeni"<<endl;
		cin>>x>>y>>z>>f;
		int a=abs(f);
		int f1=2*a;
		vector<int> del(f1);
		for(int t=1;t<=a;t++){
			int b=a%t;
			if(b==0){
				del[u]=t;
				del[u+1]=t*(-1);
				u=u+2;
			}
		}
		for(int c=0;c<=u;c++){
			int i=del[c];
			int s=(x*i*i*i)+(y*i*i)+(z*i)+f;
			if(s==0){
				uspeh=1;
				cout<<"celiy koren="<<i<<endl;
			}
		}
		if(uspeh==0){
			int v=0;
			int q=x;
			if(q<0){
				q=q*(-1);
			}
			int q1=2*q;
			vector<int> del2(q1);
			for(int d=1;d<=q;d++){
				int w=q%d;
				if(w==0){
					del2[v]=d;
					v++;
				}	
			}
			for(int h=0;h<=v;h++){
				int p=del2[h];
				for(int g=0;g<=u;g++){
					int j=del[g];
					int sum=((x*j*j*j)/(p*p*p))+((y*j*j)/(p*p))+((z*j)/p)+f;
					if(sum==0){
						uspeh=1;
						cout<<"drobniy koren="<<j<<"/"<<p<<endl;
					}
				}
			}	
		}
	}
	if(step==4){
		cout<<"vvedite koeficienty mnogjchlena nachinaya c koeficienta vyshey stepeni"<<endl;
		cin>>x>>y>>z>>f>>n;
		int a=abs(n);
		int n1=2*a;
		vector<int> del(n1);
		for(int t=1;t<=a;t++){
			int b=a%t;
			if(b==0){
				del[u]=t;
				del[u+1]=t*(-1);
				u=u+2;
			}
		}
		for(int c=0;c<=u;c++){
			int i=del[c];
			int s=(x*i*i*i*i)+(y*i*i*i)+(z*i*i)+(f*i)+n;
			if(s==0){
				uspeh=1;
				cout<<"celiy koren="<<i<<endl;
			}
		}
		if(uspeh==0){
			int v=0;
			int q=x;
			if(q<0){
				q=q*(-1);
			}
			int q1=2*q;
			vector<int> del2(q1);
			for(int d=1;d<=q;d++){
				int w=q%d;
				if(w==0){
					del2[v]=d;
					v++;
				}	
			}
			for(int h=0;h<=v;h++){
				int p=del2[h];
				for(int g=0;g<=u;g++){
					int j=del[g];
					int sum=((x*j*j*j*j)/(p*p*p*p))+((y*j*j*j)/(p*p*p))+((z*j*j)/(p*p))+((f*j)/p)+n;
					if(sum==0){
						uspeh=1; 
						cout<<"drobnye korni:"<<j<<"/"<<p<<endl;
					}
				}
			}	
		}
	}
		if(step==5){
		cout<<"vvedite koeficienty mnogjchlena nachinaya c koeficienta vyshey stepeni"<<endl;
		cin>>x>>y>>z>>f>>n>>e;
		int a=e;
		if(a<0)
			a=a*(-1);
		int e1=2*a;
		vector<int> del(e1);
		for(int t=1;t<=a;t++){
			int b=a%t;
			if(b==0){
				del[u]=t;
				del[u+1]=t*(-1);
				u=u+2;
			}
		}
		for(int c=0;c<=u;c++){
			int i=del[c];
			int s=(x*i*i*i*i*i)+(y*i*i*i*i)+(z*i*i*i)+(f*i*i)+(n*i)+e;
			if(s==0){
				uspeh=1;
				cout<<"celiy koren="<<i<<endl;
			}
		}
		if(uspeh==0){
			int v=0;
			int q=x;
			if(q<0){
				q=q*(-1);
			}
			int q1=2*q;
			vector<int> del2(q1);
			for(int d=1;d<=q;d++){
				int w=q%d;
				if(w==0){
					del2[v]=d;
					v++;
				}	
			}
			for(int h=0;h<=v;h++){
				int p=del2[h];
				for(int g=0;g<=u;g++){
					int j=del[g];
					int sum=((x*j*j*j*j*j)/(p*p*p*p*p))+((y*j*j*j*j)/(p*p*p*p))+((z*j*j*j)/(p*p*p))+((f*j*j)/p*p)+((n*j)/p)+e;        
					if(sum==0){
						uspeh=1; 
						cout<<"drobnye korni:"<<j<<"/"<<p<<endl;
					}
				}
			}	
		}
	}
	return 0;
}
Конкретно, не работает при вводе степени 3 и коэффициентов 24 -26 9 -1 именно в такой последоваетльности.

Последний раз редактировалось Liceist; 09.02.2011 в 20:24.
Liceist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с задачами щдуп Паскаль, Turbo Pascal, PascalABC.NET 1 26.06.2008 18:39