|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Помогите решить задачу по С++ |
|
C/C++ - [решено] Помогите решить задачу по С++
|
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Titanium, сложно подсказывать, если ты, именно ты, человек который просит помощи, не понимаешь что ты просишь. Ты отказываешься, как я понял, понимать принципы решения задачи. Через призму программного кода понять, почему делается так а не иначе, сложнее вдвойне. Кроме того, я задаю вопросы не просто так, а для пользы дела. Для того чтобы твои мысли облачить в код, а не чужие.
Кроме определения натуральных чисел и псевдо "строгой возрастающей/убывающей последовательности цифр в числе" ты не дал. В чем тогда необходима помощь? P.S. Приложи хоть маленько усилий, ответь на поставленные вопросы! Здесь никто не отказывается тебе помочь, наоборот, все только за. Ты пока (без обид) палец о палец не ударил, постарайся хоть чуть-чуть. Это окупиться сторицей. |
------- Отправлено: 17:47, 24-03-2011 | #211 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать Ну если я не знаю откуда я возьму ответы на поставленные вопросы. В программе мне не понятно как преобразовать последовательность в исходный код. Со всем остальным я разберусь самостоятельно.
|
Отправлено: 21:45, 24-03-2011 | #212 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Titanium:
Цитата Titanium:
Так и быть, вечером накидаю черновик, разбирайся на здоровье. |
||
------- Отправлено: 16:32, 25-03-2011 | #213 |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать какая формула этой последовательности? И какие там использовать переменные?
|
Отправлено: 18:08, 25-03-2011 | #214 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Возрастающая последовательность - когда каждый следующий элемент не менее чем предыдущий, строго возрастающая - более предыдущего.
Задача элементарная, т.к. вам надо найти натуральные числа, а все они являются целыми и положительными, используйте переменные типа unsigned integer. Алгоритм простейший: задаете цикл от 1 до вашего числа и проверяете для каждого значения удовлетворяет ли оно условию. положим у вас задано некое N, тогда. for(UINT i=1; i<N;i++) { if( SV(i) || SU(i) ) printf("%d\n",i); }; здесь SV и SU - функции вычисляющие является ли запись числа строго возрастающей или строго убывающей последовательностью. вся сложность реализовать 2 функции, возвращающие true если число является соответственно возрастающей или убывающей последовательностью и объявленные следующим образом: bool SV(unsigned integer N); bool SU(unsigned integer N); Для их реализации вам необходимо знать позиционные системы счисления. Ну а чтобы преобразовать последовательность цифр записи числа в позиционной системе счисления в само число надо найти сумму произведений эих цифр на степени основания системы счисления. последовательность A B C преобразуется в число по формуле A*N^2+B*N^1+C*N^0, где N - основание системы счисления. Обратная процедура выполняется по той же формуле. |
------- Отправлено: 10:26, 28-03-2011 | #215 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Помогите пожалуйста ошибку исправить.
Код программы с данного форума. include <iostream> using namespace std; #include <stdlib.h> #include <math.h> //Вывод отладочных сообщений #define debug class CMatrixException{ char ne;// ne='a' Не возможно выделить память. // ne='+' Сложение не возможно // ne='-' Вычитание не возможно // ne='*' Уможение не возможно // ne='/' Division isn't possble // ne='d' Конвертация в тип double не возможна // ne='=' Невозможно прировнять матрицу // ne='0' Zero division matrix/double // ne='i' Index out of range public: CMatrixException(char c){ne=c;} void PrintMessage(){ cout<<"\tERROR! >>> "; switch(ne){ case 'a':cout<<"Can't allocate memory"<<endl;break; case '+':cout<<"Addition isn't possible"<<endl;break; case '-':cout<<"Substruction isn't possible"<<endl;break; case '*':cout<<"Multiplication isn't possible"<<endl;break; case '/':cout<<"Division isn't possble"<<endl;break; case 'd':cout<<"Conversion to double isn't possible"<<endl;break; case '=':cout<<"Can't give to matrix"<<endl;break; case '0':cout<<"Zero division matrix/double"<<endl;break; case 'i':cout<<"Index out of range"<<endl;break; case 'T':cout<<"Transporent isn't possible"<<endl;break; case 'I':cout<<"Invertation isn't possible"<<endl;break; default :cout<<"Unknown error"<<endl; } } }; class Matrix { private: int rows, cols; public: double* p; //Конструктор Matrix(int, int); Matrix(int, int,double,...); Matrix(int, int, int,...); Matrix(double); // Функция создает матрицу размеров 1 Х 1, m(0,0)=i Matrix(int); // Функция создает матрицу размеров 1 Х 1, m(0,0)=i Matrix(Matrix const &); //Деструктор ~Matrix(){if(p!=NULL)delete[]p;} // Matrix const& operator=(Matrix const&); //Конвертация в тип double operator double()const; //Опрация сложения friend double operator+(double,Matrix const&); double operator+(double d){return d+*this;} double operator+( int i){return double(i)+*this;} friend double operator+( int i,Matrix const&m){return double(i)+m;} Matrix Matrix::operator +(const Matrix &) const; Matrix const& operator+()const{return*this;}//unary + Matrix& operator+=(Matrix const&a){*this=*this+a;return*this;} //Опирация вычитания friend double operator-(double,Matrix const&); double operator-(double d)const{return -(d-*this);} double operator-( int i)const{return *this-double(i);} friend double operator-(int i,Matrix const&m){return -(m-i);} Matrix operator-(Matrix const&)const;//binary - Matrix& operator-=(Matrix const&a){*this=*this-a;return*this;} Matrix operator-()const;//unary - //Опирация умножения Matrix& Matrix::operator*=(Matrix const&a){*this=(*this)*a;return*this;} Matrix operator*(double)const; friend Matrix operator*(double d,Matrix const&a){return a*d;} Matrix& operator*=(double d){*this=*this*d;return*this;} Matrix operator*(Matrix const&)const; //Division operators Matrix operator/(double d)const{ if(d==0)throw CMatrixException('d'); return (1./d)*(*this); } Matrix& operator/=(double d){*this=*this/d;return*this;} //Transposition operator Matrix operator*()const; // friend Matrix T(Matrix const&a){return *a;} //Доступ к элементам матрицы double& Matrix::operator()(int i, int j)const; //Транспонирование матрицы Matrix T(Matrix const&a)const; //Обращение матрицы Matrix Inv(Matrix const&a)const; //Вывод матрицы на экран void Print()const; //Возврат кол-ва столбцов и строк матрицы int GetRows()const{return rows;} int GetCols()const{return cols;} }; void Print(Matrix const&); Matrix::Matrix(int m,int n,double d,...) { rows = m; cols = n; double*s=&d; p=new double[rows*cols]; if(p==NULL){ throw CMatrixException('a'); } for (int i=0;i<rows*cols;i++,++s)p[i]=*s; } Matrix::Matrix(int m,int n, int d,...) { rows = m; cols = n; int*s=&d; p=new double[rows*cols]; if(p==NULL){ throw CMatrixException('a'); } for (int i=0;i<rows*cols;i++,++s)p[i]=*s; } Matrix::Matrix(Matrix const & a) { rows = a.rows; cols = a.cols; p=new double[rows*cols]; if(p==NULL){ throw CMatrixException('a'); } for (int i=0;i<rows*cols;i++)p[i]=a.p[i]; } Matrix::Matrix(int m, int n){ rows = m; cols = n; p=new double[rows*cols]; if(p==NULL){ throw CMatrixException('a'); } } Matrix::Matrix(int i){ rows = 1; cols = 1; p=new double[1]; if(p==NULL){ throw CMatrixException('a'); } p[0]=i; } Matrix::Matrix(double d){ rows = 1; cols = 1; p=new double[1]; if(p==NULL){ throw CMatrixException('a'); } p[0]=d; } Matrix const& Matrix::operator=(Matrix const & a){ if(rows!=a.rows||cols!=a.cols){ throw CMatrixException('='); } for (int i=0;i<rows*cols;i++)p[i]=a.p[i]; return*this; } Matrix::operator double()const{ if(rows!=1||cols!=1){ throw CMatrixException('d'); } return (*this)(0,0); } double operator+(double d,Matrix const&m){ if(m.rows!=1||m.cols!=1){ throw CMatrixException('+'); } return d+m(0,0); } Matrix Matrix::operator+(Matrix const&a)const{ if(rows!=a.rows||cols!=a.cols){ throw CMatrixException('+'); } Matrix c(*this); for(int i=0;i<rows*cols;i++)c.p[i]+=a.p[i]; return c; } Matrix Matrix::operator-()const{ Matrix a(rows,cols); for(int i=0;i<rows*cols;i++)a.p[i]=-p[i]; return a; } double operator-(double d,Matrix const&m){ if(m.rows!=1||m.cols!=1){ throw CMatrixException('-'); } return d-m(0,0); } Matrix Matrix::operator-(Matrix const&a)const{ if(rows!=a.rows||cols!=a.cols){ throw CMatrixException('-'); } Matrix c(*this); for(int i=0;i<rows*cols;i++)c.p[i]-=a.p[i]; return c; } Matrix Matrix::operator*(Matrix const& a)const{ if(cols!=a.rows){ throw CMatrixException('*'); } Matrix c(rows,a.cols); int i=0,j,k; for(;i<rows;++i){ for(j=0;j<a.cols;++j){ c(i,j)=0; for(k=0;k<cols;++k)c(i,j)+=(*this)(i,k)*a(k,j); } } return c; } Matrix Matrix::operator*(double d)const{ Matrix c(*this); for(int i=0;i<rows*cols;i++)c.p[i]*=d; return c; } double& Matrix::operator()(int i, int j)const{ if(i>=rows || j>=cols || i<0 || j<0){ throw CMatrixException('i'); } return p[i*cols+j]; } void Print(Matrix const& m){m.Print();} Matrix Matrix::operator*()const{ Matrix a(cols,rows); int i=0,j; for(;i<rows;++i) for(j=0;j<cols;++j)a(j,i)=(*this)(i,j); return a; } void Matrix::Print()const{ int i=0,j; cout<<endl << "Matrix>\t "; for (;i<rows;i++){ ; for (j=0;j<cols;++j)cout<<(*this)(i,j)<<" "; cout<<endl <<"\t "; } cout<<endl; } Matrix Matrix::T(Matrix const&a)const{ if(a.rows!=a.cols){ throw CMatrixException('T'); } Matrix c(*this); for(int i=0;i<rows;i++) for(int j=0;j<cols;j++) c(i,j)=a(j,i); return c; } int matr_inv_gause(double *a, int n) { double e1, d, *b, *c, y, w, p; ; int i, j, k, *z; e1=1.e-6; d=1; z= new int[n]; c= new double[n]; b= new double[n]; for(i=0; i<n; i++) *(z+i)=i; for(i=0; i<n; i++) { k=i; y=*(a+i*n+i); if(i+1 <= n ) for(j=1+i; j<n; j++) { w=*(a+n*i+j); if(fabs(w)>fabs(y)) { k=j; y=w; } } d=d*y; //проверка на близость к вырождению матрицы if(fabs(y)<e1) return 2; y=1./y; for(j=0; j<n; j++) { *(c+j)=*(a+n*j+k); *(a+n*j+k)=*(a+n*j+i); *(a+j*n+i)=-(*(c+j))*y; *(b+j)=*(a+i*n+j)*y; *(a+i*n+j)=*(b+j); } j=*(z+i); *(z+i)=*(z+k); *(z+k)=j; *(a+i*n+i)=y; for(k=0; k<n; k++) if(k != i) for(j=0; j<n; j++) if(j != i) *(a+k*n+j)=*(a+k*n+j)-(*(b+j))*(*(c+k)); } for(i=0; i<n; i++) while(1) { k=*(z+i); if(k == i) break; for(j=0; j<n; j++) { w=*(a+i*n+j); *(a+i*n+j)=*(a+k*n+j); *(a+k*n+j)=w; } p=*(z+i); *(z+i)=*(z+k); *(z+k)=(int)p; d=-d; } delete[] z; delete[] b; delete[] c; return 0; } Matrix Matrix::Inv(Matrix const&a)const{ if(a.rows!=a.cols){ throw CMatrixException('I'); } if(matr_inv_gause(a.p,rows)!=0){ throw CMatrixException('I'); } return a; } //Главная функция программы void main(){ try{ int N,M; // Ввод размера матрицы А(N*M) cout << "----[Matrix A(N,M)]----\n\n"; cout << "Enter size\n N> "; cin >> N; cout << " M> "; cin >> M; Matrix A(N,M); //Создаем матрицу A размером N*M //Ввод содержимого матрицы (через пробел или Enter) cout << "Enter matrix elements:\n"; int i; for(i=0; i<N*M; i++){ cin >> A.p[i]; } A.Print();//печаем матрицу А cout << "-----------------------\n\n\n"; // Ввод размера матрицы B(N*M) cout << "----[Matrix B(N,M)]----\n\n"; cout << "Enter size\n N> "; cin >> N; cout << " M> "; cin >> M; Matrix B(N,M); //Создаем матрицу В размером N*M cout << "Enter operant elements:\n"; for(i=0; i<N*M; i++){ cin >> B.p[i]; } Print(B);//печаем матрицу В cout << "-----------------------\n\n"; int ch=0; while(ch!=9){ //Выбор операций над матрицами cout << "################################\n"; cout << "# Chouce operation:"; cout << endl << "# 1. A+B"; cout << endl << "# 2. A-B"; cout << endl << "# 3. A*B"; cout << endl << "# 4. Transponent A"; cout << endl << "# 5. Invert A"; cout << endl << "# 9. EXIT" << endl << "# >"; //Выход из программы cin >> ch; if(ch==1) Print(A+B); //Сложение if(ch==2) Print(A-B); //Вычитание if(ch==3) Print(A*B); //Умножение if(ch==4) Print(A.T(A)); //Транспонирование if(ch==5) Print(A.Inv(A)); //Обращение } } catch(CMatrixException Me){ Me.PrintMessage(); } } 1>c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(65) : error C2666: Matrix::operator +: для 6 перегрузок есть подобные преобразования 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(63): может быть 'Matrix Matrix::operator +(const Matrix &) const' 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(61): или 'double Matrix::operator +(int)' 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(60): или 'double Matrix::operator +(double)' 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(62): или 'double operator +(int,const Matrix &)' [найдено при поиске с зависимостью от аргументов] 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(59): или 'double operator +(double,const Matrix &)' [найдено при поиске с зависимостью от аргументов] 1> или 'встроенный оператор C+++(double, double)' 1> при попытке сопоставить список аргументов '(Matrix, const Matrix)' 1> примечание: неоднозначность может быть вызвана корректировкой квалификации (const/volatile) 1>c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(404) : error C2666: Matrix::operator +: для 6 перегрузок есть подобные преобразования 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(63): может быть 'Matrix Matrix::operator +(const Matrix &) const' 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(61): или 'double Matrix::operator +(int)' 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(60): или 'double Matrix::operator +(double)' 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(59): или 'double operator +(double,const Matrix &)' [найдено при поиске с зависимостью от аргументов] 1> c:\users\morgenglow\documents\visual studio 2008\projects\seco\seco\se.cpp(62): или 'double operator +(int,const Matrix &)' [найдено при поиске с зависимостью от аргументов] 1> или 'встроенный оператор C+++(double, double)' 1> при попытке сопоставить список аргументов '(Matrix, Matrix)' 1> примечание: неоднозначность может быть вызвана корректировкой квалификации (const/volatile) |
Отправлено: 21:41, 09-04-2011 | #216 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Существует неоднозначность операторов в 2-х местах,
в строке Matrix& operator+=(Matrix const&a){*this=*this+a;return*this;} и в строке if(ch==1) Print(A+B);//Сложение Это связано с тем, что, дейтсвительно, у вас объявлено множество операторов +, хотя и с различными параметрами, но так же у вас объявлена ф-я конвертации в тип double, таким образом компилятор остается в недоумении применять оператор сложения к матрице или преобразовать ее к типу double и затем применить этот оператор. само же приведение к типу double у вас возврат элемента 0,0 или выброс исключения. Мне кажется что от этого приведения можно отказаться, а для сохранения функциональности определить ф-ю, скажем так: double Matrix::ToDouble() { if(rows!=1||cols!=1){ throw CMatrixException('d'); } return (*this)(0,0); }; Если я не прав, поправте, пожалуйста. |
------- Отправлено: 12:14, 13-04-2011 | #217 |
Новый участник Сообщения: 17
|
Профиль | Отправить PM | Цитировать помогите пожалуйста решить задачу.
составить программу обработки картотеки содержащей сведения о студентах группы: фамилия имя отчество средний балл стипендия Для представления картотеки в ОП ПЭВМ воспользоваться структурой данных-циклический двунаправленный список(ЦДС) В программе предусмотреть: Поиск элемента ЦДС по ключу Вставку элемента в ЦДС Удаление элемента из ЦДС Вывод картотеки на экран буду очень признателен за помощь) |
Отправлено: 14:58, 13-04-2011 | #218 |
Ветеран Сообщения: 601
|
Профиль | Отправить PM | Цитировать Необходима помощь в С++, программировать ничего не надо.
У меня есть курсач с инета, а я только начинаю вникать в суть дела. Не могли бы вы расписать как можно подробнее, что к чему на первых 6 страницах (там много повторяющихся действий), весь код привёл, т.к. вдруг понадобиться для общего понимания. http://rghost.ru/5198051 На ru-board тоже попросил, так что не сочтите за наглость |
Отправлено: 15:52, 15-04-2011 | #219 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать DennyD, структуры данных проходили? Берешь структуру, вписываешь в нее все что необходимо, не забываешь про двунаправленный список.
Отдельные поля для управления списком (удаление, создание и т.п.) если сразу все мысленно охватить сложно, рисуй схемки на черновиках, это не зазорно. Структура есть, инструментарий для работы со структурой есть, дальше организуешь выборку по требуемым значениям и дело в шляпе. Тут ничего сложного, просто надо внимательно прописать все варианты работы с типизированными данными. cbv, ткну пальцем в небо. Может быть кириллическая кодировка двухбайтовая? А массив однобайтовый? Кроме того не ясно, где заканчивается цикл, какой тип имеют переменные, что помещается в них в правильном и "неправильном" случаях. momo2000, а тематику то можно было и рассказать. Перевод С++ кода в ассемблер. int main() { //Загрузка ключевых слов. //Начало чтения входного файла. //Начало создания лексем //Начало генерации кода } Т.к. кроме перевода, идет структурный анализ текста. Соотв. формируются ошибки о пропущенных аргументах например. Когда структура сформирована, идет банально формирование ассемблерного кода вставками и подстановками. |
------- Отправлено: 16:19, 15-04-2011 | #220 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Помогите решить задачу | Urann | Программирование и базы данных | 11 | 14-05-2013 11:44 | |
Разное - Помогите решить задачу в Excel | Dgonny | Программирование и базы данных | 2 | 16-11-2009 04:11 | |
C/C++ - Помогите решить задачу | zdughi | Программирование и базы данных | 1 | 01-05-2009 06:03 | |
помогите решить задачу | snikers | Программирование и базы данных | 2 | 27-08-2004 01:57 | |
помогите решить задачу | Guest | Программирование и базы данных | 2 | 21-05-2004 11:23 |
|