Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
#1

Есть ли разница в коде? - C++

02.03.2011, 11:43. Просмотров 762. Ответов 11
Метки нет (Все метки)

Добрый день!
Такой вот вопрос: необходимо написать функцию, ищущую максимальный элемент, на главной диагонали массива, скажем 4х4. Придумал уже как минимум два разных варианта, но не могу понять, корректны ли они, и есть ли между ними принципиальная разница (ну, кроме той, что второй вариант перебирает все элементы массива)?
Вариант первый:
C++
1
2
3
4
5
6
7
8
9
int poisk (int x[I][J])
{
  int i, j, max;
  max = x[0][0];
  for (i=0,j=0; i<I,j < J;j++,i++)
        if ( (x[i][j] > max) && (i=j))
    max = x [i][j];
  return (max);
}
Вариант второй:
C++
1
2
3
4
5
6
7
8
9
10
int fmaxglavdig( int x [I][J] )
{
  int i, j, max;
  max = x[0][0];
  for (i=0; i<I; i++)
    for ( j=0; j < J; j++)
      if ((x[i][j] > max)&&(i=j))
    max = x [i][j];
  return (max);
}
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2011, 11:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Есть ли разница в коде? (C++):

Инициализация в теле конструктора или в списке инициализации, есть ли разница в сгенерированном коде? - C++
Инициализация в теле конструктора или в списке инициализации - большая ли разница в сгенерированном коде? И есть ли она вообще?

Есть ли разница между этими записями? - C++
bool param1, param2, param3; bool param1; bool param2; bool param3;

Есть ли разница в данных объявлениях массива? - C++
string *array={&quot;string1&quot;,&quot;string2&quot;}; string array = {&quot;string1&quot;,&quot;string2&quot;}; В первом случае обьявляется указатель на массив, но...

