Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 09.01.2010, 19:33   #1 (permalink)
Neonn1k
Member
 
Аватар для Neonn1k
 
Регистрация: 23.09.2008
Сообщений: 946
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 397
По умолчанию Pascal задачки.

У меня семестровые задачи по паскалю. Кто разбирается, выручайте. Сколько сможете напишите плиз. А то я тут с комиссией уже сдаю 11числа. До экзов не допускают даже.

1. Составить программу для решения проведённого ниже задания двумя способами:
а) используя команду выбора Case
б)используя команду If
Придумать и задать входные данные так, чтобы выбор состоял из 4-7 альтернатив. Ввести первую букву задания страны. вывести название континента.
2. построить таблицу в соответствии между мерами
САК=109Л=1.499страйка. нач. значение меры, шаг изменения этого значения и кол-во строк в таблице(10-15). Задать самостоятельно в режиме диалога. Оформить таблицу как можно лучше, применяя форматы вывода.
3. Протабулировать функцию y=|(cos(2 в кубе)+2sinx)/(5x-2Pi)| на отрезке от нуля до одного включая 0 и 1, с шагом h=0.9. Результаты вычислния вывести на экран в виде таблицы пар чисел х,у. Вычислить сумму и кол-во положительных значений функции у.
4.Ввести фамилию(Лысых), имя(Надежда) и отчество(Олеговна) как одно текстовое данное. Определить длину текста и кол-во букв "А" в нём. Выполнить дополнительно, изъять все буквы "А","О" из фамилии.
5. Пусть доход фирмы за К-тый год вычисляется по формуле у(индекс К)=100*(sin|(K*K-1.5)/(Pi-3.4*K)|+cos(2+K) В некоторых условных единицах, где К=1991,1992... 2001. Если у(индекс К)>0, то будем считать, что фирма в соотстветствующий(К-тый) год имела прибыль, а в случае у(индекс К)<0 - убытки. Вывети на экран таблицу: год, величина дохода. Выполнить дополнительно: вычислить сумму тех убытков, которые в границах у(индекс К)<-600 или 4у(индекс К)>-100 (в у.е.). Определить общий доход фирмы. Рассмотреть финансовую деятельность фирмы на протяжении 10лет. Вывести сообщения, если искомые данные отсутствуют, например, если прибылей или убытков фирма не имела.
6. Модернизировать решения любых 2-х заданий с 1-5, таким образом, чтобы ввод входных данныхи вывод полученных результатов осуществлялся через текстовый файл.
Neonn1k вне форума   Ответить с цитированием

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

Ваш пост по содержанию очень схож с данными темами

Pascal, две задачки, нужна помощь
Решить задачки
Помогите решить задачки в Pascal
Задачки на массивы. Паскаль

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

Всё понял, кроме первого задания - тут ни бельмеса не пойму. Завтра постараюсь сделать.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.01.2010, 20:32   #3 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

1 задание
Определим исходные данные:
Г (Германия) континент Европа
К (Китай) континент Азия
С (США) континент Северная Америка
В (Венесуэла) континент Южная Америка
Ю (ЮАР) континент Африка
Написание программы сводится к правильному построению логических цепочек. Алгоритм работы: вводим 1 символ названия страны, выбираем соответствие в списке, выводим название континента.
Листинг может быть примерно следующим:
Код:
program land;
var name: char;
begin
writeln('Input name land');
read(name);
case name of
'Г','г':writeln('Европа');
'К','к':writeln('Китай');
'С','с':writeln('Северная Америка');
'В','в':writeln('Южная Америка');
'Ю','ю':writeln('Африка');
else writeln('Такой страны в списке нет');
end;
readln;
end.
Для if..then алгоритм подобный, только для каждого символа заводится самостоятельная команда ветвления.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 09.01.2010, 20:34   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Гениально... а я вот что-то смотрю, как баран, и не врубаюсь...
Vladimir_S вне форума   Ответить с цитированием
Старый 09.01.2010, 22:22   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
2. построить таблицу в соответствии между мерами
САК=109Л=1.499страйка. нач. значение меры, шаг изменения этого значения и кол-во строк в таблице(10-15). Задать самостоятельно в режиме диалога. Оформить таблицу как можно лучше, применяя форматы вывода.
Код:
CONST
 Sack2Litre=109.0;
 Sack2Strike=1.499;
 Units:ARRAY[1..3] of STRING=('     Sack','    Litre','   Strike');

VAR
 Order:ARRAY[1..3] of BYTE;
 Unit1:BYTE;
 K2,K3,Min_Value,Max_Value,Step:Real;
 i:INTEGER;

BEGIN
 WriteLn('Enter the base unit:');
 WriteLn('1 - Sack');
 WriteLn('2 - Litre');
 WriteLn('3 - Strike');
 ReadLn(Unit1);
 CASE Unit1 of
 1: begin
     K2:=Sack2Litre;
     K3:=Sack2Strike;
     Order[1]:=1;
     Order[2]:=2;
     Order[3]:=3;
    end;
 2: begin
     K2:=1.0/Sack2Litre;
     K3:=Sack2Strike/Sack2Litre;
     Order[1]:=2;
     Order[2]:=1;
     Order[3]:=3;
    end;
 3: begin
     K2:=1.0/Sack2Strike;
     K3:=Sack2Litre/Sack2Strike;
     Order[1]:=3;
     Order[2]:=1;
     Order[3]:=2;
    end;
 END;
 Write('Enter the low value '); ReadLn(Min_Value);
 Write('Enter the high value '); ReadLn(Max_Value);
 Step:=(Max_Value-Min_Value)/10;
 WriteLn(Units[Order[1]],'     ',Units[Order[2]],'     ',Units[Order[3]]);
 For i:=0 to 10 do
  Writeln((Min_Value+Step*i):9:4,'     ',
          (Min_Value+Step*i)*K2:9:4,'     ',
          (Min_Value+Step*i)*K3:9:4);
 ReadLn;
END.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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

Neonn1k, в задаче 3 проверьте аргумент косинуса. Это что, действительно там просто 8? Или может быть 2x³? Или (2x)³?
Vladimir_S вне форума   Ответить с цитированием
Старый 09.01.2010, 22:51   #7 (permalink)
Neonn1k
Member
 
Аватар для Neonn1k
 
Регистрация: 23.09.2008
Сообщений: 946
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 397
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Neonn1k, в задаче 3 проверьте аргумент косинуса. Это что, действительно там просто 8? Или может быть 2x³? Или (2x)³?
да, да, да (2x)³. Я просто через мобилу пишу)))
Neonn1k вне форума   Ответить с цитированием
Старый 09.01.2010, 23:00   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
4.Ввести фамилию(Лысых), имя(Надежда) и отчество(Олеговна) как одно текстовое данное. Определить длину текста и кол-во букв "А" в нём. Выполнить дополнительно, изъять все буквы "А","О" из фамилии.
Код:
CONST
 Family:STRING='LysyhNadezdaOlegovna';
