Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2016, 22:57   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
За такой говнокод надо бить и долго...
А вот я в данном случае с этим не согласен.
Посмотрите на алгоритм TC - он именно такой алгоритм и хотел.

Я примерно такой же код себе и представлял, если TC скажет, что массивы использовать нельзя, а надо именно так, как он в тетрадке расписал.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2016, 00:28   #12
Максай
Пользователь
 
Аватар для Максай
 
Регистрация: 21.07.2008
Сообщений: 40
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
За такой говнокод надо бить и долго...
Это жуткий говнокод с точки зрения нормального программиста, однако, если вдуматься, то иначе решить задачу в поставленных рамках (без массивов), пожалуй, и нельзя.

Я только убрал несколько лишних проверок и считать начал с единицы, чтобы упростить схему. У меня получилось так:
Код:
начало;

a,b,c,d,e;
k=1;
l=1;
m=1;
n=1;

if(a = b){ k=k+1; b=-1; }
if(a = c){ k=k+1; c=-1; }
if(a = d){ k=k+1; d=-1; }
if(a = e){ k=k+1; e=-1; }

if(b != -1){
  if(b = c){ l=l+1; c=-1; }
  if(b = d){ l=l+1; d=-1; }
  if(b = e){ l=l+1; e=-1; }
}

if(c != -1){
  if(c = d){ m=m+1; d=-1; }
  if(c = e){ m=m+1; e=-1; }
}

if(d != -1){
  if(d = e){ n=n+1; e=-1; }
}

print a:k;
if(b != -1) print b:l;
if(c != -1) print c:m;
if(d != -1) print d:n;
if(e != -1) print e:1;

конец;
Сгенерировалась вот такая колбаса. Извините, что ссылкой, картинки форум режет и слишком мелко получается, ничего не видно.

Цитата:
Сообщение от ura_111 Посмотреть сообщение
В принципе я мог бы написать сложнее (компактней, красивее) и уже начал это делать, но... Максай, ну какие "<algorithm>", ну какие "<vector>" - она даже слов таких не знает. Это ты мне можешь такое написать и я тебя пойму (заценю), а ей...

Раньше (напомню, я не давно на форуме) я тоже писал как Максай - по своему, но потом я подумал, что я подставляю студентов, - и после этого начал их расспрашивать что они знают, что проходили, на каком уровне развития в программировании находятся, и только после этого помогать студентам. Советую и Максай делать тоже самое.
В принципе, мой первый вариант как раз и был "попроще". Можно ещё fill_n заменить на ={0,0,0,0,0,0,0,0,0,0}, чтобы <algorithm> выкинуть.

Последний раз редактировалось Максай; 06.09.2016 в 00:57. Причина: Поправил ошибки в блок-схеме.
Максай вне форума Ответить с цитированием
Старый 06.09.2016, 05:14   #13
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Я взял её блок-схему, поправил чуть-чуть, и сделал рабочую программу (обрати внимание: ничего лишнего, те же самые конструкции, что и у неё в тетради)...
у тебя сравнивается kol_a и "-1", но чето я нигде не вижу, чтобы этой переменной присваивалось "-1". Код 100% неправильный, как и подход. И дело в не в отсутствии массивов.
rrrFer вне форума Ответить с цитированием
Старый 06.09.2016, 05:27   #14
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Сообщение от Максай Посмотреть сообщение
если вдуматься, то иначе решить задачу в поставленных рамках (без массивов), пожалуй, и нельзя.
Да ты что ))

Код:
if(a = b){ k=k+1; b=-1; }
if(a = c){ k=k+1; c=-1; }
Не знаю что это за язык, но если С++ (не паскаль ведь?) - то тут ты не сравниваешь, а присваиваешь.

Что если несколько чисел изначально равны "-1"? - как-то не очень хорошо при подсчете портить исходные числа и надеяться что они изначально чему-то не равны.

Ну а самое главное. Пусть дано:
Код:
a b c d e
1 1 1 0 0
Правильный ответ:
Код:
a b c d e
3 3 3 2 2
А что выдаст твоя программа? - она обнаружит что "А" встречается 3 раза, но при этом изменит числа В и С (они станут равны -1), а поэтому она вообще не зайдет в эти условия:
Код:
if(c != -1){
  if(c = d){ m=m+1; d=-1; }
  if(c = e){ m=m+1; e=-1; }
}
В итоге она выдаст:
Код:
a b c d e
3 1 1 2 ?
Сколько раз встречается Е она вообще не считает у тебя) - даже переменной соответствующей нет. Вот и сравни это с правильным ответом.
rrrFer вне форума Ответить с цитированием
Старый 06.09.2016, 05:33   #15
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
if (a == b) {
  ca++; cb++;
}
if (a == c) {
  ca++; cc++;
}
if (a == d) {
  ca++; cd++;
}
if (a == e) {
  ca++; ce++;
}

