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

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

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

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

Программа на Паскале Free или Turbo. Циклы

  • Автор темы Автор темы Léon1
  • Дата начала Дата начала

Léon1

С# - learn or die
Регистрация
17 Дек 2011
Сообщения
2,438
Реакции
178
Баллы
0
Программа на Паскале Free или Turbo. Циклы

Пожалуйста помогите написать на Паскале (Free или Тurbo) программу, очень нужно. Сама уже две недели в выходные пробовала программу написать, но ничего не получается, а скоро сдавать нужно. Помогите, хотя бы Задание 1!
Задание 1 (программирование циклических алгоритмов):
Требуется осуществить перевод данного целого (дробного) числа: из троичной системы в десятичную. Чтобы программа работала как для дробного, так и для целого!
Задание 2 (программирование циклических алгоритмов
(с параметром)):
Требуется определить план выпуска продукции, обеспечивающий наибольшую суммарную прибыль:На предприятии организуется побочный цех для использования отходов производства. Цех может освоить выпуск продукции двух видов: столов и книжных шкафов. На производство одного стола и шкафа затрачивается соответственно рабочего времени – С1 человеко-часов и С2 человеко-часов, древесины – D1 м3 и D2 м3, а на производство одного шкафа, кроме того -2 м стекла. Ресурсы ос¬новных материалов в месяц составляют: С человеко-часов рабочего времени, V м3 древесины и S м2 стекла. Прибыль от реализации стола составляет P1 руб., шкафа – P2 руб.
 
Задание 2 (программирование циклических алгоритмов (с параметром)): Требуется определить план выпуска продукции, обеспечивающий наибольшую суммарную прибыль:На предприятии организуется побочный цех для использования отходов производства. Цех может освоить выпуск продукции двух видов: столов и книжных шкафов. На производство одного стола и шкафа затрачивается соответственно рабочего времени – С1 человеко-часов и С2 человеко-часов, древесины – D1 м3 и D2 м3, а на производство одного шкафа, кроме того -2 м стекла. Ресурсы ос¬новных материалов в месяц составляют: С человеко-часов рабочего времени, V м3 древесины и S м2 стекла. Прибыль от реализации стола составляет P1 руб., шкафа – P2 руб.
С Вашего разрешения, я лучше решу задачу 2. Алгоритм:
1. Вводятся исходные данные.
2. Определяется максимально возможное количество столов по человеко-часам и древесине, а также прибыль, если делать только столы.
3. В цикле уменьшаем количество столов на 1 за проход, из оставшихся ресурсов, если такое возможно, делаем шкафы, и каждый раз считаем суммарную прибыль. Сохраняем данные только если эта прибыль превзойдёт ту, что получена на предыдущем шаге.
Программа:
Код:
Const
 S2=2.0;
Var
 C1,C2,C,C_cur,D1,D2,D,D_cur,S:Real;
 Max_t,M1,M2,N_t,N_w,P1,P2,P_cur,P,i,j:LongInt;
BEGIN
 Write('Human resource for 1 table= ');
 Readln(C1);
 Write('Human resource for 1 wardrobe= ');
 Readln(C2);
 Write('Full amount of human resources= ');
 Readln(C);
 Write('Wood for 1 table= ');
 Readln(D1);
 Write('Wood for 1 wardrobe= ');
 Readln(D2);
 Write('Full amount of wood= ');
 Readln(D);
 Write('Full amount of glass= ');
 Readln(S);
 Write('Profit from 1 table (integer)= ');
 Readln(P1);
 Write('Profit from 1 wardrobe (integer)= ');
 Readln(P2);

 {Search of maximal amount of tables}
 M1:=Trunc(C/C1);
 M2:=Trunc(D/D1);
 If M1<M2 then Max_t:=M1 else Max_t:=M2;
 P:=Max_t*P1;
 N_t:=Max_t;
 N_w:=0;
 i:=N_t;
 Repeat
  Dec(i);
  C_cur:=C-C1*i;
  D_cur:=D-D1*i;
  M1:=Trunc(C_cur/C2);
  M2:=Trunc(D_cur/D2);
  If M1<M2 then j:=M1 else j:=M2;
  While S2*j>S do Dec(j);
  P_cur:=i*P1+j*P2;
  If P_cur>P then
   begin
    N_t:=i;
    N_w:=j;
    P:=P_cur;
   end;
 Until i=0;
 Writeln;
 Writeln('Maximal profit corresponds to ',N_t,' tables and ',N_w,' wardrobes');
 Readln
End.
 
Vladimir_S, огромное спасибо! Но не могли бы Вы помочь с Заданием 1! Очень важно. Я первый раз вообще у кого-то прошу помощи на форумах. Просто не могу сделать, и прежде чем попросить много делала, решала. Но увы. Помогите пожалуйста с задачей 1.
 