Есть ли разница где указывать namespace? - C++
Здравствуйте. Начинию изучать С++ (С до этого изучал). Какая разница между using namespace std; int main () { return 0; ...

Логические операции, есть ли разница в записях кода? - C++
Есть ли разница в записях : int a=3; if(a!=3) .... и int a=3;

Есть ли разница в каком порядке объвлены функции? - C++
Есть файл Wnd.h class Wnd { public: void function(int min,int max); Wnd(); ~Wnd(); };

11
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
02.03.2011, 12:35 #2
C
1
2
3
4
5
6
7
8
9
int foo (int base[n][m])
{
    max = base[0][0];
    for (i = 0; i < n && i < m; ++i)
        if (max < base[i][i])
            max = base[i][i];
    
    return max;
}
Добавлено через 1 минуту
Цитата Сообщение от Svid Посмотреть сообщение
i=j
оба варианты некорректны ииз-за этого момента, видимо здесь должно быть сравнение ==, а не присваивание =.
2
Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
02.03.2011, 16:31  [ТС] #3
Большое спасибо!
оба варианты некорректны из-за этого момента
это плохо, потому что у меня десять таких функций - видимо все неправильные

Но все равно, основной вопрос по циклу:
есть ли разница между первым вариантом, когда один цикл используется, и вообще корректна ли сама запись (
C++
1
for (i=0,j=0; i<I,j < J;j++,i++)
) и вторым - когда два цикла?
0
bigredcat
366 / 313 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
02.03.2011, 17:14 #4
А это на C++? Если да, то как у вас это компилится?
C++
1
poisk (int x[I][J]){}
0
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
02.03.2011, 17:24 #5
Цитата Сообщение от Svid Посмотреть сообщение
for (i=0,j=0; i<I,j < J;j++,i++)
Цитата Сообщение от Svid Посмотреть сообщение
массива, скажем 4х4
то есть I=J
тогда,
Цитата Сообщение от Svid Посмотреть сообщение
for (i=0,j=0; i<I,j < J;j++,i++)
можно просто записать как
C++
1
for(i=0;i<I;i++)
и тут будет перебираться только главная диагональ
C++
1
a[i][i]
а если использовать такой вариант
C++
1
2
for (i=0; i<I; i++)
    for ( j=0; j < J; j++)
то сначала перебираются все элементы первой строки, потом второй и тд.
1
bigredcat
366 / 313 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
02.03.2011, 17:30 #6
Если матрица квадратная, то достаточно
C++
1
2
for (int i = 0; i < matrix_size; i++)
    if (x[i][i] > max) max = x [i][i];
Не сразу понял, у вас I и J глобальные константы. Весь код показывать надо
0
Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
02.03.2011, 17:40  [ТС] #7
Еще раз большое всем спасибо!
Все понял (всю глубину своих заблуждений)
остался только один вопрос: что делали мои первоначальные варианты?
оба варианты некорректны ииз-за этого момента, видимо здесь должно быть сравнение ==, а не присваивание =.
видимо в моем неправильном варианте с один циклом
C++
1
for (i=0,j=0; i<I,j < J;j++,i++)
- не важно сравнение это или присвоение, так как I и J и так всегда будут равны, а вот во втором варианте, а не могу понять, что она в таком случае считает??
А это на C++? Если да, то как у вас это компилится?
нормально, без ошибок, а что?
0
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
02.03.2011, 17:46 #8
Svid, по-моему, оба варианта верны, если исправить
Цитата Сообщение от Svid Посмотреть сообщение
C++
1
if ((x[i][j] > max)&&(i=j))
на
C++
1
if ((x[i][j] > max)&&(i==j))
Это при условии, что I==J
0
Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
02.03.2011, 18:03  [ТС] #9
А если не исправлять? Я просто для себя не могу понять, что начинает делать эта функция в варианте с вложенным циклом...
То есть, при первом шаге I становится 1, и начинают перебираться все J от 0 до 4, но при моей записи (i=j)).... что происходит, я не могу понять...
0
bigredcat
366 / 313 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
02.03.2011, 18:49 #10
Цитата Сообщение от Svid Посмотреть сообщение
То есть, при первом шаге I становится 1, и начинают перебираться все J от 0 до 4
почти верно, только i становится равно 0. i равно 1 на втором шаге.
Цитата Сообщение от Svid Посмотреть сообщение
но при моей записи (i=j)).... что происходит, я не могу понять...
выполняется правая часть условия if ((x[i][j] > max)&&(i=j)), только видимо i==j - проверка на равенство
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
02.03.2011, 18:54 #11
Цитата Сообщение от Svid Посмотреть сообщение
А если не исправлять? Я просто для себя не могу понять, что начинает делать эта функция в варианте с вложенным циклом...
То есть, при первом шаге I становится 1, и начинают перебираться все J от 0 до 4, но при моей записи (i=j))....
Любая запись в блоке поверки условия (if/for/while...) в итоге приводится к булевому выражению (true/false - истина/ложь). Если в таком блоке стоит число, то оно тоже приводится к булевому, любое ненулевое число - истина, ноль - ложь.
Если рассматривать запись вида
C
1
if (a = b)
, переменной 'a' присваивается значение переменной 'b', получается, что условие зависит от 'b', и блок не сработает только в случае, если b равна 0.
Цитата Сообщение от Svid Посмотреть сообщение
что происходит, я не могу понять...
А теперь подумайте
0
Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
02.03.2011, 19:45  [ТС] #12
[QUOTE=fasked;1415103]Любая запись в блоке поверки условия (if/for/while...) в итоге приводится к булевому выражению (true/false - истина/ложь). Если в таком блоке стоит число, то оно тоже приводится к булевому, любое ненулевое число - истина, ноль - ложь.
Если рассматривать запись вида
C
1
if (a = b)
, переменной 'a' присваивается значение переменной 'b', получается, что условие зависит от 'b', и блок не сработает только в случае, если b равна 0.

То есть, в случае b>0 запись if (a = b) - просто пустое условие, которое ничего не добавляет, а при b=0 - выпадает из поиска столбец, правильно?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 19:45
Привет! Вот еще темы с ответами:

Конец файла. Есть ли разница в windows и linux? - C++
Простая программа, получение данных из файла, запись в стек и вывод его на экран. К примеру, если в файле содержатся числа 11 22 33 44 55,...

Есть разница между C++Builder и Visual Studio? - C++
Здравствуйте! Я только начал изучать С++ (по книге Лафоре). Хочу узнать есть ли разница в какой программе программы писать? Просто такое...

Вектор или связный список есть ли разница? - C++
В примерах видел использование что то вроде struct List { // ....... List * next; //....... vector &lt; List * &gt;...

Есть ли разница между Visual C++, Borland C++ и C++ Builder? - C++
Какая разница между этими диалектами, или незнаю как это точно называется. И какой лучше?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
02.03.2011, 19:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru