Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
1

Вопрос по циклам и условиям

19.11.2011, 20:54. Показов 2297. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
while(i <= el) {
 if(mas < A && mas < min)
  min = mas;
 i++;
}
есть такой цикл.

поиск минимального при определенном условии. преподователь орет, что надо объеденить условие цикла и условие внутри него. считаю что это бред полный конечно, но как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2011, 20:54
Ответы с готовыми решениями:

Вопрос по циклам
1)Даны действительные числа x1, …., x8. Получить действительную квадратную матрицу порядка 8: 1 ...

Вопрос по циклам
Условие: Вводятся натуральное число n, целые числа а1, ..., an. Вычислить сумму: а1 + а2(2)+ ...

Вопрос по циклам
Всем доброго дня. Сначала объясню ситуацию. Есть программа, которая выгружает уведомления в...

Вопрос по условиям использования ПО от
Люди знающие, подскажите. Хочу для себя дома покрутить сервер на Lotus Domino и клиент на Lotus...

31
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
19.11.2011, 21:14 2
VladSharikov, да не особо бред странно что тебе ещё не кто не помог
for(;i <= el && mas < A && mas < min;i++)
min = mas;

Добавлено через 12 секунд
VladSharikov, да не особо бред странно что тебе ещё не кто не помог
for(;i <= el && mas < A && mas < min;i++)
min = mas;
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 21:20 3
Цитата Сообщение от Van111 Посмотреть сообщение
VladSharikov, да не особо бред странно что тебе ещё не кто не помог
for(;i <= el && mas < A && mas < min;i++)
Это в корне не верно, при определенных условиях ваш цикл совсем не будет работать, то есть сразу остановится. А вот это

C++
1
2
3
4
5
while(i <= el) {
 if(mas < A && mas < min)
  min = mas;
 i++;
}
и это
C++
1
2
3
for (; i <= e1; i++)
 if(mas < A && mas < min)
  min = mas;
эквивалентно

Цитата Сообщение от VladSharikov Посмотреть сообщение
преподаватель орет

Не по теме:

или он тупит, или другое от вас просит

1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
19.11.2011, 21:22 4
Цитата Сообщение от Thinker Посмотреть сообщение
for (; i <= e1; i++)
*if(mas < A && mas < min)
* min = mas;
я так тоже хотел сделать но
VladSharikov, просил чтоб в цикле условия не было
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 21:25 5
Цитата Сообщение от Van111 Посмотреть сообщение
я так тоже хотел сделать но
VladSharikov, просил чтоб в цикле условия не было
Да я так и понял, что вы это знаете и хотели написать, просто либо сформулирован не так вопрос, либо преподаватель не знает сам чего хочет.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
19.11.2011, 21:35 6
VladSharikov, зачем вам i ?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 21:51 7
Цитата Сообщение от go Посмотреть сообщение
VladSharikov, зачем вам i ?
Точно, там же массива нет, вот невнимательность... Спасибо, что увидели) Тогда там что-то типа
C++
1
2
3
for (; i <= e1; i++)
 if(mas[i] < A && mas[i] < min)
  min = mas[i];
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
19.11.2011, 22:10  [ТС] 8

Не по теме:

Тупит преподователь, я думаю
она например доказывает, что:
int mas[3]
имеет элементы mas[0], mas[1], mas[2], mas[3];
Не в том суть.



Я видимо не до конца расписал свою задачу.

Нужно сделать цикл с ПРЕДУСЛОВИЕМ(то есть цикл while) или цикл с ПОСТУСЛОВИЕМ, то есть цикл do {...} while;. я сделал просто while, а внутри этого цикла еще одно условие. Она долго кричала, что это не оптимально. Собственно вопрос. Как запихать условие if в while. А также, цикл for не рассматривается(опять же прихоть препода).

Уважаемые форумчане, я правда понимаю, что звучит как бред. Но сессию надо закрывать) Самое интересное, что "незнающим" меня никто никогда не считал. Но здесь я просто не представляю как выйти из этой ситуации =)

Thinker,
go,

странно, ощущение, что или я напортачил, или то что было в квадратных скобках - скрыто. у меня именно массив.
C++
1
2
3
4
5
while(i <= el) {
 if(mas[i] < A && mas[i] < min)
  min = mas[i];
 i++;
}
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 22:18 9
VladSharikov, вы лучше полностью сформулируйте задачу, а уж алгоритм потом посмотрим как преобразовать
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
19.11.2011, 22:30  [ТС] 10
Специально пишу отдельное сообщение, чтобы получше сформулировать задачу.

