• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите пожалуйста. Pascal ABC

brickbazuka

Ученик
Регистрация
12 Янв 2016
Сообщения
11
Реакции
0
Баллы
0
Помогите пожалуйста. Pascal ABC

1.Имеются сведения о количестве проданных билетов в 17-ти вагонах поезда. Найти наименее загруженный вагон, учитывая, что количество мест в вагоне зависит от типа вагона: в мягком и купейном вагонах — по 36 мест, а в плацкартном — 46 мест.
2.Программу написать с использованием подпрограмм (процедуры или функции)
Составить программу для проверки, можно ли заданное натуральное число N представить в виде куба простого числа.
 
2.Программу написать с использованием подпрограмм (процедуры или функции)
Составить программу для проверки, можно ли заданное натуральное число N представить в виде куба простого числа.

Код:
function Proverka(an:integer; var at:integer):boolean;
var  e,k:Real;
begin
     e:=0.00001;
      k:=Exp((1/3)*Ln(an));
       if Frac(k)<e
        then
         begin
           Proverka:=true ;
           at:=Trunc(k);
         end
        else Proverka:=false;
end;
var  n,t:integer;
begin
      Write('N = ');
       Readln(n);
        Writeln;
     t:=0;
     if Proverka(n,t)
      then Writeln('DA rezultat = ',t)
      else Writeln('NET');
     Readln;
end.
 
2.Программу написать с использованием подпрограмм (процедуры или функции) Составить программу для проверки, можно ли заданное натуральное число N представить в виде куба простого числа.
Код:
Var
 N,i,Q:Integer;
 BLN:Boolean;

Function Prime(J:Integer):Boolean;
Var
 m:Integer;
 b:Boolean;
begin
 b:=true;
 if J>3 then
  begin
   m:=(J div 2)+1;
   Repeat
    Dec(m);
    If (J mod m)=0 then b:=false;
   Until (b=false) or (m=2);
  end;
 Prime:=b;
end;

Begin
 Write('N = ');
 Readln(N);
 Q:=0;
 Repeat
  Inc(Q);
  BLN:=Prime(Q) and (Q*Q*Q=N);
 Until BLN or (Q*Q*Q>N);
 if BLN then
  Writeln('Yes: ',N,' = ',Q,'*',Q,'*',Q)
 else
  Writeln('No');
End.
 
Женя, извини, но что-то у тебя не то:
1. Где проверка на то, что кубический корень - ПРОСТОЕ число?
2. В функциях "var" не употребляется: это тип формального параметра процедуры.
3. Что означает t? Какой в нем смысл, если ему присваивается глухо нулевое значение?
 
1. А вот до простого и не дочитал
2. Первый раз слышу, что "var" не употребляется в функциях. Но я слышал, что если функция кроме прямого результата делает ещё что-то, то это очень даже хорошо.

Дописал:
Код:
function Prostoe(aa:integer):boolean;
var  pr:boolean;
      d:integer;
begin
     if aa<1
      then pr:=false
      else
       begin
         pr:=true;
         for d:=2 to (aa div 2) do
          if (aa mod d=0) then
           begin
             pr:=false;
             Break;
           end;
       end;
      Prostoe:=pr;
end;
function Proverka(an:integer; var at:integer):boolean;
var  e,k:Real;
     a:integer;
begin
     e:=0.00001;
      k:=Exp((1/3)*Ln(an));
       if Frac(k)<e
        then
         begin
           a:=Trunc(k);
            if Prostoe(a) then
             begin
               Proverka:=true ;
               at:=a;
             end
         end
        else Proverka:=false;
end;
var  n,t:integer;
begin
      Write('N = ');
       Readln(n);
        Writeln;
     t:=0;
     if Proverka(n,t)
      then Writeln('DA rezultat = ',t,'*',t,'*',t)
      else Writeln('NET');
     Readln;
end.
 
Спасибо большое!А первую программу кто-нибудь сможет помочь?
 
2. Первый раз слышу, что "var" не употребляется в функциях. Но я слышал, что если функция кроме прямого результата делает ещё что-то, то это очень даже хорошо.
Женя, я, признаться, смущен и озадачен. Впервые вижу такой гибридный тип подпрограмм. Интересно. Ладно, будем разбираться. "Век живи, век учись - дураком помрешь". Это я о себе.
 
Спасибо большое!А первую программу кто-нибудь сможет помочь?
Тут так. Вопрос.
Имеются сведения
Где и в каком виде эти сведения "имеются"? Сколько каких вагонов в составе?
Больше в условии не дано ничего, скорее всего произвольные значения
 
Владимир Игоревич, насколько помню, как в процедуре, так и в функции присутствует раздел объявления переменных, при этом функция оформляется в следующем виде:

Код:
Function <имя функции>(формальные параметры): тип значения функции;
Var
  . . . 
Begin
  . . .
End ;
 
Владимир Игоревич, насколько помню, как в процедуре, так и в функции присутствует раздел объявления переменных, при этом функция оформляется в следующем виде:
Давид, абсолютно правильно! Дискуссия тут по одной тонкости: в списке параметров процедуры часть формальных параметров ставится только с указанием типов, а часть - с префиксом "var":
Procedure Blablabla(x:real; y:integer; var z:real; var t:boolean);
Грубо говоря, те, что без "var" - это входные параметры, с "var" - выходные, т.е. те, значение которых вычисляются в процедуре (на самом деле там всё несколько сложнее).
В то же время в функции (как я считал доселе) все параметры являются входными (выходной - это идентификатор самой функции), поэтому префиксу "var" в списке формальных параметров функции делать нечего.
Однако, вот поди ж ты, существует такая гибридная конструкция - функция с возможностями процедуры.
Не знал.
 
Больше в условии не дано ничего, скорее всего произвольные значения
Ладно, получите. Поскольку из условия не ясно, означает ли минимальная загрузка минимум абсолютного числа пассажиров в вагоне или же минимальную относительную заполненность вагона (отношение числа пассажиров к вместимости), в программе вычисляются обе величины.
Код:
Const
 Ncar=17;

Var
 Num_of_Plac,Occ_Plac,Occ_Prc:Array[1..Ncar] of Byte;
 Type_of_Car:Array[1..Ncar] of String;
 i,j,Imin_Abs,Imin_Rel:Byte;

Begin
 Randomize;
 for i:=1 to Ncar do
  begin
   j:=Random(3);
   Case j of
     0:begin
        Num_of_Plac[i]:=46;
        Type_of_Car[i]:='   Numbered';
       end;
     1:begin
        Num_of_Plac[i]:=36;
        Type_of_Car[i]:='Compartment';
       end;
     2:begin
        Num_of_Plac[i]:=36;
        Type_of_Car[i]:='Soft-seated';
       end;
   end; {Case}
  end;
 for i:=1 to Ncar do
  Occ_Plac[i]:=Random(Num_of_Plac[i]+1);
 for i:=1 to Ncar do
  Occ_Prc[i]:=Round(Occ_Plac[i]/Num_of_Plac[i]*100);
 Writeln(' N      Type of carriage      Places     Occupied        %');
 for i:=1 to Ncar do
  Writeln(i:2,'         '+Type_of_Car[i]+'          ',Num_of_Plac[i],'          ',
          Occ_Plac[i]:2,'         ',Occ_Prc[i]:3);
 Writeln;
 Imin_Abs:=1;
 Imin_Rel:=1;
 for i:=1 to Ncar do
  begin
   if Occ_Plac[i]<Occ_Plac[Imin_Abs] then Imin_Abs:=i;
   if Occ_Prc[i]<Occ_Prc[Imin_Rel] then Imin_Rel:=i;
  end;
 Writeln('Carriage with absolute minimal occupation is ',Imin_Abs,
         ' (',Occ_Plac[Imin_Abs],' passengers)');
 Writeln('Carriage with relative minimal occupation is ',Imin_Rel,
         ' (',Occ_Prc[Imin_Rel],'%)');
End.
 
Ладно, получите. Поскольку из условия не ясно, означает ли минимальная загрузка минимум абсолютного числа пассажиров в вагоне или же минимальную относительную заполненность вагона (отношение числа пассажиров к вместимости), в программе вычисляются обе величины.
Код:
Const
 Ncar=17;

Var
 Num_of_Plac,Occ_Plac,Occ_Prc:Array[1..Ncar] of Byte;
 Type_of_Car:Array[1..Ncar] of String;
 i,j,Imin_Abs,Imin_Rel:Byte;

Begin
 Randomize;
 for i:=1 to Ncar do
  begin
   j:=Random(3);
   Case j of
     0:begin
        Num_of_Plac[i]:=46;
        Type_of_Car[i]:='   Numbered';
       end;
     1:begin
        Num_of_Plac[i]:=36;
        Type_of_Car[i]:='Compartment';
       end;
     2:begin
        Num_of_Plac[i]:=36;
        Type_of_Car[i]:='Soft-seated';
       end;
   end; {Case}
  end;
 for i:=1 to Ncar do
  Occ_Plac[i]:=Random(Num_of_Plac[i]+1);
 for i:=1 to Ncar do
  Occ_Prc[i]:=Round(Occ_Plac[i]/Num_of_Plac[i]*100);
 Writeln(' N      Type of carriage      Places     Occupied        %');
 for i:=1 to Ncar do
  Writeln(i:2,'         '+Type_of_Car[i]+'          ',Num_of_Plac[i],'          ',
          Occ_Plac[i]:2,'         ',Occ_Prc[i]:3);
 Writeln;
 Imin_Abs:=1;
 Imin_Rel:=1;
 for i:=1 to Ncar do
  begin
   if Occ_Plac[i]<Occ_Plac[Imin_Abs] then Imin_Abs:=i;
   if Occ_Prc[i]<Occ_Prc[Imin_Rel] then Imin_Rel:=i;
  end;
 Writeln('Carriage with absolute minimal occupation is ',Imin_Abs,
         ' (',Occ_Plac[Imin_Abs],' passengers)');
 Writeln('Carriage with relative minimal occupation is ',Imin_Rel,
         ' (',Occ_Prc[Imin_Rel],'%)');
End.
Спасибо огромное!
 
Назад
Сверху