VAR
 Lng,Number_of_A,i:BYTE;
BEGIN
 WriteLn(Family);
 Lng:=Length(Family);
 WriteLn('Length= ',Lng);
 Number_of_A:=0;
 For i:=1 to Lng do
  If Family[i]='a' then Inc(Number_of_A);
 WriteLn('There are ',Number_of_A,' letters "a" in the string');
 For i:=1 to Lng do
  If (Family[i]<>'a') and (Family[i]<>'A')
  and (Family[i]<>'o') and (Family[i]<>'O')
  then Write(Family[i]);
 ReadLn;
END.
Вариант с текстовым файлом. Пусть строка LysyhNadezdaOlegovna записана в первой (и единственной) строке файла с именем fff, расположенного в корневом каталоге диска С: . Тогда:
Код:
VAR
 Family:STRING;
 Lng,Number_of_A,i:BYTE;
 f:TEXT;
BEGIN
 Assign(f,'C:\fff');
 ReSet(f);
 ReadLn(f, Family);
 Close(f);
 WriteLn(Family);
 Lng:=Length(Family);
 WriteLn('Length= ',Lng);
 Number_of_A:=0;
 For i:=1 to Lng do
  If Family[i]='a' then Inc(Number_of_A);
 WriteLn('There are ',Number_of_A,' letters "a" in the string');
 For i:=1 to Lng do
  If (Family[i]<>'a') and (Family[i]<>'A')
  and (Family[i]<>'o') and (Family[i]<>'O')
  then Write(Family[i]);
 ReadLn;
