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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2011, 12:56   #1
alex14111
 
Регистрация: 14.01.2011
Сообщений: 5
Восклицание ЕГЭ С1,С2,С3 ПАСКАЛЬ

Добрый день граждане форумчане! Есть задания тестового ЕГЭ по информатике с решениями. Большая просьба, кому не лень, напишите комментарии к решениям, как все делается, что где означает, почему так и т.д. (сегодня желательно, буду очень благодарен), а то от этих решений толку для меня нет, т.к. я не понимаю просто как это делается .... а готовиться к ЕГЭ то надо....

Заранее спасибо.



С1. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, у — действительные числа) и определяет принадлежность точки заштрихованной области, включая её границы (см. рис. 37). Программист торопился и написал программу неправильно. Последовательно выполните следующее: 1) приведите пример таких чисел х, у, при которых программа неверно решает поставленную задачу; 2) укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы (это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).



Код:
var x,y:real;
begin readln(x,y); 
if x*x+y*y<=9 then if y>=x*x then write (‘принадлежит’)  else  write('He принадлежит’);
end.
Решение:
Код:
var x, у:  real;
begin
readln(x, y);
if (x*x + y*y<=9) and (y>=x*x) and (y>=0) 
then write(‘принадлежит’)
else
  write(‘He принадлежит’)
end.



C2. Дан целочисленный массив из 23-х элементов. Элементы массива могут принимать значения от 1500 до 2000 — количество знаков в статье. На сайт принимаются статьи размером не более 1800 знаков. Гарантируется, что такие значения в базе данных есть. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит на экран размер самой большой статьи, которую можно разместить на сайте. Исходные данные объявлены так, как показано ниже. Запрещается использовать не объявленные переменные, но разрешается не использовать часть из них. В качестве ответа вам необходимо привести фрагмент программы на любом языке программирования (укажите название и версию языка программирования, например, Borland Pascal 7.0) или описание алгоритма на естественном языке, который должен находиться на месте многоточия.
Код:
const  N=23;
var a: array[1..N] of integer;
i, j, max:   integer;
begin
for i:=1 to N do readln(a[i]);
…
end.
Решение:
Код:
max:= 1500;
for i := 1 to N do
if (a[i] <= 1800) and (a[i] > max) then max := a[i];
writeln(max);


C4. Завод по огранке драгоценных камней приобрёл сейф повышенной надёжности. Для определения драгоценных камней, которые необходимо положить в сейф, сначала отбираются 5% самых дорогих камней. Если у самого дешёвого камня из вошедших в группу 5% самых дорогих оказывается ценовая категория такая же, как и у нескольких других, то эти камни тоже включаются в группу камней для размещения в сейфе повышенной надёжности в том случае, если их ценовая категория не менее15. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая по результатам входных данных будет определять, какую минимальную цену должен иметь драгоценный камень, чтобы его поместили в сейф повышенной надёжности. На вход программе сначала подаётся общее количество камней на складе N. В каждой из следующих N строк находится информация по каждому камню отдельно в следующем формате:

< Название драгоценного камня > < Код> < Ценовая категория >, где < Название драгоценного камня> — строка, состоящая не более чем из 20 символов, <Код> — строка, состоящая не более чем из 15 символов, <Ценовая категория > — целое число от 1 до 20.

< Название драгоценного камня >, < Код> и < Ценовая категория> разделены одним пробелом. Пример входной строки: Рубин P1234 13.

Программа должна выводить максимальную Ценовую категорию драгоценного камня, который необходимо положить в сейф повышенной надёжности.

Решение:
Код:
var kcenkat: array[1..20] of integer;
с: char;
i, N, b, S, minckat : integer;
begin
for i:=0 to 20 do kcenkat[i]:=0;
readln(N);
for i:=1 to N do
begin
repeat
read(c);
until c=’ ‘;
repeat
read(c);
until с=’ ‘;{считан код)
readln(b);
kcenkat[b]:=kcenkat[b]+1;
end;
S:=0;
b:=20;
while S +kcenkat[b]<=N*0.05 do
begin
if kcenkat[b]>0 then
begin
S:=S +kcenkat[b];
minckat:=b;
end;
b:=b-1;
end; 
if S+1<=N*0.05 then 
if b>=15 then minckat:=b
writeln(minckat);
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 03.03.2011 в 19:57.
alex14111 вне форума Ответить с цитированием
Старый 03.03.2011, 16:05   #2
JinglsOrg
Пользователь
 
Аватар для JinglsOrg
 
Регистрация: 27.01.2011
Сообщений: 48
По умолчанию

C1:

var x,y:real; //объявляет переменные и задаёт им тип, т.е. если вы хотите использовать переменные(яйчейки в которые можно записать информацию, а так же эту инф. извлечь), вам нужно в начале программы их перечислить и задать тип(типы бывают: integer-числа не меньше -2147483648 и не больше 2147483647, могут быть только целыми; real-ну.. тоже числа только они могут содержать гораздо большие и меньшие числа и могут быть не целыми.
begin readln(x,y); (begin-начало программы; readln и real - команда которая требует от пользователя что-то ввсести, в скобочках записаны переменные в которые и будет записываться то что ввёл пользов, если написано readln - то вам нужно вводить данные через энтер, т.е. ввести что-то, нажать энтер - заполнится первая переменная, ввсети опять что-то и опять нажать энтер - заполнится вторая переменная и так если в скобочках миллион переменных, то вам придётся миллион раз так писать. read же позволяет перечислять всё не через энтер, а через пробел.)
if x*x+y*y<=9 then if y>=x*x then write (‘принадлежит’) else write('He принадлежит’);
end.

if x+y=1 then x=12 else y=12; ---если x+y=1 то x=12 иначе y=12;
write - выводит на экран то что находится в скобочках, переменные можно перечислять через запятую, какой то текст надо засовывать ещё и в кавычки.
в конце каждой команды надо ставить точкусзапятой-";"
чтобы завершить прогамму прописать "end."
write отличается от writeln тем что write выводит просто текст, а writeln в конце текста ставить энтер.
надеюсь геомертию вы знаете достаточно что бы понять где переписать.

единственное что ещё надо это "and" - 'и':
if (x*x + y*y<=9) and (y>=x*x) and (y>=0) then write(‘принадлежит’) -- если (x*x+y*y<=9) и (y>=x*x) и (y>=0) то вывести на экран('принадлежит').
Всё написанное мной является лично моим мнением за исключением когда указан источник данных.
JinglsOrg вне форума Ответить с цитированием
Старый 03.03.2011, 16:13   #3
alex14111
 
Регистрация: 14.01.2011
Сообщений: 5
По умолчанию

JinglsOrg, благодарю!
alex14111 вне форума Ответить с цитированием
Старый 03.03.2011, 16:31   #4
JinglsOrg
Пользователь
 
Аватар для JinglsOrg
 
Регистрация: 27.01.2011
Сообщений: 48
По умолчанию

С2:
const N=23; //объявление констант - присваивает какому то элементу какое то значение и это значиение в этом эллементе(N) изменить нельзя, заметьте что присваивание констант отличается от присваивания типов тем что у одних стоит знак равно а у других двоеточие.
var a: array[1..N] of integer; //var-объявление переменных пока не появится код который не объявляет их, в данном случае будет объявлять до команды begin; переменной "a" присваивается массивность т.е. она превращается в таблицу с одной строкой, в квадратных скобках перечисляются номера яйчеек, если между двумя цифрами поставить так две точки, то это перечисление, т.е. в данном случае яйчеек будет 23 с номерами от 1 до 23 соответсвенно; дальше всем яйчейкам присваивается тип. Если тип integer или real - они оба могут содержать только цифры, никаких символов или букв, если char - то можно в яйчейку таблицы вписать один любой символ - даже цифру, только потом эту цифру нельзя будет ни складывать, ни умножать.=); и наверное последний тип который вам понадобится это string - тогда в яйчейку можно будет вписывать не один символ на несколько - не больше 255.
i, j, max: integer; //понятно - в i,j и max можно прописывать целые числа.
begin //поехали
for i:=1 to N do readln(a[i]); //запускает цикл и каждый повтор присваивает переменной "i" число большее чем оно было на единицу. в первый раз i будет равняться еденице в последний(тогда программа пойдёт читать код дальше) будет равен "N", а "N" у нас 23, т.е. 23 раза повторится цикл
max:= 1500; //присваивает переменной max число 1500; обратите внимание что присваивание в паскале ведётся с помощью ":=" не забывайте двоиточие; ах да после "do" пишется команда которую будет выполнять прога, в данном случае она 23 раза попросит ввести числа для всех яйчеек таблицы от первой и до 23-ей.
for i := 1 to N do //опять цикл
if (a[i] <= 1800) and (a[i] > max) then max := a[i]; //уже было: a[i] - это яйчейка таблицы массива где "[i]" - номер яйчейки, сдесь он опять все яйчейки переберёт,
writeln(max); если a[i] меньше 1800 и больше max то max присваивается a[i]- т.е. находит самое большое число в таблице массива.
end. //конец.

С3: ну тут просто объяснить что делает программа без полезно ведь у вас будет другая. Здесь нужно только учить язык - скачайте "Pascal ABC" и пробуйте - там в помощи написано всё что вам надо.
Всё написанное мной является лично моим мнением за исключением когда указан источник данных.
JinglsOrg вне форума Ответить с цитированием
Старый 03.03.2011, 16:56   #5
alex14111
 
Регистрация: 14.01.2011
Сообщений: 5
По умолчанию

JinglsOrg, жаль конечно с С4, ну и ладно, спасибо Вам большое за комментарии
alex14111 вне форума Ответить с цитированием
Старый 03.03.2011, 19:55   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

C1 решение неправильное.
почему, поясню.
первая часть задания:
Код:
пример таких чисел х, у, при которых программа неверно решает поставленную задачу
например x=-1 y = 1
это точка в левой части гиберболы, она не попадает в заштрихованную область, однако программа скажет, что попадает.

и решение, которое приведено не решает эту проблему.
правильно так:
Код:
var x, у: real;
begin
readln(x, y);
if (x*x + y*y<=9) and (y>=x*x) and (x>=0) then write(‘принадлежит’)
else
write(‘He принадлежит’)
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.03.2011, 20:34   #7
alex14111
 
Регистрация: 14.01.2011
Сообщений: 5
По умолчанию

Хм.. решение из сборника ЕГЭ было ..
alex14111 вне форума Ответить с цитированием
Старый 03.03.2011, 20:51   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Хм.. решение из сборника ЕГЭ было ..
возможно..

Ну тут может множество причин, начиная от того, что рисунок другой или в решении опечатка, или Вы неправильно скопировали/набрали текст и заканчивая тем, что я не прав...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сдаю ЕГЭ по информатике, надо выучить паскаль. Nub2010 Помощь студентам 12 21.10.2010 15:32
sscanf (ЕГЭ) DenisS0 Общие вопросы C/C++ 2 27.05.2010 01:45
ЕГЭ Xcopy Помощь студентам 6 05.02.2010 14:44
ЕГЭ по информатике __STDC__ Свободное общение 39 16.06.2009 16:57