Пятница, 24.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Задача на МНОЖЕСТВА, СТРОКИ, РАСПАКОВКУ ТЕКСТА.
PROTOSSДата: Понедельник, 17.11.2008, 08:00 | Сообщение # 1
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
Дано предложение А, состоящее из слов - наборов латинских букв, разделенных любым количеством пробелов. Если ни один символ A не входит
в заданное множество B и в A нет повторяющихся символов, то упорядочить слова A в порядке, обратном к алфавитному. Определить количество слов в А, в которые входит буква "e".
З.Ы.
1) Максимально использовать множества.
2) Для подсчета количества требуемых слов, можно предварительно результат распаковки поместить в одномерный массив строк.
3) Для отладки программы удобно в качестве предложения взять типизированную строковую константу.

Решити плиз оч. нужна помощь!!!, я хз как ето делать=(

Добавлено (17.11.2008, 01:00)
---------------------------------------------
неужели никто нехочет тряхнуть стариной и решить ету задачу??? sad


Излил душу - Вытри за собой!
 
SeqularДата: Понедельник, 17.11.2008, 20:49 | Сообщение # 2
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
PROTOSS, Может я не так понял суть задачи, но мне кажется, оно противоречиво.
Итак, как я понял. У нас есть предложение A - тупо строка с разными символами, включая пробелы. [1]
Так же есть множество символов B. Так вот, ни один из символов А не должен быть в множестве B, [2] и в строке A ни один символ не должен повторяться [3], так? Упорядочить слова в приницпе несложно... Но как определить количество слов, в которые входит буква "e" если [3]!?!?!
Quote (PROTOSS)
в A нет повторяющихся символов
.
Т.е. символ "e" там тоже может быть всего один? Объясни, я вот не понял


Поддерживаю также проект сообщество молодых сисадминов
 
PROTOSSДата: Понедельник, 24.11.2008, 07:33 | Сообщение # 3
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
гм... у нас в пятницу информатика, там и спрошу=) хотел еще вчера ответить но в универе инет обрубили=(

Добавлено (21.11.2008, 16:05)
---------------------------------------------
значить суть: если "Если ни один символ A не входит
в заданное множество B и в A нет повторяющихся символов, то упорядочить слова A в порядке, обратном к алфавитному." непроходит выполнить "Определить количество слов в А, в которые входит буква "e"." а если выполняется то посчитать есть е есть оно или нету.
вот так, надо готовую уже через 45 минут...=)

Добавлено (24.11.2008, 00:33)
---------------------------------------------
эй? ну ответьте плиз! оч надо!!! cry


Излил душу - Вытри за собой!
 
AlexanderДата: Понедельник, 24.11.2008, 08:40 | Сообщение # 4
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
так условие на татарском, никто и не возьмётся. А- это что такое? Такого понятия "предложение" в паскале нет, столо быть это либо множество, но тогда причём тут пробелы? Либо строка, но тогда как её упорядочить? Кроме того, во множестве не может быть повторяющихся элементов.

Скажем дружно- нафиг нужно!
 
PROTOSSДата: Четверг, 29.01.2009, 06:06 | Сообщение # 5
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
нам как дали я так и написал, думаеш мне в етом разбераться легко?=)
ладно попробую у когонить из наших подобную задачку периписать с условием аки пример вам^^

Добавлено (24.11.2008, 18:55)
---------------------------------------------
вот:
14. Дано предложение А, состоящее из слов - наборов русских и латинских букв, разделенных любым количеством пробелов. Если в словах предложения есть повторяющиеся латинские символы, то упорядочить слова A по невозрастанию количества латинских букв в словах. В противном случае, определить количество слов-палиндромов в А.

Code
Type
ustring=array[1..129] of string;
CLat=array[1..129] of byte;
Const
MesU1_1='V predlogenii est povtornie lat-ie simvoli,';
MesU1_2='predlogenie uporadocheno po ubivaniy kol-va lat-ih bukv v slovah.';
MesU2_1='V predlogenii net povtornih lat-ih bukv.';
MesU2_2='Kol-vo slov palindromov - ';
var
s: string;
m: ustring;
n: byte;

Procedure UnPack(s: string; var m: ustring; var n: byte);
Const
LetM=['a'..'z','A'..'Z'];
var
i: byte;
L: integer;
begin
L := Length(s);
n := 1;