END.
Вы можете, разумеется, всюду заменить латиницу кириллицей, причем в этом случае надо не только поменять 'LysyhNadezdaOlegovna' на 'ЛысыхНадеждаОлеговна', но и всюду 'a', 'o', 'A', 'O' на соответствующие кириллические символы (у меня они все латинские).
Vladimir_S вне форума   Ответить с цитированием
Старый 10.01.2010, 10:48   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
5. Пусть доход фирмы за К-тый год вычисляется по формуле у(индекс К)=100*(sin|(K*K-1.5)/(Pi-3.4*K)|+cos(2+K) В некоторых условных единицах, где К=1991,1992... 2001. Если у(индекс К)>0, то будем считать, что фирма в соотстветствующий(К-тый) год имела прибыль, а в случае у(индекс К)<0 - убытки. Вывети на экран таблицу: год, величина дохода. Выполнить дополнительно: вычислить сумму тех убытков, которые в границах у(индекс К)<-600 или 4у(индекс К)>-100 (в у.е.). Определить общий доход фирмы. Рассмотреть финансовую деятельность фирмы на протяжении 10лет. Вывести сообщения, если искомые данные отсутствуют, например, если прибылей или убытков фирма не имела.
Код:
VAR
 y:ARRAY[1991..2001] of REAL;
 k,General_Income:INTEGER;
BEGIN
 General_Income:=0;
 For k:=1991 to 2001 do
  begin
   y[k]:=100*(Sin(ABS((SQR(k)-1.5)/(Pi-3.4*k)))+Cos(2+k));
   WriteLn(k,ROUND(y[k]):15);
   General_Income:=General_Income+ROUND(y[k]);
  end;
 WriteLn('General_Income was ',General_Income);
 ReadLn;
END.
А вообще есть у меня подозрение, что формула набрана с ошибками (для начала, не хватает одной закрывающей скобки). Дело в том, что максимальный убыток составил -165, откуда тогда -600 в условии? И что означает 4у(индекс К)>-100, почему просто не написать у(индекс К)>-25? В общем, сверьте условие, тогда исправлю и дополню программу. А пока - что есть.
Vladimir_S вне форума   Ответить с цитированием
Старый 10.01.2010, 12:42   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
3. Протабулировать функцию y=|(cos(2 в кубе)+2sinx)/(5x-2Pi)| на отрезке от нуля до одного включая 0 и 1, с шагом h=0.9. Результаты вычислния вывести на экран в виде таблицы пар чисел х,у. Вычислить сумму и кол-во положительных значений функции у.
Прежде всего - опять явный брех в условии. Как это от нуля до одного с шагом 0.9, включая 0 и 1? Ну никак такой шаг не стыкуется - ни по величине, ни по кратности. В программе он заменен на h=0.1. Это хоть как-то. Потом, функция стоит под знаком абсолютной величины, а значит отрицательных значений иметь не может - какой тогда смысл в вычленении положительных значений? Сверьте еще раз условие задачи. А пока так:
Код:
VAR
 x,y,h,Sum:REAL;
 i,Npos:INTEGER;
BEGIN
 h:=0.1;
 Sum:=0;
 Npos:=0;
 For i:=0 to 10 do
  begin
   x:=h*i;
   y:=ABS((SQR(Cos(x*2))*Cos(x*2)+Sin(x)*2)/(x*5-2*Pi));
   WriteLn(x:3:1,y:15:5);
   If y>0 then
    begin
     INC(Npos);
     Sum:=Sum+y;
    end;
  end;
 Writeln('There are ',Npos,' positive values.');
 Writeln('Their sum is',Sum:15:5);
 ReadLn;
END.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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


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

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




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

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