Форум » Обработка числовых последовательностей » с4 (разобранные задачи из документа с4) » Ответить

с4 (разобранные задачи из документа с4)

Дашкаа: вопрос по задачам, которые разбирает К.Поляков в начале документа по с4. первая задача. счётчик C[k] := C[k] + 1; Я не понимаю, как мы считаем именно те школы, от которых заявлен один участник. Ведь сам цикл оставляет нам только номер школы, а счётчик всегда + 1 К задаче два 1) var Info: array[1..LIM] of record почему мы не можем написать var Info: array[10..LIM] of record ? (по условию "не меньше 10, но не>100"?) или в массиве можно начинать только с первого элемента? 2) что означает переменная k? почему так получается, что при k:=1 считывается фамилия, при k:=2 имя, при k 1,2,3 в след.цикле отметки ученика? 3)for k:=1 to 3 do begin read(mark); опять же.. как под одной переменной "mark" считывается первая, вторая и третья оценки ученика? Извините, если непонятно где-то сформулировал вопрос. и если где-то вопросы тупые.)

Ответов - 8

Поляков: Дашкаа пишет: Я не понимаю, как мы считаем именно те школы, от которых заявлен один участник. После завершения чтения данных выполняется поиск минимального значения в массиве счетчиков C - так мы находим, какое минимальное количество участников было от одной школы. См п. 14 разбора. почему мы не можем написать var Info: array[10..LIM] of record ? (по условию "не меньше 10, но не>100"?) Представьте себе, что есть 10 учеников. А у вас только 1 элемент массива. for k:=1 to 3 do begin read(mark); опять же.. как под одной переменной "mark" считывается первая, вторая и третья оценки ученика? Никто не запрещает так делать - считывать несколько значений в одну и ту же переменную. Конечно, при каждом следующем чтении предыдущее значение затирается, но после этого стоит строка Info[i ].sum := Info[i ].sum + mark;, в которой значение mark добавляется к сумме, так что оно больше не нужно.

Дашкаа: понятно) 1)а зачем в первой задаче последнее действие? ( for k:=1 to LIM do if C[k] = Min then writeln(k); ) почему нельзя сразу без него написать writeln(k) 2) из учебника по программированию. почему перед end точка с запятой не ставится?

Поляков: Дашкаа пишет: 1)а зачем в первой задаче последнее действие? ( for k:=1 to LIM do if C[k] = Min then writeln(k); ) Нужно вывести только номера школ с минимальным количеством участников, а не все. почему перед end точка с запятой не ставится? Это язык Паскаль, там так.


oval: Дашкаа пишет: почему перед end точка с запятой не ставится? можно ставить, а можно нет, ошибки не будет ни в том, ни в другом случае

Поляков: oval пишет: можно ставить, а можно нет С точки зрения транслятора, точка с запятой в этом случае обозначает пустой оператор. См., например, К. Иенсен и Н. Вирт, "Паскаль. Руководство для пользователя" или здесь.

Дашкаа: 1) решить задачу без использования оператора цикла вот как я написала: var street,s: string; k: char; begin readln(s); street:= Copy(s, Pos(' ', s)+1, Pos(' ', s)-1); writeln (street) ; end. программа работает не всегда правильно 2) как правильнее сделать задачу? мой вариант: var s: string; begin read (s); Delete(s,1,Pos(' ', s)); Delete(s,1,Pos(' ', s)); writeln(s); end.

oval: Дашкаа пишет: street:= Copy(s, Pos(' ', s)+1, Pos(' ', s)-1); программа работает не всегда работает правильно функция pos находит первое вхождение подстроки в строку, т.е. если в названии компании 8 символов, то в название улицы копируется подстрока начиная с 9 символа длиной 7 символов должно быть так: Delete(s,1,Pos(' ', s)); // удалили название компании street:= Copy(s, 1, Pos(' ', s)-1); // скопировали название улицы

Дашкаа: oval спасибо:))



полная версия страницы