Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: Помогите с IF ом на си++
1
  1  Бабанов Айдар Нурланович, 02 февраля 2010 г. 11:44:16
      if(...){
...}

  2  AC-SKYDOS, 29 января 2010 г. 10:24:56
      Кириличев Дмитрий Сергеевич

структура данных множество есть, но 1)объявление другое 2)проверка на вхождение длинне - st_name.contains(var) что-то вроде этого
  3  Кириличев Дмитрий Сергеевич, 29 января 2010 г. 5:11:28
      А в с++ есть sets ??
Нельзя как в паскале:
if (a[i][j]=66)and(not (k in [1,3,5,7])) then continue;
???
  4  AC-SKYDOS, 28 января 2010 г. 22:04:51
      Мас Мих

ну никто же не спорит, что нет изъянов у этой фичи)
Просто нужно всё делать с умом)
  5  Мас Мих В, 28 января 2010 г. 21:35:34
      И это кстати чревато
Когда мы например проверяем какую то переменную не выходит ли индекс за границы например массива
А потом проверяем какое-то конкретное условие, например вот тут будет ошибка
while (index<a.length && a[index]>5)
{
...
index++;
}

Если бы мы использовали &
Могла бы возникнуть ошибка
  6  AC-SKYDOS, 28 января 2010 г. 20:46:39
      Мехрдоди Одил(ТРГИ), 28 января 2010 г. 20:38:24
Ну если не ошибаюсь разница в следующем:
При использовании && вычисление выражения прекращается сразу после вычисления условия, которое дает FALSE
допустим есть такое выражение (a<10 && b>9 && 55%r==9 && 45/t==2) , то в случае, если (a<10) будет верно, а (b>9) нет, то дальнейшая проверка условий закончится и остальное не будет проверяться.
При использовании & - происходит полная проверка всего условия, даже если (b>9)==false то остальные условия тоже будут проверены.
  7  Мехрдоди Одил(ТРГИ), 28 января 2010 г. 20:38:24
      похоже что да все работает также, но если в книгах о с++(которые я читал) ни слова не написано об этом все же есть некие "побочные эфекты"
  8  Мехрдоди Одил(ТРГИ), 28 января 2010 г. 20:34:51
      да??????
я не знал... и что все будет работать так же как при && ?
  9  AC-SKYDOS, 28 января 2010 г. 20:22:08
      Мехрдоди Одил(ТРГИ), 28 января 2010 г. 20:12:53

Да и не только про первую, вместо двойного (&&) логического И можно написать ординарное(&)
  10  Мехрдоди Одил(ТРГИ), 28 января 2010 г. 20:12:53
      аааа, ну да-да! я просто думал все время про эту строку if (k==1,3,5,7) continue; и думал как ее укоротить, а про 1-ую забыл)))
  11  AC-SKYDOS, 28 января 2010 г. 20:06:16
      Мехрдоди Одил(ТРГИ), 28 января 2010 г. 19:45:46

можно вообще так написать и будет работать:

if (a[i][j]==66 & k>0 & k<8 & k%2) continue;
  12  Мехрдоди Одил(ТРГИ), 28 января 2010 г. 19:45:46
      ах да можно опусть ==1 и писать так:
if (a[i][j]==66)
if (k>0 && k<8 && k%2) continue;
  13  Мехрдоди Одил(ТРГИ), 28 января 2010 г. 19:44:10
      ну можно так
if (a[i][j]==66)
if (k>0 && k<8 && k%2==1) continue;
  14  Мехрдоди Одил(ТРГИ), 28 января 2010 г. 19:41:27
      насколько я знаю нет
  15  Кириличев Дмитрий Сергеевич, 28 января 2010 г. 16:03:46
      А никак нельзя покороче???
  16  Мехрдоди Одил(ТРГИ), 28 января 2010 г. 11:00:23
      надо писать так
if (a[i][j]==66)
if (k==1 || k==3 || k==5 || k==7) continue;
  17  Кириличев Дмитрий Сергеевич, 28 января 2010 г. 8:48:48
      Пишу такой код:
if (a[i][j]==66){
if (k==1,3,5,7)
continue;}
Он просматривает первое условие,а про второе забывает. Почему???
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru