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

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

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

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

Pascal задачки.

  • Автор темы Автор темы Neonn1k
  • Дата начала Дата начала

Neonn1k

Ученик
Почётный участник
Регистрация
23 Сен 2008
Сообщения
946
Реакции
12
Баллы
0
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, таким образом, чтобы ввод входных данныхи вывод полученных результатов осуществлялся через текстовый файл.
 
Всё понял, кроме первого задания - тут ни бельмеса не пойму. Завтра постараюсь сделать.
 
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 алгоритм подобный, только для каждого символа заводится самостоятельная команда ветвления.
 
Гениально... а я вот что-то смотрю, как баран, и не врубаюсь...
 
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.
 
Neonn1k, в задаче 3 проверьте аргумент косинуса. Это что, действительно там просто 8? Или может быть 2x³? Или (2x)³?
 
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' на соответствующие кириллические символы (у меня они все латинские).
 
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? В общем, сверьте условие, тогда исправлю и дополню программу. А пока - что есть.
 
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.
 
Пасиба... Я ещё уточну. Дело в том, что условия задачи преподовательница писала вручную. Сама всё составляла...
 
Назад
Сверху