0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 1
|
||||||
1 | ||||||
Странная Зося30.10.2019, 03:40. Показов 649. Ответов 14
Задали в универе написать такую программу:
Маленькая Зося прячет свои конфеты в коробочки. Она часто хотела бы знать, сколько в какой находится, но, к сожалению, она еще не умеет считать, поэтому она попросила вас помочь ей. Написать программу, которая ответит на вопрос Зоси: Сколько конфет находится в коробочках, которые стоят между двумя указанными коробочками? Вход: Первая строка ввода состоит из одного целого числа x (1 <= x <= 1000) обозначающего количество коробочек. В следующей строке находится x целых чисел, описывающих количество конфет в каждой коробочке - от первого до x-того. Каждая коробочка вмещает максимум 100 конфет. В следующей строке находится число y (1 <= y <= 1000) запросов Зоси. Следующие y строк содержат по два целых числа a и b (1 <= a <= b <= x), обозначающие коробки, выбранные Зосей. Выход: На выходе должны появиться y-линий - каждая должна содержать ровно одно число, которое является ответом на вопрос Зоси, то есть общее количество конфет в коробках, которые стоят между указанными (вместе с содержанием указанных коробок). Пример: Вход: 6 1 2 3 4 5 6 4 1 3 2 4 4 4 1 6 Выход: 6 9 4 21 Написать-то у меня получилось, но результат совсем не тот, что надо. Кто подскажет, в чем проблема? (Сильно не ругайте, учусь только месяц) Прилагаю код моих стараний)
0
|
|
30.10.2019, 03:40 | |
Ответы с готовыми решениями:
14
странная ситуация
Странная кодировка, ну ооочень странная
|
Мозгоправ
|
||||||
30.10.2019, 20:05 | 2 | |||||
Headleex,
0
|
из племени тумба-юбма
|
|
31.10.2019, 19:38 | 3 |
Уважаемый L0M, не сочтите за дерзость, но хочется спросить: почему в большинстве случаев, знающие люди вроде вас, в качестве ответов пишут свой вариант кода, а не исправляют вариант кода от ТС? Ведь ТС гораздо интересней, когда укажут на ошибки в его коде, чем напишут новый вариант. Еще раз повторюсь, это относится не именно к вам, а ко многим людям которые помогают на форуме.
0
|
Мозгоправ
|
|
31.10.2019, 20:36 | 4 |
Потому что в большинстве случаев проще закрасить, чем от стенки отскребать.
Вот в данном конкретном случае пришлось бы словами описывать преобразование варианта кода ТС в мой вариант. С обоснованием почему это надо сделать так, а не иначе, почему не не так, как это сделано у ТС, и какие альтернативные варианты могут быть. Это много текста. Это много времени. Это бесплатно. И это не интересно. Но лично я в таких случаях стараюсь оставаться в контексте варианта ТС. Т.е. использовать примерно тот уровень и те возможности языка, которые использовал ТС. Если ТС заинтересован в том, что бы найти свои ошибки и прокачать скилл, то он сравнит варианты решений и если в моём варианте что-то непонятно, то спросит.
1
|
из племени тумба-юбма
|
|
01.11.2019, 02:05 | 5 |
Все таки я поковырялся и смог разобраться в причине неправильного расчета.
1. строка 12 int tabpyt[1][pyt-1] , должно быть int tabpyt[2][pyt] Сразу хочется сказать, что массивы так не объявляют через переменные, да программа работает, но это не правильно. При объявлении нужно всегда указать конкретный размер, чтоб выделить память под массив ровно столько, сколько необходимо. Поэтому читайте темы про динамические массивы. 2. строка 20 sum=sum+tabpud[z] , должно бытть sum=sum+tabpud[z-1] Еще по поводу многократного объявления переменной внутри цикла - это просто лишнее. Можно так делать, если переменная задействована один раз и в других циклах не встречается. А в данном случае, такие пременные объявляются в начале программы.
0
|
из племени тумба-юбма
|
|
02.11.2019, 17:47 | 7 |
sodda, я это все понимаю, что легче написать свой код, чем разбирать чужой. Но просто не всем ТС интересен чужой вариант. Вот например для меня было бы интересней, если бы указывали ошибки в моем варианте, чем просто написали мне новый рабочий вариант. А кому то совсем без разницы, главное чтобы работало.
0
|
Мозгоправ
|
|
02.11.2019, 19:58 | 9 |
Неправда ваша.
Тут вопрос скорее в качестве кода. Если код говно, больше в логическом смысле, чем в техническом, то да, ф топку. Если код нормальный (ну ошибся где-то человек, или что-то не понимает), то почему не помочь? И, одно дело, когда надо поправить пару строк, ну или одну функцию, а другое, когда надо править практически каждую строку. И здесь вопрос в качестве кода. Ещё есть психологический аспект вопроса. Лично мне, в большинстве случаев, просто не хочется тратить свои силы и время на вопрос, если я вижу, что человек ни хрена на понимает в том, что спрашивает, и в том коде, который показывает (который якобы он написал). Не люблю халявщиков. И, кстати, мама Стифлера, по вашему комменту #5. В С99+ это разрешено. Variable-length array (VLA) называется. На самом деле не страшно. Компилятор соптимизирует. Скорее всего переменной цикла, как таковой, вообще не будет: значение будет в регистре процессора.
0
|
из племени тумба-юбма
|
|
02.11.2019, 20:20 | 10 |
Вот тут вы меня ошарашили, я с таким трудом вникаю в эти динамические двумерные массивы, со всеми двойными указателями и выделением/освобождением памяти. А тут оказывается с 99 года уже можно обходится без выделения памяти. Причем чуть ранее на форуме, я написал подобный вариант создания массивов через переменные. Так меня в ответ спросили в духе типа - серьёзно ли я так думаю? После этого я начал усердно вникать в суть выделения памяти для двумерных массивов.
Добавлено через 7 минут Вот кстати нашел ту старую тему Для заданного массива целых чисел подсчитать количество нечетных элементов
0
|
Мозгоправ
|
|
02.11.2019, 20:33 | 11 |
мама Стифлера, только не надо мешать в одну кучу динамические массивы и VLA. Это разные вещи.
VLA потенциально опасен, поскольку размещается на стеке. Чуть более опасен, чем локальная переменная-массив в функции. И там, и там можно исчерпать стек. Только размер автоматического массива можно проверить во время компиляции и выдать предупроеждение, а размер VLA можно проверить в только в рантайме. Смотря для какого языка вы такое написали. В C99+ VLA есть, в C++ VLA - нет (по стандарту). Дело несколько осложняется тем, что некоторые компиляторы С/С++, поскольку умеют оба языка, делают послабление (извините, расширение, зависящее от реализации) и считают допустимым VLA в коде на C++. Что есть неправильно. Это правильное решение вне зависимости от VLA.
1
|
из племени тумба-юбма
|
|
02.11.2019, 21:01 | 12 |
Для классического Си.
По началу колебался с выбором языка для изучения(С/С++). Потом после многих вопросов/ответов, решил, что классический Си, для меня будет более оптимальным для изучения. Хотя в С++ много всяких дополнительных плюшек, в сторону улучшения и упрощения написания программ.
0
|
из племени тумба-юбма
|
||||||
04.11.2019, 21:29 | 14 | |||||
Тут конечно соглашусь, могу предоставить свой, далеко не идеальный код. В нем только от избытка переменных, сразу пропадет желание копаться ))) Хотя на самом деле, он очень простой.
Кликните здесь для просмотра всего текста
0
|
Заблокирован
|
|
04.11.2019, 21:47 | 15 |
И я про это. Особенно если код изобилует всякими прелестями, вроде скобок всех мастей, точек с запятой и тд.
0
|
04.11.2019, 21:47 | |
Помогаю со студенческими работами здесь
15
Странная дата Странная ошибка Странная ошибка!
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |