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

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

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

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

Три задания по Pascal'ю

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

LizarD

Ученик
Регистрация
11 Июн 2011
Сообщения
6
Реакции
0
Баллы
0
Три задания по Pascal'ю

1) Написать программу, которая в массиве A[N] находит второе по величине число.
2) В рускоязычном текстовом файле, определить, сколько раз в нем встречается самое короткое слово.
3) В прямой 4х угольной призме провести сечение, проходящее через сторону нижнего основания под углом 60 градусов к нему.
 
Так. Прежде всего, мне кажется, Вы несколько превратно поняли суть работы нашего форума. Из того, что Вам помогли с простенькой задачкой, вовсе не следует, что отныне можно перестать учиться, а все полученные задания тупо вываливать сюда, нажимать кнопочку и ждать, когда появятся готовенькие решения. Решили жизнь чужим умом прожить? Не выйдет. Так что мой Вам совет - беритесь за ум, пока не поздно. За собственный.
Теперь по задачам.
1. Тривиальное упражнение школьного уровня. Давайте самостоятельно.
2. Тут бы я Вам помог, если бы не условие, что текст русский. Заморачиваться с множественными кодировками кириллицы (у меня - DOS-Паскаль) - извините, не буду. Если бы текст был латиницей, то - пожалуйста. А так - нет.
3. Тут Вам немного повезло. Недавно я решал такую задачку, с единственной разницей, что угол был не 60°, а 30°. Поэтому можете взять решение отсюда:
http://www.tehnari.ru/f41/t52678/, пост #10, заменив там строки
ZC:=100*tan(Pi/6);
ZD:=50*tan(Pi/6);
на
ZC:=100*tan(Pi/3);
ZD:=50*tan(Pi/3);
Должно получиться так:
 

Вложения

  • AA101.webp
    AA101.webp
    19.3 KB · Просмотры: 59
Разумеется, я и сам пробывал решать эти задачи...

1. Дошел до того, что выстраиваю все члены массива по убыванию, но если массив содержит более 1000 элементов? Это уже не удобно...
2. Владимир, я думаю, что латиницы будет мне достаточно, что бы понять с чем мне работать, ведь, как я понимаю, дело в кодировках?
3. Благодарю!

Хи: Самое трудное решается быстрее... :)
 
1. Дошел до того, что выстраиваю все члены массива по убыванию, но если массив содержит более 1000 элементов? Это уже не удобно...
Можно, конечно, и так, но я бы решал иначе:
1. Находим максимальный элемент стандартным алгоритмом.
2. Повторяем, поставив доп. условие, что следующий "максимальный" элемент должен быть, конечно, больше остальных, но меньше уже найденного в п.1.
Или, как вариант, все элементы массива, имеющие максимальное значение, заменить, например, нулями, после чего повторить процедуру.
3. Выводим результат поиска по п.2.
 
2) В рускоязычном текстовом файле, определить, сколько раз в нем встречается самое короткое слово.
Ладно, вот Вам универсальный код, годится и для латиницы, и для кириллицы. Имя файла и путь подставьте, естественно, свои:
Код:
Const
 Smb=[' ',',','.','?','!',':',';','"','(',')','-'];
VAR
 S:String;
 W:Array[1..1000] of String;
 i,j,i1,i2,Ifix:Integer;
 leng,N,N_short:Byte;
 f:Text;

BEGIN
 Assign(f, 'D:\fff.txt');
 ReSet(f);
 N:=0;
 REPEAT
  ReadLn(f,S);
  i:=0;
  Repeat
   Repeat
    Inc(i);
   Until (Not (S[i] in Smb)) or (i=Length(S));
   If i<Length(S) then
    begin
     i1:=i;
     While (Not (S[i] in Smb)) and (i<Length(S)) do
      begin
       Inc(i);
       i2:=i;
      end;
    If (S[i] in Smb) and (i<Length(S)) then
      begin
       Inc(N);
       W[N]:=Copy(S,i1,i2-i1);
      end;
     If (Not (S[i] in Smb)) and (i=Length(S)) then
      begin
       Inc(N);
       W[N]:=Copy(S,i1,i-i1+1);
      end;
    end;
  Until i=Length(S);
 UNTIL EoF(f);
 Close(f);

 leng:=255;
 For i:=1 to N do
  If Length(W[i])<leng then
   begin
    Ifix:=i;
    leng:=Length(W[i]);
   end;
 Writeln('The shortest word is "'+W[Ifix]+'"');
 Writeln;
 N_short:=0;
 For i:=1 to N do
  If W[i]=W[Ifix] then  Inc(N_short);
 Writeln('It occurs ',N_short,' times');
 ReadLn
END.
 
Благодарю, Владимир!
 
Назад
Сверху