kampina1
?>

Напишите программу, которая определяет, попадает ли заданная точка в заштрихованную область. Границы не входят в область. (С++)

Информатика

Ответы

fouettearoma
// PascalABC.Net 3.0, сборка 1052
const
  nstud=100;
  npred=10;
type
  date=record
    den:byte;
    mes:byte;
    god:integer
  end;
  St=record
    datr:date;
    famnam:string;
    gender:0..1;
    ball:array[1..npred] of 2..5
  end;
var
  ns,np,nd,i,j:byte;
  R:array[1..nstud] of St;
  Dolg,flagp:boolean;
  cdate:date;
begin
  Write('Количество студентов: '); Read(ns);
  Write('Количество предметов: '); Read(np);
  Writeln('Вводите данные по каждому студенту');
  Writeln('В первой строке через пробел дата рождения ДД ММ ГГГГ');
  Writeln('Во второй строке фамилия, пробел, имя');
  Writeln('В третьей строке пол (0 - мужской, 1 - женский)');
  Writeln('В четвертой строке полученные через пробел');
  for i:=1 to ns do begin
    Writeln('*** Студент ',i,' ***');
    With R[i] do begin
      Readln(datr.den,datr.mes,datr.god);
      Readln(famnam); Readln(gender);
      for j:=1 to np do Read(ball[j])
    end
  end;
  { 1 }
  Writeln;
  Writeln('Список студентов-задолжников');
  nd:=0;
  for i:=1 to ns do begin
    With R[i] do begin
      j:=1; Dolg:=false;
      repeat
        if ball[j]=2 then begin Dolg:=true; Inc(nd) end;
        Inc(j)
      until Dolg or (j>np);
      if Dolg then Writeln(famnam)
    end
  end;
  if nd=0 then Writeln('Задолжников нет!');
  { 2 }
  Writeln;
  Writeln('Введите дату запроса в формате ДД, ММ, ГГГГ: ');
  Read(cdate.den,cdate.mes,cdate.god);
  Writeln;
  Writeln('Список студентов, которым исполнилось 20 лет');
  nd:=0;
  for i:=1 to ns do begin
    With R[i] do begin
      flagp:=false;
      if cdate.god-datr.god>20 then flagp:=true
      else
        if cdate.god-datr.god=20 then begin
          if cdate.mes>datr.mes then flagp:=true
          else begin
            if cdate.mes=datr.mes then flagp:=(cdate.den>=datr.den)
          end
        end;
      if flagp then begin Writeln(famnam); Inc(nd) end;
    end
  end;
  if nd=0 then Writeln('Нет студентов, которым исполнилось 20 лет!');
end.

Тестовое решение:
Количество студентов: 5
Количество предметов: 4
Вводите данные по каждому студенту
В первой строке через пробел дата рождения ДД ММ ГГГГ
Во второй строке фамилия, пробел, имя
В третьей строке пол (0 - мужской, 1 - женский)
В четвертой строке полученные через пробел
*** Студент 1 ***
5 10 1996
Иванов Иван
0
4 3 5 5
*** Студент 2 ***
12 8 1997
Петров Петр
0
3 2 3 4
*** Студент 3 ***
9 10 1998
Сидорова Наталья
1
3 4 4 2
*** Студент 4 ***
6 9 1994
Козлова Ирина
1
5 4 4 5
*** Студент 5 ***
12 3 1995
Тарасов Константин
0
3 5 5 4

Список студентов-задолжников
Петров Петр
Сидорова Наталья

Введите дату запроса в формате ДД, ММ, ГГГГ:
2 11 2015

Список студентов, которым исполнилось 20 лет
Козлова Ирина
Тарасов Константин
joini09
Задача 5. “Кузнечик” В одной стране жил-был волшебный кузнечик, умеющий прыгать на любое расстояние. А ко- гда он изучил тему «числовые последовательности», то решил прыгать по дороге с нумерованны- ми клетками по придуманному им правилу: 1 2 4 7 11 16 22 29 и так далее, дальше продолжи- те сами. А другой кузнечик решил подкараулить его в какой-нибудь клетке N, чтобы не дать уска- кать в бесконечность ему, предложите алгоритм, проверяющий, попадет ли первый кузнечик в клетку N? Решение: Можно догадаться, что каждое n-ное число bn = bn-1 + n – 1, где b1 = 1. Можно также догадаться, что каждое число нашей прогрессии bn = 1 + 1 + 2 + 3 + … + n – 1 = 1 + Sn , где Sn – это сумма арифметической прогрессии с a1=0 и d=1. И по формуле прогрессии получаем: bn = 1 + n(n-1)/2. Остается проверить, равно ли введенное N какому-нибудь bn. Решаем уравнение: N = 1 + n(n-1)/2, квадратное уравнение: n2 – n + 2 – 2N = 0, D = 1 – 4(2-2N) = 8N – 7, n = (1+sqrt(8N-7))/2 – берем только положительный ответ. Получился алгоритм: Подставляем N в формулу для n и если n – целое, то кузнечик попадет в клетку с номером N. Вопрос только, как проверить, целое ли n. Для этого проверяем, достаточно ли мало отклонение его от его округле- ния: если abs( n – round( n ) ) < 0,000000000000001, то n – скорее всего целое. По крайней мере с точностью до 0,000000000000001.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Напишите программу, которая определяет, попадает ли заданная точка в заштрихованную область. Границы не входят в область. (С++)
Ваше имя (никнейм)*
Email*
Комментарий*