Войти

Показать полную графическую версию : [решено] Помогите решить задачу по С++


Страниц : 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16

Titanium
21-03-2011, 22:42
Помогите, пожалуйста сделать задачу. Найти все натуральные числа не превосходящие заданного n , десятичная запись которых есть строго возрастающая или строго убывающая последовательность цифр.

lxa85
21-03-2011, 22:57
Titanium, давай по порядку:
Простые вопросы, обязательные к ответу:
Что такое "натуральное число" и чем оно отличается от ненатурального?
Как "разбить" число на цифры? Что такое разряд числа, скольки разрядная система применяется в нашей повседневной жизни, как цифру одного разряда преобразовать в цифру другого разряда?
Что такое "строго возрастающая/убывающая последовательность"? Какие к ней предъявляются требования? Чем они отличаются от "не строгих" последовательностей и от "не последовательностей" вообще?
Как, в каком порядке, по какому закону надо "перебирать" натуральные числа не превосходящие n?

Сложные вопросы, желательны к ответу:
Какие парадигмы программирования необходимо использовать?
Линейное программирование, программирование с использованием циклов, использование процедур и функций, объекты (О.О)?

Titanium
22-03-2011, 21:00
натуральные числа это числа воникающие при счете. ненатуральные это числа дробные и отрицательные. Разряд числа это как бы место цифры в числе. В наше время применяются 32р и 64р. Строго возрастающая последовательность это последовательность, элементы которой с увеличением номера не убывают или не возрастают.
Что еще не изучал не могу ответить.
Программу надо написать на с++ в borland

lxa85
23-03-2011, 00:54
Titanium, Ответы желательно приводить построчно, так их легче читать. Желательно приводить несколько примеров.

Натуральные числа говоришь... Число 0 натуральное?
Ладно, с разрядностью систем вопрос был несколько некорректен, спрошу так. Какое число лежит в основе современной системы счисления, применяемой в обыденной жизни человека?
С как бы позицией цифры в числе понятно, на всякий случай - "Позиционные системы счисления".
Как преобразовать или перенести цифру из разряда в разряд? Как объяснить ребенку разложение числа 6238 в разряды? Есть для этого какой-нибудь относительно универсальный алгоритм?
О последовательностях. Чем "строго возрастающая" последовательность отличается от просто "возрастающей"?
К чему следует отнести последовательности 1122, 1259, 5555?
Строго возрастающая последовательность это последовательность, элементы которой с увеличением номера не убывают или не возрастают. »
Так в "строго возрастающей" не убывают или не возрастают? :)
Способ перебора чисел заданного диапазона остался без ответа.

Titanium
23-03-2011, 01:14
На эти вопросы я ответы не знаю. Я в колледже учусь на втором курсе. Обратился за помощью, потому что препод ничему не научил, а спрашивать будет сделанную программу. Если не сможет никто помочь так и напишите.

lxa85
23-03-2011, 01:25
Ох ты ж господи... это математика за 5ый класс. Уйди позорище! В колледже на втором курсе. Ты как туда вообще поступить то сумел?
Давай так. Я этого ответа не видел. А ты сейчас садишься, выключаешь компьютер и думаешь, хорошо думаешь. Можешь даже лечь спать и утром еще раз подумать. Выписываешь все ответы на листочек, читаешь и проверяешь ответы дважды. А завтра напишешь их здесь. А я почитаю. А там посмотрим как фишка с настроением ляжет.

Titanium
23-03-2011, 01:57
Это обязательно нужно? Это математика за 5 класс????? Одну последовательность в 9 начинают изучать.

А вы, что преподаватель?

Titanium
23-03-2011, 02:41
насчет последовательностей: возрастающая эта такая последовательность, в которой каждый следующий элемент превышает предыдущий, убывающей, если каждый элемент этой последовательности превышает следующий за ним.
0 не натуральное число.
ребенку можно объяснить примерно так, я думаю, 6000+200+30+8
1122 и 1259 - возрастающие. А 5555 - не возрастает и не убывает, потому что состоит из одного числа

lxa85
24-03-2011, 13:46
А вы, что преподаватель? »
Ага.
Хочешь, я покажу тебе магию? :) Это не обычная магия, смотри.
возрастающая эта такая последовательность, в которой каждый следующий элемент превышает предыдущий ...
1122 и 1259 - возрастающие »
по определению возрастающей последовательности следует заключить, что условия распространяются как на всю последовательность, так и на любую из ее частей. Потому что "каждый следующий".
значит возрастающая последовательность 1122, будет также возрастающей при 11122 и при 1111111222 и даже при 1111222244445555 и т.д.
принимая во внимание выше названный вывод, следует положить, что составные части 111122, 2233, 334444 и 5555 также являются возрастающими последовательностями.
Аналогично можно доказать, что составные части убывающей последовательности 5544332211, а именно 554, 433, 2211 также являются убывающими. Еще раз расширив последовательность и взяв составную часть, получится, что 5555 является убывающей последовательностью, т.к. входит в общую убывающую последовательность 555554444333221.

Доказано, что 5555 являясь возрастающей последовательностью, при этом являясь составной частью убывающей!
Странно, ничего не перепутал. Titanium, подскажи, в чем ошибка?

Titanium
24-03-2011, 16:51
ну так мне кто-нибудь подскажет с программой или нет?

lxa85
24-03-2011, 17:47
Titanium, сложно подсказывать, если ты, именно ты, человек который просит помощи, не понимаешь что ты просишь. Ты отказываешься, как я понял, понимать принципы решения задачи. Через призму программного кода понять, почему делается так а не иначе, сложнее вдвойне. Кроме того, я задаю вопросы не просто так, а для пользы дела. Для того чтобы твои мысли облачить в код, а не чужие.
Кроме определения натуральных чисел и псевдо "строгой возрастающей/убывающей последовательности цифр в числе" ты не дал.
В чем тогда необходима помощь?

P.S. Приложи хоть маленько усилий, ответь на поставленные вопросы! Здесь никто не отказывается тебе помочь, наоборот, все только за. Ты пока (без обид) палец о палец не ударил, постарайся хоть чуть-чуть. Это окупиться сторицей.

Titanium
24-03-2011, 21:45
Ну если я не знаю откуда я возьму ответы на поставленные вопросы. В программе мне не понятно как преобразовать последовательность в исходный код. Со всем остальным я разберусь самостоятельно.

lxa85
25-03-2011, 16:32
Ну если я не знаю »
человек не обязан знать все. Поступая куда-либо учится, де факто человек не знает всей программы обучения. Чтобы научиться, человек обязан думать! Рассуждать, сопоставлять, анализировать и делать выводы. Соотв. я всем силами подталкиваю тебя к этому. В программе мне не понятно как преобразовать последовательность в исходный код. »
Перефразируй пожалуйста или задай вопрос еще раз, только в развернутой форме. Что куда преобразовать??
Так и быть, вечером накидаю черновик, разбирайся на здоровье.

Titanium
25-03-2011, 18:08
какая формула этой последовательности? И какие там использовать переменные?

Hilaly
28-03-2011, 10:26
Возрастающая последовательность - когда каждый следующий элемент не менее чем предыдущий, строго возрастающая - более предыдущего.

Задача элементарная, т.к. вам надо найти натуральные числа, а все они являются целыми и положительными, используйте переменные типа 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 - основание системы счисления.
Обратная процедура выполняется по той же формуле.

Morgen
09-04-2011, 21:41
Помогите пожалуйста ошибку исправить.
Код программы с данного форума.

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)

Hilaly
13-04-2011, 12:14
Существует неоднозначность операторов в 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);
};
Если я не прав, поправте, пожалуйста.

DennyD
13-04-2011, 14:58
помогите пожалуйста решить задачу.

составить программу обработки картотеки содержащей сведения о студентах группы:
фамилия
имя
отчество
средний балл
стипендия
Для представления картотеки в ОП ПЭВМ воспользоваться структурой данных-циклический двунаправленный список(ЦДС)
В программе предусмотреть:
Поиск элемента ЦДС по ключу
Вставку элемента в ЦДС
Удаление элемента из ЦДС
Вывод картотеки на экран


буду очень признателен за помощь)

momo2000
15-04-2011, 15:52
Необходима помощь в С++, программировать ничего не надо.
У меня есть курсач с инета, а я только начинаю вникать в суть дела.
Не могли бы вы расписать как можно подробнее, что к чему на первых 6 страницах (там много повторяющихся действий), весь код привёл, т.к. вдруг понадобиться для общего понимания.
http://rghost.ru/5198051

На ru-board тоже попросил, так что не сочтите за наглость

lxa85
15-04-2011, 16:19
DennyD, структуры данных проходили? Берешь структуру, вписываешь в нее все что необходимо, не забываешь про двунаправленный список.
Отдельные поля для управления списком (удаление, создание и т.п.) если сразу все мысленно охватить сложно, рисуй схемки на черновиках, это не зазорно.
Структура есть, инструментарий для работы со структурой есть, дальше организуешь выборку по требуемым значениям и дело в шляпе.
Тут ничего сложного, просто надо внимательно прописать все варианты работы с типизированными данными.
cbv, ткну пальцем в небо. Может быть кириллическая кодировка двухбайтовая? А массив однобайтовый? Кроме того не ясно, где заканчивается цикл, какой тип имеют переменные, что помещается в них в правильном и "неправильном" случаях.
momo2000, а тематику то можно было и рассказать.
Перевод С++ кода в ассемблер.
int main()
{
//Загрузка ключевых слов.
//Начало чтения входного файла.
//Начало создания лексем
//Начало генерации кода
}
Все прозрачно. Твоя задача посмотреть логику работы формирования лексем. Узнать вообще, что такое лексема, какие варианты анализа и разбора текстов есть.
Т.к. кроме перевода, идет структурный анализ текста. Соотв. формируются ошибки о пропущенных аргументах например.
Когда структура сформирована, идет банально формирование ассемблерного кода вставками и подстановками.




© OSzone.net 2001-2012