for i := 1 to 129 do m[i] := '';

i := 1;
while (i<=L) do
begin
if (s[i] in LetM) then
m[n] := m[n] + s[i]
else
if m[n] <> '' then
Inc(n);
Inc(i);
end;
{if not(s[L-1] in LetM) then Dec(n);}
end;

function LatDouble(var m: ustring; n: byte): boolean;
Const
Lat=['a'..'z','A'..'Z'];
Var
k,L,i,j: byte;
begin
LatDouble := false;
k := 0;
for i := 1 to n do
begin
L := Length(m[i]);
k := 0;
for j := 1 to L do
begin
if m[i][j] in Lat then Inc(k);
if k>1 then
begin
LatDouble := true;
exit;
end;
end;
end;
end;

procedure SortU(var m: ustring; n: byte);
Const
Lat=['a'..'z','A'..'Z'];
var
c: CLat;
k,j,L,b: byte;
buf: string;
begin
for k := 1 to n do
begin
L := Length(m[k]);
c[k] := 0;
for j := 1 to L do
begin
if m[k][j] in Lat then Inc(c[k]);
end;
end;

for k := 1 to n do
for j := 1 to n-1 do
begin
if c[j]<c[j+1] then
begin
buf := m[j];
b := c[j];
m[j] := m[j+1];
c[j] := c[j+1];
m[j+1] := buf;
c[j+1] := b;
end;
end;
end;

function IsPal(s: string): boolean;
var
s1: string;
L,i: byte;
begin
L := Length(s);
if L=1 then
begin
IsPal := true;
exit;
end;
for i := 1 to Trunc(L) do
begin
s1[i] := s[L-i];
end;
IsPal := (s1=s);
end;

function StrPal(var m: ustring; n: byte): byte;
var
k,i: byte;
begin
k := 0;
StrPal := 0;
for i := 1 to n do
if IsPal(m[i]) then Inc(k);
StrPal := k;
end;

procedure PrintP(var m: ustring; n: byte);
var
i: byte;
begin
for i := 1 to n do
begin
write(m[i],' ');
end;
writeln;
end;