Vladimir_S, огромное спасибо! Но не могли бы Вы помочь с Заданием 1! Очень важно. Я первый раз вообще у кого-то прошу помощи на форумах. Просто не могу сделать, и прежде чем попросить много делала, решала. Но увы. Помогите пожалуйста с задачей 1.
Ладно, попробую завтра. Просто будь там целые числа, то перевод из троичной в десятичную системы делается "на раз", а вот с дробными...
 
Спасибо огромное! До завтра!
 
Спасибо огромное! До завтра!
Вот, сотворил нечто чудовищное. Но работает:
Код:
Const
 W=['3','4','5','6','7','8','9'];
VAR
 S:String;
 b:Boolean;
 N3,N10,N3_frc_re:Real;
 N3_int,N3_frc,N3_frc0,m,dd10,dd3:LongInt;
 Sign:ShortInt;
 i,N3f_int,N3f_frc,fig:Byte;


BEGIN
 Repeat
  b:=true;
  Write('Enter the number in 3-based system: ');
  Readln(N3);
  STR(N3:0:8,S);
  for i:=1 to length(S) do
   if S[i] in W then
    begin
     Writeln('Wrong input!');
     b:=false;
    end;
 Until b;
 If N3<0 then Sign:=-1 else Sign:=1;
 N3:=Abs(N3);
 N3_int:=Trunc(N3);
 N3_frc_re:=N3-1.0*N3_int;
 m:=1;
 Repeat
  m:=m*10;
  N3_frc:=Round(N3_frc_re*m);
 Until Round(1.0*N3_frc/m*100000000)=Round(N3_frc_re*100000000);
 N10:=0;
 N3_frc0:=N3_frc;
 If N3_int>0 then
  begin
   N3f_int:=Round(Ln(N3_int)/Ln(10)); {Number of figures in integer part
                                       of 3-based number -1}
   For m:=N3f_int downto 1 do
    begin
     dd10:=1;
     for i:=1 to m do dd10:=dd10*10;
     fig:=N3_int div dd10;
     dd3:=1;
     for i:=1 to m do dd3:=dd3*3;
     N10:=N10+fig*dd3;
     N3_int:=N3_int mod dd10;
    end;
   N10:=N10+N3_int;
  end;
 If N3_frc>0 then
  begin
   N3f_frc:=Round(Ln(N3_frc)/Ln(10)); {Number of figures in fractional part
                                       of 3-based number -1}
   For m:=N3f_frc downto 0 do
    begin
     dd10:=1;
     for i:=1 to m do dd10:=dd10*10;
     fig:=N3_frc div dd10;
     dd3:=1;
     for i:=1 to N3f_frc-m+1 do dd3:=dd3*3;
     N10:=N10+1.0*fig/dd3;
     N3_frc:=N3_frc mod dd10;
    end;
  end;
 N10:=N10*Sign;
 Write('N in decimal system is ');
 If N3_frc0=0 then
  Writeln(Round(N10))
 else
  Writeln(N10:0:8);
 Readln;
END.
 
Действительно работает! В принцепе всё понятно, кроме
Until Round(1.0*N3_frc/m*100000000)=Round(N3_frc_re*100000000);
Поясните зачем Вы домножаете на " *100000000 "?
 
Действительно работает! В принцепе всё понятно, кроме
Until Round(1.0*N3_frc/m*100000000)=Round(N3_frc_re*100000000);
Поясните зачем Вы домножаете на " *100000000 "?
Из параноидальности. Видите ли, я интуитивно не очень доверяю проверке на равенство вещественных (real) чисел, хотя на большинстве реализаций Паскаля эта операция вроде бы работает корректно. Тем не менее, предпочитаю на равенство проверять целые числа - так оно спокойнее. А сто миллионов - чтобы захватить разумное количество десятичных разрядов.
Если не нравится, попробуйте так:
Until 1.0*N3_frc/m=N3_frc_re;
 
Огромное спасибо Вам за помощь! Я и не думала, что мне кто поможет.
Сейчас пойду писать отчёты (блок-схемы, псевдокоды). Я очень благодарна!
P.s. У Вас неплохой сайт, останусь здесь. И буду пробовать помогать другим! Спасибо.
 
И буду пробовать помогать другим!
Ох, вот это бы здорово! А то я несколько зашиваюсь: у нашего дорогого студенческого юношества манера - сладко спать весь семестр, а за несколько (это еще в лучшем случае) дней до зачетной недели просыпаться и обнаруживать, что надо сдать лабораторки за полгода, а знаний не хватает даже на задачи типа c=a+b. :D
 