Итак... Я написал программу(не важно какую и т.п. и т.д.), одна из подзадач этой программы найти минимальный элемент массива, меньший числа A и до первого элемента большего B.
А и B вводим с клавиатуры.
Имеется подпрограмма которая содержит в себе 2 цикла:
1) цикл для поиска элемента, большего B(в этом цикле мы ищем переменную el, которая пригодиться для второго цикла)
2) цикл для поиска минимального, меньшего А. поиск осуществить до элемента B.

пока ясно?

значит. после выхода из первого цикла у нас есть переменная "el", содержащая в себе индекс первого элемента большего B.

1-ая попытка сдать ей эту программу. Цикл поиска минимального выглядел так:
C++
1
2
3
4
5
int min = mas[0];
for(int i = 1; i < el; i++) {
 if(mas[i] < A && mas[i] < min)
  min = mas[i];
}
Не зачет. Шум, крик и гам по поводу цикла FOR. Сказала переделай под цикл while. Посидел, подумал, выдал ей такое.
C++
1
2
3
4
5
6
7
min = mas[0];
int i = 1;
while(i<el) {
 if(mas[i] < A && mas[i] < min)
  min = mas[i];
 i++;
}
Этот вариант тоже ее не устроил. Сказала это, цитата: "зачем же писать while(цикл с предусловием) и тут же после него писать условие. это в корне неправильно! это же не оптимально! нужно их объеденить!".
Посидел, подумал, посЕдел, решил обратиться к вам.
Собственно вопрос. Как превратить мой второй вариант, в то, что хочет она.
0
Заблокирован
19.11.2011, 22:37 11
Цитата Сообщение от VladSharikov Посмотреть сообщение
найти минимальный элемент массива, меньший числа A и до первого элемента большего B
Поиск элемента В это условие задачи или ваша инициатива, если второе, то лишняя работа.
Скорее всего она хочет цикл с постусловием, чтобы было "оптимально" по ее мировоззрению.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 22:38 12
Цитата Сообщение от VladSharikov Посмотреть сообщение
одна из подзадач этой программы найти минимальный элемент массива, меньший числа A и до первого элемента большего B.
Так с этого и надо было начинать:

C++
1
2
3
4
5
6
7
8
9
int a[N], A, B, min;
min = INT_MAX;
i = 0;
while(i < N && a[i] <= B)
{
   if (a[i] < A && a[i] < min)
      min = a[i];
   i++;
}
Может ей не нравится, что вы два раза бегаете по массиву, когда можно объединить оба условия и составить один цикл
0
Заблокирован
19.11.2011, 22:43 13
Thinker, да, поддерживаю. но не вяжется с этим
Цитата Сообщение от дикий препод
зачем же писать while(цикл с предусловием) и тут же после него писать условие. это в корне неправильно! это же не оптимально! нужно их объеденить!
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.11.2011, 22:46 14
alkagolik. ну никак проверка на минимум не лезет в условие цикла, речь наверняка о другом.
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
19.11.2011, 22:46  [ТС] 15
alkagolik, скорее ее условие, а не условие задачи.
Она вообще требует 4 цикла тут сделать(хотя я не понимаю, где тут найти хотя бы 3).

Thinker,
C++
1
2
3
4
while(i < N && a[i] <= B) // - разница тут. я прохожу массив до el(предварительно найденного), а вы это делаете "по ходу дела"
{
//тоже самое, что и у меня
 }
все тоже самое, что и у меня. единственное отличие это, то как мы отслеживаем элемент, больший B.

У вас один вариант, у меня другой вариант. Все остальное - тоже самое, прочитайте сообщение выше. while и if должны быть объединены.
0
Заблокирован
19.11.2011, 23:00 16
Цитата Сообщение от VladSharikov Посмотреть сообщение
while и if должны быть объединены.
никак. это проверка разных предметов. то же самое что сравнивать на предмет текучести воду и воздух. И речь либо о том чтобы проверять элемент В одновременно с поиском минимума, как показал товарищ Thinker, либо о том же только с постусловием.
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
19.11.2011, 23:07  [ТС] 17
Нужно найти минимальный элемент, как будет выглядеть цикл с постусловием?

