Автор | Сообщение |
|
Отправлено: 19.01.13 17:01. Заголовок: с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
[только новые]
|
|
|
| Администратор
|
Сообщение: 445
|
|
Отправлено: 20.01.13 08:19. Заголовок: Дашкаа пишет: Я не п..
Дашкаа пишет: цитата: | Я не понимаю, как мы считаем именно те школы, от которых заявлен один участник. |
|
После завершения чтения данных выполняется поиск минимального значения в массиве счетчиков 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 добавляется к сумме, так что оно больше не нужно.
|
|
|
|
Отправлено: 31.01.13 22:25. Заголовок: понятно) 1) зачем в ..
понятно) 1)а зачем в первой задаче последнее действие? ( for k:=1 to LIM do if C[k] = Min then writeln(k); ) почему нельзя сразу без него написать writeln(k) 2) из учебника по программированию. почему перед end точка с запятой не ставится?
|
|
|
|
| Администратор
|
Сообщение: 455
|
|
Отправлено: 31.01.13 22:32. Заголовок: Дашкаа пишет: 1)а за..
Дашкаа пишет: цитата: | 1)а зачем в первой задаче последнее действие? ( for k:=1 to LIM do if C[k] = Min then writeln(k); ) |
|
Нужно вывести только номера школ с минимальным количеством участников, а не все. цитата: | почему перед end точка с запятой не ставится? |
|
Это язык Паскаль, там так.
|
|
|
|
| постоянный участник
|
Сообщение: 153
|
|
Отправлено: 01.02.13 13:56. Заголовок: Дашкаа пишет: почем..
Дашкаа пишет: цитата: | почему перед end точка с запятой не ставится? |
| можно ставить, а можно нет, ошибки не будет ни в том, ни в другом случае
|
|
|
|
| Администратор
|
Сообщение: 456
|
|
Отправлено: 01.02.13 14:09. Заголовок: oval пишет: можно ст..
oval пишет: цитата: | можно ставить, а можно нет |
|
С точки зрения транслятора, точка с запятой в этом случае обозначает пустой оператор. См., например, К. Иенсен и Н. Вирт, "Паскаль. Руководство для пользователя" или здесь.
|
|
|
|
Отправлено: 10.02.13 16:47. Заголовок: 1) решить задачу без..
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.
|
|
|
|
| постоянный участник
|
Сообщение: 160
|
|
Отправлено: 10.02.13 20:43. Заголовок: Дашкаа пишет: stre..
Дашкаа пишет: цитата: | 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); // скопировали название улицы
|
|
|
|
Отправлено: 12.02.13 21:34. Заголовок: oval спасибо:))..
oval спасибо:))
|
|
|
|