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

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

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

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

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

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

Tanyav

Новые
Регистрация
4 Окт 2010
Сообщения
21
Реакции
0
Баллы
0
Помогите пожалуйста в решении задач в 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 отличны от нуля) и знак отношения. Получить ответ в виде числового промежутка или числа.
 
Задача-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 отличны от нуля) и знак отношения. Получить ответ в виде числового промежутка или числа.
Совсем ничего не понял.
 
Насчёт пятой задачи - а при чём тут, собственно, программирование на 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.
Данная программа обсчитывает обычные отношения >, <, = и не обрабатывает составные.
 
На всякий случай - решение третьей задачки отредактировал с учетом проверки вложенности.
Позже, правда, сообразил - программа отрабатывает не все возможные ситуации. Она справляется с прямой однократной вложенностью:
{...[..(.....)..]...}
и даже с такой:
{...[..(...)..(...)...]..}
Но вот если, например, так:
{...[...(..)...[...]..]..)
или так:
{...[..(...)...(...)..]..[..(..)....]..},
то увы... И как это универсально алгоритмизировать - не соображу. Уж извините - чем богаты...
 
Ан нет - ведь добил-таки! Заело. Исправления в очередной раз внесены, и теперь эта сволочная программа отрабатывает любые ситуации. Вот!
 
Спасибо Вам огромное!!!!
 
Спасибо Вам огромное!!!!
Таня, а этого хватит или надо обязательно всё? Я это к тому, что первая задачка - на вскидку довольно "крутая". Как-то и не знаю, получится ли заняться.
 
Назад
Сверху