begin
Write('Vvedite predlogenie: ');
Readln(s);
UnPack(s,m,n);
if n<>0 then
if LatDouble(m,n) then
begin
SortU(m,n);
writeln(MesU1_1,#13#10,MesU1_2);
PrintP(m,n);
end
else
begin
write(MesU2_1,#13#10,MesU2_2);
writeln(StrPal(m,n));
end;
End.

Добавлено (22.01.2009, 22:22)
---------------------------------------------
от себя исчо разик добавляю, общими усилиями мысли задачка была доведена примерно до:

Code
program p3;
Type
   ustring=array[1..129] of string;
   LatS=array[1..26] of byte;
var
   s: string;
   m: ustring;
   n: byte;

Procedure UnPack(s: string; var m: ustring; var n: byte);
Const
   LetM=['a'..'z','A'..'Z'];
var
   i: byte;
   L: integer;
begin
   L := Length(s);
   n := 1;
   for i := 1 to 129 do m[i] := '';
   i := 1;
   while (i<=L) do
   begin
     if (s[i] in LetM) then
       m[n] := m[n] + s[i]
     else
       if m[n] <> '' then
       begin Inc(n); end;
     Inc(i);
   end;
{  if not(s[L-1] in LetM) then Dec(n);}
end;

function PovC(s: string): boolean;
Const
   LetM=['A'..'Z'];
var
   sm: LatS;
   i: byte;
   x: char;
begin
   PovC := false;
   for i := 1 to 26 do
   sm[i] := 0;
   for i := 1 to Length(s) do
   begin
     x := UpCase(s[i]);
     if (x in LetM) then Inc(sm[Ord(x)-64]);
     if sm[Ord(x)-64]>1 then
     begin
       PovC := true;
       exit;
     end;
   end;
end;

function PovtC(var m: ustring; n: byte): boolean;
Var
   i: byte;
begin
   PovtC := false;
   for i := 1 to n do
     if PovC(m[i]) then
     begin
       PovtC := true;
       exit;
     end;
end;

procedure SortU(var m: ustring; n: byte);
Const
   Lat=['a'..'z','A'..'Z'];
var
   k,j: byte;
   buf: string;
begin
   for k := 1 to n do
   for j := 1 to n-1 do
   begin
     if Change(m[j],m[j+1]) then
     begin
       buf := m[j];
       m[j] := m[j+1];
       m[j+1] := buf;
     end;
   end;
end;

вот, здесь записано примерно:
"Дано предложение А, состоящее из слов - наборов латинских букв, разделенных любым количеством пробелов."
"в A нет повторяющихся символов, то упорядочить слова A в порядке, обратном к алфавитному."
воть, прошу... я ы даже сказал умоляю написать мне в виде процедур или функций
"Если ни один символ A не входит в заданное множество B"
"Определить количество слов в А, в которые входит буква "e"."

Добавлено (28.01.2009, 23:06)
---------------------------------------------

Code
program p3;
uses crt;
Type
   ustring=array[1..129] of string;
   LatS=array[1..26] of byte;
Const
   M_S=['A'..'Z'];
var
   s: string;
   m: ustring;
   n: byte;

Procedure UnPack(s: string; var m: ustring; var n: byte);
Const
   LetM=['a'..'z','A'..'Z'];
var
   i: byte;
   L: integer;
begin
   L := Length(s);
   n := 1;
   for i := 1 to 129 do m[i] := '';
   i := 1;
   while (i<=L) do
   begin
     if (s[i] in LetM) then
       m[n] := m[n] + s[i]
     else
       if m[n] <> '' then
       begin Inc(n); end;
     Inc(i);
   end;
{  if not(s[L-1] in LetM) then Dec(n);}
end;

function PovC(s: string): boolean;
Const
   LetM=['A'..'Z'];
var
   sm: LatS;
   i: byte;
   x: char;
begin
   PovC := false;
   for i := 1 to 26 do
   sm[i] := 0;
   for i := 1 to Length(s) do
   begin
     x := UpCase(s[i]);
     if (x in LetM) then Inc(sm[Ord(x)-64]);
     if sm[Ord(x)-64]>1 then
     begin
       PovC := true;
       exit;
     end;
   end;
end;

function PovtC(var m: ustring; n: byte): boolean;
Var
   i: byte;
begin
   PovtC := false;
   for i := 1 to n do
     if PovC(m[i]) then
     begin
       PovtC := true;
       exit;
     end;
end;

function Change(s1: string; s2: string): boolean;
var
   s: string;
   i: byte;
begin
   Change := false;
   s := s1;
   if s1>s2 then s := s2;
   for i := 1 to Length(s) do
   begin
     if Ord(s1[i])<Ord(s2[i]) then
     begin
       Change := true;
       exit;
     end;
   end;
   if s2>s1 then Change := true;
end;

procedure SortU(var m: ustring; n: byte);
Const
   Lat=['a'..'z','A'..'Z'];
var
   k,j: byte;
   buf: string;
begin
   for k := 1 to n do
   for j := 1 to n-1 do
   begin
     if Change(m[j],m[j+1]) then
     begin
       buf := m[j];
       m[j] := m[j+1];
       m[j+1] := buf;
     end;
   end;
end;

function S_in_S(var m: ustring; n: word): boolean;
var
   i,j: byte;
begin
   S_in_S := true;
   for i := 1 to n do
   for j := 1 to Length(m[i]) do
   begin
     if not(m[i][j] in M_S) then
     begin
       S_in_S := false;
       exit;
     end;
   end;
end;

function IncS(s: string; c: char): boolean;
var
    i: integer;
    n: byte;
begin
    n := Length(s);
    for i := 1 to n do
       if (s[i]=c) then
       begin
          IncS := true;
          Exit;
       end;
end;

function IncSm(m: ustring; c: char; n: byte): byte;
var
    i: integer;
    k: byte;
begin
    for i := 1 to n do
       if IncS(m[i],c) then Inc(k);
    IncSm := k;
end;

procedure PrintP(var m: ustring; n: byte);
var
   i: byte;
begin
   for i := 1 to n do
   begin
     write(m[i],' ');
   end;
   writeln;
end;

begin
  clrscr;
   Write('Vvedite predlogenie: ');
   Readln(s);
   UnPack(s,m,n);
   if n<>0 then
     if PovtC(m,n) then
     begin
       SortU(m,n);
       PrintP(m,n);
     end
     else if S_in_S(m,n) then
     begin
       SortU(m,n);
       PrintP(m,n);
     end
     else  
     writeln('4uCLO CLOB C "e" ', IncSm(m,'e',n));
     readkey;
End.

вот полностью задача, но неработает, помогите поправить до рабочего вида


Излил душу - Вытри за собой!

Сообщение отредактировал PROTOSS - Понедельник, 24.11.2008, 09:01
 
SeqularДата: Понедельник, 23.02.2009, 10:15 | Сообщение # 6
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Проверяй и перепроверяй! Но кое-что вроде работает.
Code

Uses CRT;
Const
      A: String = 'cde  fghtr   ops  ab';
      B: String = 'x';
Type
     ARR = Array[1..16] of String[16];
Var
    s: String;
    i, j, count: byte;
    mas: ARR;
    temp: string[16];

    flag1, flag2: Boolean;
    countE: Byte;

Procedure DelSpaces(var s: String);
Var i: Byte;
Begin
{Убираем лишние пробелы}
i := 0;
While (i < length(s)) do
       Begin
       if (s[i] = ' ') and (s[i+1] = ' ') then Delete(s, i, 1)
                    else Inc(i);
       End;
End;

Procedure WordsSplit(var s: String; var count: Byte);
Var j: Byte;
Begin
j := 1;
{Разделяем строку на слова}
For i := 1 to length(s) do
     Begin
     If (s[i] = ' ') then
        Begin
        Inc(count);
        mas[count] := Copy(s, j, i-j);
        j := i+1;
        End;
     End;
inc(count);
mas[count] := Copy(s, j, length(s)-j+1);
{Конец разделения на слова}
End;

Function CheckAtoB(B: String; A: String): Boolean;
Var i: Byte;
     flag: Boolean;
Begin
{Проверяем, входит ли какой-нибудь символ A в множество B}
flag := False;
For i := 1 to length(B) do
     Begin
     if (Pos(B[i],s) <> 0) then
        Begin
        flag := true;
        Writeln(#13#10,'В множестве А найден символ ',B[i]);
        break;
        End;
     End;
{Закончили проверку}
CheckAtoB := flag;
End;

Function CheckDublChar(A: String): Boolean;
Var i, j: Byte;
     flag: Boolean;
Begin
flag := False;
For i := 1 to length(A)-1 do
     Begin
     if (flag) then Break;
     For j := i+1 to length(A) do
         if (A[i] = A[j]) and (A[i] <> ' ') then
            Begin
            flag := true;
            Writeln('Найдены повторяющиеся символы: ',s[i], ' ', s[j]);
            Break;
            End;
     End;
CheckDublChar := flag;
End;

Function LeftRight(s1, s2: String): Boolean;
Var i: Byte;
Begin
For i := 1 to length(s1) do
     Begin
     if (s1[i] = s2[i]) then Continue
        else
        If (s1[i] < s2[i]) then
             Begin
             LeftRight := False;
             Exit;
             End
        else
            Begin
            LeftRight := True;
            Exit;
            End;
     End;
End;

Procedure SortWords(var mas: ARR);
Var i, j: Byte;
     t: String[16];
Begin
For i := 1 to count-1 do
     For j := i to count do
         Begin
         if (LeftRight(mas[i], mas[j])) then
            Begin
            t := mas[i];
            mas[i] := mas[j];
            mas[j] := t;
            End;
         End;
End;

Begin
s := A;
ClrScr;
DelSpaces(s); {Удаляем пробелы}
WordsSplit(s, count); {Разделяем на слова}
Writeln('Строка: ', s); {Выводим строку}
Writeln('Массив слов: '); {Выводим массив слов}
For i := 1 to count do Writeln(i,' ',mas[i]);

flag1 := CheckAtoB(B, s); {Входит ли символ из Б в А}

{Проверяем на повторяющиеся символы}
if (flag1 = false) then
    flag2 := CheckDublChar(s);

{Если повторяющихся символов нет, то сортируем слова}
if (flag1 or flag2 = false) then
    Begin
    SortWords(mas);
    Writeln('Массив слов после сортировки: ');
    For i := 1 to count do
        Writeln(i,' ',mas[i]);
    End;

{УСЛОВИЕ 2 - во сколько слов входит буква "e"}
For i := 1 to count do
     if ((Pos('e', mas[i]) > 0) or (Pos('E',mas[i]) > 0)) then inc(countE);
Writeln('Буква "e" входит в ',countE,' слов');
ReadKey;
End.


Поддерживаю также проект сообщество молодых сисадминов
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;