Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Помогите найти ошибку (http://forum.oszone.net/showthread.php?t=251516)

COM-BAT 15-01-2013 16:42 2067332

Помогите найти ошибку
 
Вот код
Код:

#include <iostream>
#include <string>
using namespace std;
int main()
{
        string com;
        int matrix[9][9]={0};
        int x=9;
        int y=9;
        int v=9;
        int ix, iy, iv;
        do
        {
                cin>>com;
                if(com=="in"){cin>>ix>>iy>>iv; matrix[ix][iy]=in(ix, iy, iv, x, y, v);};
                if(com=="out"){cin>>ix>>iy; if(out(ix, iy, x, y)){cout<<matrix[ix][iy]<<endl<<"Sucesful"<<endl;};}
        }while(true);

}
int in(int ix, int iy, int iv, int x, int y, int v)
{
        if(!((ix<0)||(ix>x)||(iy<0)||(iy>y))){
                if(((iv<0)||(iv>9))){cout<<"So big or so smal value!"<<endl;}
                else{cout<<"Sucesful"<<endl; return iv;};}
        else{cout<<"End of matrix!"<<endl;};
}
bool out(int ix, int iy, int x, int y)
{
                if(!((ix<0)||(ix>x)||(iy<0)||(iy>y))){return true;}
        else{cout<<"End of matrix!"<<endl;};
}


torauma 15-01-2013 17:02 2067352

Ну код и что? Компилируется нормально, выводит ноль в консоль. Что искать то?

COM-BAT 15-01-2013 17:15 2067363

Вот что говорит дядюшка компилятор
1>c:\documents and settings\loner\мои документы\visual studio 2010\projects\m3\m3\m3.cpp(15): error C3861: in: идентификатор не найден
1>c:\documents and settings\loner\мои документы\visual studio 2010\projects\m3\m3\m3.cpp(16): error C3861: out: идентификатор не найден

Всё я уже сам нашол ошибку
Я не добавил прототипоа функций

Drongo 15-01-2013 18:46 2067470

Несколько замечаний по технике программирования. Есть такое понятие как "магическая цифра", у вас размер двухмерного массива равен 9, переменным y, x, v присвоено число девять. Потом труднее будет понять что является размером, а что значением. Всегда старайтесь использовать переменные.
Код:

...
  const int row = 9;
  const int column = 9;
  int matrix[row][column] = {0};
...

Теперь такой момент, в условиях у вас слишком много скобок, это не ошибка, но они избыточные, достаточно написать
Код:

...
  if(!(ix<0 || ix>x || iy<0 || iy>y)){
...

И наконец конструкция ввода\вывода
Цитата:

Цитата COM-BAT
Код:

...
do
 {
 cin>>com;
 if(com=="in"){cin>>ix>>iy>>iv; matrix[ix][iy]=in(ix, iy, iv, x, y, v);};
 if(com=="out"){cin>>ix>>iy; if(out(ix, iy, x, y)){cout<<matrix[ix][iy]<<endl<<"Sucesful"<<endl;};}
 }while(true);
...

»

Ввод массива
Код:

...
  const int row = 9;
  const int column = 9;
  int matrix[row][column] = {0};

  for(int i = 0; i < row; i++){
      for(int j = 0; j < column; j++){
        cout << "Matix[" << i << "][" << j << "] = "; // Для красоты ввода
        cin >> matrix[i][j];
        }
    }
...

Вывод массива
Код:

...
  const int row = 9;
  const int column = 9;
  int matrix[row][column] = {0};

  for(int i = 0; i < row; i++){
      for(int j = 0; j < column; j++){
        cout << matrix[i][j] << endl;
        }
    }
...


torauma 16-01-2013 09:57 2067853

На будущее, когда просите найти ошибку, сообщайте все, что вам о ней известно.

Цитата:

Цитата COM-BAT
Вот что говорит дядюшка компилятор
1>c:\documents and settings\loner\мои документы\visual studio 2010\projects\m3\m3\m3.cpp(15): error C3861: in: идентификатор не найден
1>c:\documents and settings\loner\мои документы\visual studio 2010\projects\m3\m3\m3.cpp(16): error C3861: out: идентификатор не найден »

Действительно. У меня чего то MinGW Developer Studio чудит. Мало того что ошибку компиляции не выдало, дак еще и компилирует непонятно как. Попробовал скомпилировать g++, получил аналог этих ошибок и еще вот такое:
Код:

test.cpp: In function ‘bool out(int, int, int, int)’:
test.cpp:17: warning: control reaches end of non-void function
test.cpp: In function ‘int in(int, int, int, int, int, int)’:
test.cpp:11: warning: control reaches end of non-void function

Это означает, что в некоторых ветках условных операторов не указан оператор return. Такие вещи нужно исправлять.

Цитата:

Цитата COM-BAT
if(com=="in"){cin>>ix>>iy>>iv; matrix[ix][iy]=in(ix, iy, iv, x, y, v);}; »

Лучше не жалеть строчек на нормальное форматирование.

Код:

do       
...
while(true);

Тут у вас бесконечный цикл. Добавьте возможность его завершения.


Слов smal и sucesful в английском языке нет, есть small и successful. А фраза "So big or so small value!" переводится "Такое большое или такое маленькое значение", как минимум, нужно использовать too (слишком) вместо so (итак, такой).
Если собираетесь профессионально заниматья программированием, то подучите английский, он очень пригодится.


Цитата:

Цитата Drongo
в условиях у вас слишком много скобок »

Весьма спорное замечание. Избыточные скобки в данном случае позволяют меньше задумываться о приоритете операций.

Drongo 16-01-2013 14:33 2068083

Цитата:

Цитата torauma
Весьма спорное замечание. Избыточные скобки в данном случае позволяют меньше задумываться о приоритете операций. »

В данном случае они излишни. Как ни крути, здесь нет двойных условий и приоритета проверки какого либо из них когда нужно вычислить сначала какую-то одну часть, и\или вторую. Здесь 4 сравнения, с одной операций отрицания всей проверки.

torauma 16-01-2013 15:17 2068107

Drongo, я и не утверждаю, что они здесь необходимы, просто при их наличии не нужно даже задумываться, что имеет больший приоритет сравнение или "или". Конечно, не трудно догадаться у чего приоритет выше, но ситуации бывают и запутанее. Ну и читать условие когда в нем сравнения выделены скобками легче (по крайней мере мне). Хотя в вашей записи тоже все читается вполне легко, так как сравнения отделены пробелами, но вот если отделить еще и переменные от заков сравнения (при более длинных именах переменных это имеет смысл), то читать станет сложнее. Вобщем, тут спор скорее о стиле оформления кода, а в этом вопросе каждый волен делать как ему удобнее, в разумных пределах конечно.


Время: 15:46.

Время: 15:46.
© OSzone.net 2001-