Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите пожалуйста в решении задач в Pascal (http://www.tehnari.ru/f41/t43298/)

Tanyav 13.12.2010 22:44

Помогите пожалуйста в решении задач в Pascal
 
помогите пожалуйста решить одну из этих задач, заранее спасибо

Задача-1. Дано слово, состоящее не более чем из 6 строчных букв русского алфавита. Получить все неповторяющиеся комбинации буквосочетаний той же длины из букв данного слова, отсортировать их в алфавитном порядке. Указать количество возможных комбинаций.
Задача-3. В некотором тексте проверьте правильность расстановки круглых, квадратных и фигурных скобок.
Задача-4. Один дотошный болельщик по время волейбольного матча заметил интересную закономерность: сначала K (K – любое натуральное) розыгрышей выиграла первая команда, потом K+1 розыгрыш достался второй команде, далее опять первая выиграла, но уже K+2 розыгрыш и т.д. Определить счет, с которым закончился матч, и счет по партиям.
Упрощенные правила игры: матч состоит из партий, победа присуждается команде, первой выигравшей в трех партиях. Чтобы победить в партии, необходимо набрать 25 очков. Если счет равный (25:25), то партия продолжается до тех пор, пока разница в счете не станет равной 2. Не использованные розыгрыши в одной партии автоматически переходят в следующую.
Например, если счет 17:19 и первая команда выигрывает 19 розыгрышей, то счет становится 25:19, а 12 очков переходят для первой команды в следующую партию.
Задача-5. Дано выражение ax+b?0. Задать значения a и b (a, b отличны от нуля) и знак отношения. Получить ответ в виде числового промежутка или числа.

Vladimir_S 14.12.2010 11:17

Цитата:

Сообщение от Tanyav (Сообщение 429079)
Задача-1. Дано слово, состоящее не более чем из 6 строчных букв русского алфавита. Получить все неповторяющиеся комбинации буквосочетаний той же длины из букв данного слова, отсортировать их в алфавитном порядке. Указать количество возможных комбинаций.

Задачка, безусловно, интересная, но очень не простая. Возьмусь, правда быстро не обещаю. И вопрос: понимает ли Ваш Паскаль формат QWord? С таким форматом упорядочение по алфавиту было бы гораздо проще.
Цитата:

Задача-3. В некотором тексте проверьте правильность расстановки круглых, квадратных и фигурных скобок.
Как я понимаю, критерием правильности расстановки является совпадение количества открывающих и закрывающих скобок каждого типа и их правильная вложенность. Алгоритм: организуется шесть счетчиков, а потом идет посимвольный перебор всего текста с подсчетом количества скобок. В конце сравниваются результаты подсчета для различного вида скобок. Затем проверяется вложенность, то есть правильность чередования открывающих и закрывающих скобок каждого типа.
Код:

VAR
 f:TEXT;
 Q1o,Q1c,Q2o,Q2c,Q3o,Q3c:WORD;
 Ch:Char;
 Brack,Brack1:ARRAY[1..255] of Char;
 Nbr,Nbr1,i,j:BYTE;
 Incor:Boolean;
BEGIN
 Assign(f,'D:\xxx');
 ReSet(f);
 Nbr:=0; {full number of brackets}
 Q1o:=0;
 Q1c:=0;
 Q2o:=0;
 Q2c:=0;
 Q3o:=0;
 Q3c:=0;
 Repeat
  Read(f,Ch);
  if (Ch='(') or (Ch=')') or (Ch='[') or (Ch=']') or (Ch='{') or (Ch='}') then
  begin
    Inc(Nbr);
    Brack[Nbr]:=Ch;
  end;
  if Ch='(' then Inc(Q1o);
  if Ch=')' then Inc(Q1c);
  if Ch='[' then Inc(Q2o);
  if Ch=']' then Inc(Q2c);
  if Ch='{' then Inc(Q3o);
  if Ch='}' then Inc(Q3c);
 Until EoF(f);
 Close(f);
 Brack1:=Brack;
 Nbr1:=Nbr;
 If (Q1o<>Q1c) or (Q2o<>Q2c) or (Q3o<>Q3c) then
  begin
  WriteLn('Incorrect:');
  if Q1o<>Q1c then
    WriteLn(Q1o,' "(" and ',Q1c,' ")"');
  if Q2o<>Q2c then
    WriteLn(Q2o,' "[" and ',Q2c,' "]"');
  if Q3o<>Q3c then
    WriteLn(Q3o,' "{" and ',Q3c,' "}"');
  end
 else
  begin
  i:=0;
  Repeat
    Inc(i);
    Incor:=true;
    If ((Brack[i]='(') and (Brack[i+1]=')')) or
      ((Brack[i]='[') and (Brack[i+1]=']')) or
      ((Brack[i]='{') and (Brack[i+1]='}')) then
    begin
      Incor:=false;
      for j:=i+2 to Nbr do
      Brack[j-2]:=Brack[j];
      Dec(Nbr,2);
      i:=0;
    end;
  Until (Nbr=0) or (i=Nbr-1);
  If Incor then
    begin
    WriteLn('Incorrect: the order of brackets is wrong:');
    for i:=1 to Nbr1 do
      Write(Brack1[i]);
    WriteLn;
    end
  else
    Writeln('Correct');
  end;
 ReadLn;
END.

Здесь предполагается, что анализируемый текст находится в файле по имени xxx в корневом каталоге диска D: . Имя файла и путь можно, конечно, изменить.
Цитата:

Задача-4. Один дотошный болельщик по время волейбольного матча заметил интересную закономерность: сначала K (K – любое натуральное) розыгрышей выиграла первая команда, потом K+1 розыгрыш достался второй команде, далее опять первая выиграла, но уже K+2 розыгрыш и т.д. Определить счет, с которым закончился матч, и счет по партиям.
Упрощенные правила игры: матч состоит из партий, победа присуждается команде, первой выигравшей в трех партиях. Чтобы победить в партии, необходимо набрать 25 очков. Если счет равный (25:25), то партия продолжается до тех пор, пока разница в счете не станет равной 2. Не использованные розыгрыши в одной партии автоматически переходят в следующую.
Например, если счет 17:19 и первая команда выигрывает 19 розыгрышей, то счет становится 25:19, а 12 очков переходят для первой команды в следующую партию.
В этих спортивных системах, да еще с примесью жульства, без поллитры не разобраться, а я без повода не пью.
Цитата:

Задача-5. Дано выражение ax+b?0. Задать значения a и b (a, b отличны от нуля) и знак отношения. Получить ответ в виде числового промежутка или числа.
Совсем ничего не понял.

AlexZir 14.12.2010 13:41

Насчёт пятой задачи - а при чём тут, собственно, программирование на Pascal-е? Нужно вычислить на бумаге промежутки и выдать из в виде окончательного решения. Разве что можно рассмотреть вариант, когда пользователь вводит значения a, b и знак отношения, тогда задача может иметь подобное решение:
Код:

program ner;
var
a,b,x: real;
s: char;
p:integer;
begin
writeln('Enter the values of the constants a, b');
readln(a,b);
if (a<>0) and (b<>0)
  then begin x:=-b/a;
        writeln('Enter symbol relationships');
        readln(s);
        p:=ord(s);
        case p of
        60: writeln('x less than ',x:1:4);
        62: writeln('x is greater than ',x:1:4);
        61: writeln('x is ',x:1:4)
        else writeln('This is not a sign relationship')
        end; end
      else writeln('constant need not be equal to 0');
readln
end.

Данная программа обсчитывает обычные отношения >, <, = и не обрабатывает составные.

Vladimir_S 14.12.2010 14:37

На всякий случай - решение третьей задачки отредактировал с учетом проверки вложенности.
Позже, правда, сообразил - программа отрабатывает не все возможные ситуации. Она справляется с прямой однократной вложенностью:
{...[..(.....)..]...}
и даже с такой:
{...[..(...)..(...)...]..}
Но вот если, например, так:
{...[...(..)...[...]..]..)
или так:
{...[..(...)...(...)..]..[..(..)....]..},
то увы... И как это универсально алгоритмизировать - не соображу. Уж извините - чем богаты...

Vladimir_S 14.12.2010 22:30

Ан нет - ведь добил-таки! Заело. Исправления в очередной раз внесены, и теперь эта сволочная программа отрабатывает любые ситуации. Вот!

Tanyav 15.12.2010 12:33

Спасибо Вам огромное!!!!

Vladimir_S 15.12.2010 12:46

Цитата:

Сообщение от Tanyav (Сообщение 429764)
Спасибо Вам огромное!!!!

Таня, а этого хватит или надо обязательно всё? Я это к тому, что первая задачка - на вскидку довольно "крутая". Как-то и не знаю, получится ли заняться.


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.