Ох, вот это бы здорово! А то я несколько зашиваюсь: у нашего дорогого студенческого юношества манера - сладко спать весь семестр, а за несколько (это еще в лучшем случае) дней до зачетной недели просыпаться и обнаруживать, что надо сдать лабораторки за полгода, а знаний не хватает даже на задачи типа c=a+b. :D
Да это правда!
Я всё сдаю во время. Просто преподаватель долго не задавала, а потом раз и 2 задачи, и какие! Я итак хорошо учусь, но думаю буду больше стараться! Спасибо Вам огромное.
:tehnari_ru_288:
 
Успехов!...
 
Const W=['3','4','5','6','7','8','9']; VAR S:String; b:Boolean; N3,N10,N3_frc_re:Real; N3_int,N3_frc,N3_frc0,m,dd10,dd3:LongInt; Sign:ShortInt; i,N3f_int,N3f_frc,fig:Byte; BEGIN Repeat b:=true; Write('Enter the number in 3-based system: '); Readln(N3); STR(N3:0:8,S); for i:=1 to length(S) do if S in W then begin Writeln('Wrong input!'); b:=false; end; Until b; If N3<0 then Sign:=-1 else Sign:=1; N3:=Abs(N3); N3_int:=Trunc(N3); N3_frc_re:=N3-1.0*N3_int; m:=1; Repeat m:=m*10; N3_frc:=Round(N3_frc_re*m); Until Round(1.0*N3_frc/m*100000000)=Round(N3_frc_re*100000000); N10:=0; N3_frc0:=N3_frc; If N3_int>0 then begin N3f_int:=Round(Ln(N3_int)/Ln(10)); {Number of figures in integer part of 3-based number -1} For m:=N3f_int downto 1 do begin dd10:=1; for i:=1 to m do dd10:=dd10*10; fig:=N3_int div dd10; dd3:=1; for i:=1 to m do dd3:=dd3*3; N10:=N10+fig*dd3; N3_int:=N3_int mod dd10; end; N10:=N10+N3_int; end; If N3_frc>0 then begin N3f_frc:=Round(Ln(N3_frc)/Ln(10)); {Number of figures in fractional part of 3-based number -1} For m:=N3f_frc downto 0 do begin dd10:=1; for i:=1 to m do dd10:=dd10*10; fig:=N3_frc div dd10; dd3:=1; for i:=1 to N3f_frc-m+1 do dd3:=dd3*3; N10:=N10+1.0*fig/dd3; N3_frc:=N3_frc mod dd10; end; end; N10:=N10*Sign; Write('N in decimal system is '); If N3_frc0=0 then Writeln(Round(N10)) else Writeln(N10:0:8); Readln; END.

Вы бы не смогли подсказать, как будет выглядеть эта программа для перевода из десятичной системы счисления в троичную!:tehnari_ru_942:
 
Вы бы не смогли подсказать, как будет выглядеть эта программа для перевода из десятичной системы счисления в троичную!
Посмотрю вечером, если будет время.
 
Пожалуйста.......:tehnari_ru_942:
Пожалуйста. Правда, это не совсем та программа: тут сделано несколько иначе. Но работает.
Код:
Const
 Max_Number_of_Figures=5;
VAR
 N10,N3,N10_frc_re,r:Real;
 N10_int,m:LongInt;
 Sign:ShortInt;
 fig:Byte;


BEGIN
 Write('Enter the number in decimal system: ');
 Readln(N10);
 If N10<0 then Sign:=-1 else Sign:=1;
 N10:=Abs(N10);
 N10_int:=Trunc(N10);
 N10_frc_re:=N10-1.0*N10_int;
 N3:=0;
 If N10_int>0 then
  begin
   m:=1;
   Repeat
    m:=m*3;
   Until m>N10_int;
   Repeat
    m:=m div 3;
    fig:=N10_int div m;
    N10_int:=N10_int mod m;
    N3:=N3*10+fig;
   Until m=1;
  end;
 If N10_frc_re>0 then
  begin
   r:=1;
   m:=0;
   Repeat
    r:=r/10;
    Inc(m);
    N10_frc_re:=N10_frc_re*3;
    fig:=Trunc(N10_frc_re);
    N10_frc_re:=N10_frc_re-fig;
    N3:=N3+fig*r;
   Until m=Max_Number_of_Figures;
  end;
 N3:=N3*Sign;
 Write('N in 3-based system is ');
 If N10_frc_re=0 then
  Writeln(Round(N3))
 else
  Writeln(N3:0:Max_Number_of_Figures);
 Readln;
END.
 
Vladimir_S, спасибо большое!
Программа работает. Что же я без Вас делала (и конечно без сайта).
Спасибо! С Рождеством!:tehnari_ru_208:
 
Назад
Сверху