if (b == c) {
  cb++; cc++;
}
if (b == d) {
  cb++; cd++;
}
if (b == e) {
  cb++; ce++;
}

if (c == d) {
  cc++; cd++;
}
if (c == e) {
  cc++; ce++;
}

if (d == e) {
  cd++; ce++;
}
Это все что-ли? - значения счетчиков в переменных ca, cb, cc, cd, ce. Это решение "в лоб". А вы какую задачу вообще решать пытались?
rrrFer вне форума Ответить с цитированием
Старый 06.09.2016, 08:43   #16
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Цитата:
rrrFer: у тебя сравнивается kol_a и "-1", но чето я нигде не вижу, чтобы этой переменной присваивалось "-1".
kol_a - чисто для симметрии сделал (чтобы не выделялось от других kol_).

rrrFer, Максай условно набросал программу (посмотри у него есть слово "начало, конец" или такое "print b:l;")

Последний раз редактировалось ura_111; 06.09.2016 в 08:52.
ura_111 вне форума Ответить с цитированием
Старый 06.09.2016, 09:45   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от rrrFer
Ну а самое главное. Пусть дано:

Код:
a b c d e
1 1 1 0 0
Правильный ответ:
Код:
a b c d e
3 3 3 2 2
нет, это НЕ ПРАВИЛЬНЫЙ ответ.
Вы вообще исходное сообщение читали?! см. пост #3
правильный ответ:
1:3
0:2

(число 1 встречается три раза, число 0 - два раза)


Цитата:
Сообщение от Максай
Я только убрал несколько лишних проверок и считать начал с единицы, чтобы упростить схему.
нельзя упрощать схему вводя ограничения на входные значения, которых нет в задании.
Почему Вы решили, что числа только положительные?
а если я введу значение -1 - что мне программа подсчитает?
В этом отношении алгоритм у ura_111 чуть сложнее (за счёт отдельных переменных), но более универсальный и корректный.


а вот проверку для kol_a Вы зря сделали.
я понимаю, что хотели написать красиво,
Цитата:
kol_a - чисто для симметрии сделал (чтобы не выделялось от других kol_).
но получилось глупо и бессмыслено. Подумайте, ведь это ЛИШНЯЯ ветка в алгоритме. Кроме того, если зададут вопрос, а для чего Вы тут проверяете kol_a - Вы что скажете? Для красоты?!

всё сказанное выше, исключительно IMHO

Последний раз редактировалось Serge_Bliznykov; 06.09.2016 в 09:49.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2016, 11:33   #18
Максай
Пользователь
 
Аватар для Максай
 
Регистрация: 21.07.2008
Сообщений: 40
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Код:
if(a = b){ k=k+1; b=-1; }
if(a = c){ k=k+1; c=-1; }
Не знаю что это за язык, но если С++ (не паскаль ведь?) - то тут ты не сравниваешь, а присваиваешь.
Это код (псевдокод) для code2flow.com, которым я рисовал блок-схему.
Насчёт сравнений и присваиваний - да, у меня тоже были по этому поводу сомнения, но у ТС в тетрадке так нарисовано, я старался сделать максимально близко к этому.
Но, да, на всякий случай надо бы сказать: 99alinka, у Вас в тетрадке, возможно, ошибка, для сравнения переменных и присваивания им значений обычно используются разные операторы, например в C++ должно быть:
Код:
if(a == b) k = k+1;
А в Pacal:
Код:
if a = b then k := k+1
Проверьте, всё ли у вас в тетрадке правильно.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
нельзя упрощать схему вводя ограничения на входные значения, которых нет в задании.
Почему Вы решили, что числа только положительные?
а если я введу значение -1 - что мне программа подсчитает?
В этом отношении алгоритм у ura_111 чуть сложнее (за счёт отдельных переменных), но более универсальный и корректный.
Да, Вы правы, здесь у меня косяк, -1 надо было в счётчики заносить и проверять, как у ura_111 сделано, а не в исходные данные. Но исправлять уже не буду, пускай это станет домашней работой для ТС.
Отдельные переменные у меня также есть, только называются не "kol_a", "kol_b", и т.д. а, как у ТС в тетрадке: k,l,m,n.
Максай вне форума Ответить с цитированием
Старый 08.09.2016, 21:57   #19
99alinka
 
Регистрация: 04.09.2016
Сообщений: 4
По умолчанию

Спасибо всем огромное!
99alinka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен или код, или блок схема, или просто обьяснение. shewlett Помощь студентам 1 03.06.2015 16:34
Блок схема на программу DimaLord Помощь студентам 0 23.01.2014 17:02
Блок схема или алгоритм по шагам! sky-flame Помощь студентам 0 29.12.2012 10:46
блок схема на программу С++ dimitrijiyul Помощь студентам 0 08.11.2012 23:31
программа или блок-схема skycool Помощь студентам 3 23.01.2012 17:29