Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Svid
5 / 5 / 2
Регистрация: 02.03.2011
Сообщений: 40
1

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

02.03.2011, 11:43. Просмотров 815. Ответов 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
Ответы с готовыми решениями:

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

Разница в коде из Builder и вижул студио
Добрый день! Столкнулся со следующей задачей. Есть программа написанная в...

Есть ли разница в расположении описания функции
Добрый день/утро. Скажите, пожалуйста, есть ли какая-то разница от написания...

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

Есть ли разница где указывать namespace?
Здравствуйте. Начинию изучать С++ (С до этого изучал). Какая разница между...

11
fasked
Эксперт С++
4984 / 2563 / 241
Регистрация: 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 / 2
Регистрация: 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
370 / 317 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
02.03.2011, 17:14 4
А это на C++? Если да, то как у вас это компилится?
C++
1
poisk (int x[I][J]){}
0
Sokolov
42 / 42 / 13
Регистрация: 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
370 / 317 / 32
Регистрация: 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 / 2
Регистрация: 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 / 13
Регистрация: 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 / 2
Регистрация: 02.03.2011
Сообщений: 40
02.03.2011, 18:03  [ТС] 9
А если не исправлять? Я просто для себя не могу понять, что начинает делать эта функция в варианте с вложенным циклом...
То есть, при первом шаге I становится 1, и начинают перебираться все J от 0 до 4, но при моей записи (i=j)).... что происходит, я не могу понять...
0
bigredcat
370 / 317 / 32
Регистрация: 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
Эксперт С++
4984 / 2563 / 241
Регистрация: 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 / 2
Регистрация: 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
02.03.2011, 19:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 19:45

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

Есть ли разница между подключениями 2-х и 1-ого заголовка?
Изучаю Потоковые классы в С++ и неожиданно задался вопросом. Есть ли разница...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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