C++
1
2
3
do {
....
} while(i <= el && mas[i] < A && mas[i] < min);
так?

Исходный массив, например такой:
74 55 13 85 38 5 19 94 25 24
A = 50, B = 80. работает. Минимальное 13.
A = 50, B = 90. не работает. Минимальное так же 13, должно быть 5.

Что я не так сделал?
0
Заблокирован
19.11.2011, 23:16 18
Цитата Сообщение от VladSharikov Посмотреть сообщение
так?
нет. так
поиск минимума и проверка на "меньше числа А" не может быть условием выхода из цикла. Однозначно и безоговорочно.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
20.11.2011, 10:55 19
Цитата Сообщение от VladSharikov Посмотреть сообщение
"зачем же писать while(цикл с предусловием) и тут же после него писать условие. это в корне неправильно! это же не оптимально! нужно их объеденить!"
да препод по ходу тупит тем более женчина! какая нафиг оптимальность все автора книг с++ и даже бьян страустап говорят с++ язык который любит простые команды то есть дискретность
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.11.2011, 14:37 20
Цитата Сообщение от VladSharikov Посмотреть сообщение
считаю что это бред полный
Цитата Сообщение от Van111 Посмотреть сообщение
да не особо бред
Всё зависит от того, что ищешь. Если искать конец убывающей последовательности, или минимум массива, о котором известно, что он может быть или отсортирован по убыванию, или иметь распределение "седло", то оба условия надо прописать в заголовке цикла, одно будет отвечать за контроль размерности, а второе за поиск минимума, иначе же так нельзя. И каждое из условий надо заключать в скобки. Есть языки, которые этого не требуют, например, бейсик, а есть языки, на которых это будет синтаксической ошибкой и не даст откомпилить, например, паскаль. Зависит от приоритетов: если выше приоритет сравнения, то скобки не нужны, а если логического оператора, то
Pascal
1
if a<b and c<d then
означает
Pascal
1
if a<(b and c)<d then
, а эта запись не допустима. Так вот, чтоб не копаться в таких подробностях стандартов, надо приоритеты всегда ставить самостоятельно с помощью скобок. Да и обращаться здесь надо не к массиву, а к элементу.

Добавлено через 11 минут
Цитата Сообщение от Van111 Посмотреть сообщение
да препод по ходу тупит тем более женчина! какая нафиг оптимальность все автора книг с++ и даже бьян страустап говорят с++ язык который любит простые команды то есть дискретность
Дискретность не противоречит оптимальности и не является отличительным свойством какого либо языка. c/c++ как раз предназначены для разработки оптимальных программ, а континуальных языков нет, все дискретны.

Добавлено через 3 минуты
Цитата Сообщение от VladSharikov Посмотреть сообщение
зачем же писать while(цикл с предусловием) и тут же после него писать условие. это в корне неправильно! это же не оптимально!
А при чём здесь оптимальность? Условия цикла с условием по синтаксису должно быть в заголовке/завершающем операторе самого цикла. Но ведь могут же быть два условия для разных целей! И не надо путать оптимальность с задачей, а тёплое с кислым.

Добавлено через 4 минуты
Цитата Сообщение от VladSharikov Посмотреть сообщение
Как превратить мой второй вариант, в то, что хочет она.
Элементарно:
C++
1
2
3
4
5
6
7
min = mas[0];
int i = 1;
while ((i<el)&&(mas[i]< A)&&(mas[i]<min))
{
 min = mas[i];
 i++;
}
. Только не факт, что это соответствует задаче. Так что задачу в студию.
0
20.11.2011, 14:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2011, 14:37
Помогаю со студенческими работами здесь

По Циклам
Кто-нибудь помогите!! Вот код: int k; float amply; for(int X=R1.Left;X&lt;R1.Right;X++) ...

Помогите!!!По циклам
1) Дано целое число N (&gt; 0), являющееся некоторой степенью числа 2: N = 2K. Найти целое число K —...

Задание по циклам
Правильное ли решение задания? double x, h, n, s; n = 5; x = 0.3; ...

с++, по циклам. B описании:
1. А) 1/a+1/(a(a+1))+...+1/(a(a+1)...(a+n) Б) П(сверху 52, снизу i=1): (i*i)/(i*i+2*i+3) Циклы и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru