Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 17.12.2011, 16:08   #1 (permalink)
Léon
С# - learn or die
 
Аватар для Léon
 
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
Unhappy Программа на Паскале Free или Turbo. Циклы

Пожалуйста помогите написать на Паскале (Free или Тurbo) программу, очень нужно. Сама уже две недели в выходные пробовала программу написать, но ничего не получается, а скоро сдавать нужно. Помогите, хотя бы Задание 1!
Задание 1 (программирование циклических алгоритмов):
Требуется осуществить перевод данного целого (дробного) числа: из троичной системы в десятичную. Чтобы программа работала как для дробного, так и для целого!
Задание 2 (программирование циклических алгоритмов
(с параметром)):
Требуется определить план выпуска продукции, обеспечивающий наибольшую суммарную прибыль:На предприятии организуется побочный цех для использования отходов производства. Цех может освоить выпуск продукции двух видов: столов и книжных шкафов. На производство одного стола и шкафа затрачивается соответственно рабочего времени – С1 человеко-часов и С2 человеко-часов, древесины – D1 м3 и D2 м3, а на производство одного шкафа, кроме того -2 м стекла. Ресурсы ос¬новных материалов в месяц составляют: С человеко-часов рабочего времени, V м3 древесины и S м2 стекла. Прибыль от реализации стола составляет P1 руб., шкафа – P2 руб.
Léon вне форума   Ответить с цитированием

Старый 17.12.2011, 16:08
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ознакомьтесь с этими топиками, наверняка тут есть ответ который вам нужен

Программа вычисления интеграла на Паскале
Turbo Pascal с Turbo Vision
Циклы VBA
Программа на паскале
Программа на Паскале

Старый 17.12.2011, 18:53   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 11Angelav Посмотреть сообщение
Задание 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 вне форума   Ответить с цитированием
Старый 17.12.2011, 21:58   #3 (permalink)
Léon
С# - learn or die
 
Аватар для Léon
 
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
По умолчанию

Vladimir_S, огромное спасибо! Но не могли бы Вы помочь с Заданием 1! Очень важно. Я первый раз вообще у кого-то прошу помощи на форумах. Просто не могу сделать, и прежде чем попросить много делала, решала. Но увы. Помогите пожалуйста с задачей 1.
Léon вне форума   Ответить с цитированием
Старый 17.12.2011, 22:07   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 11Angelav Посмотреть сообщение
Vladimir_S, огромное спасибо! Но не могли бы Вы помочь с Заданием 1! Очень важно. Я первый раз вообще у кого-то прошу помощи на форумах. Просто не могу сделать, и прежде чем попросить много делала, решала. Но увы. Помогите пожалуйста с задачей 1.
Ладно, попробую завтра. Просто будь там целые числа, то перевод из троичной в десятичную системы делается "на раз", а вот с дробными...
Vladimir_S вне форума   Ответить с цитированием
Старый 17.12.2011, 22:16   #5 (permalink)
Léon
С# - learn or die
 
Аватар для Léon
 
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
По умолчанию

Спасибо огромное! До завтра!
Léon вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 18.12.2011, 10:18   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 11Angelav Посмотреть сообщение
Спасибо огромное! До завтра!
Вот, сотворил нечто чудовищное. Но работает:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 18.12.2011, 16:35   #7 (permalink)
Léon
С# - learn or die
 
Аватар для Léon
 
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
По умолчанию

Действительно работает! В принцепе всё понятно, кроме
Until Round(1.0*N3_frc/m*100000000)=Round(N3_frc_re*100000000);
Поясните зачем Вы домножаете на " *100000000 "?
Léon вне форума   Ответить с цитированием
Старый 18.12.2011, 17:21   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 11Angelav Посмотреть сообщение
Действительно работает! В принцепе всё понятно, кроме
Until Round(1.0*N3_frc/m*100000000)=Round(N3_frc_re*100000000);
Поясните зачем Вы домножаете на " *100000000 "?
Из параноидальности. Видите ли, я интуитивно не очень доверяю проверке на равенство вещественных (real) чисел, хотя на большинстве реализаций Паскаля эта операция вроде бы работает корректно. Тем не менее, предпочитаю на равенство проверять целые числа - так оно спокойнее. А сто миллионов - чтобы захватить разумное количество десятичных разрядов.
Если не нравится, попробуйте так:
Until 1.0*N3_frc/m=N3_frc_re;
Vladimir_S вне форума   Ответить с цитированием
Старый 18.12.2011, 17:28   #9 (permalink)
Léon
С# - learn or die
 
Аватар для Léon
 
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
По умолчанию

Огромное спасибо Вам за помощь! Я и не думала, что мне кто поможет.
Сейчас пойду писать отчёты (блок-схемы, псевдокоды). Я очень благодарна!
P.s. У Вас неплохой сайт, останусь здесь. И буду пробовать помогать другим! Спасибо.
Léon вне форума   Ответить с цитированием
Старый 18.12.2011, 17:34   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 11Angelav Посмотреть сообщение
И буду пробовать помогать другим!
Ох, вот это бы здорово! А то я несколько зашиваюсь: у нашего дорогого студенческого юношества манера - сладко спать весь семестр, а за несколько (это еще в лучшем случае) дней до зачетной недели просыпаться и обнаруживать, что надо сдать лабораторки за полгода, а знаний не хватает даже на задачи типа c=a+b.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 08:11.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.