Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2014, 02:06   #1
RADik_bo
 
Регистрация: 24.08.2014
Сообщений: 7
По умолчанию сравнение с алфавитом

ребят, дана строка,нужно напечатать слова, отличные от последнего слова, если они удовлетворяют следующему условию: слово совпадает с конечным отрезком латинского алфавита (z, yz, xyz и т.д.). После запуска программа не выдает результат. в чем ошибка?
Код:
program LABA3;
uses crt;
const alfafit='Z,Y,X,W,V,U,T,S,R,Q,P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A';

var
 a: array[1..100] of string; 
 st,slov:string;
 i,j,n,q:integer;
 Flag:boolean;
{ввод данных и их проверка на условие} 
 begin
   while 1=1  do 
    begin
      writeln ('vvedite frazy:');
      readln (St);
      for i:=1 to length(st) do
        begin
         case st[i] of
         'a'..'z',' ':flag:=true;
         else
           begin
 writeln ('chto-to ne to');
 flag:=false;
 break;
 end;
end;
end;
if flag=true then break;
end;
while st[length(st)]=' ' do delete(st,length(st),1);
i:=1;
j:=1;
n:=length(st);
for i:=1 to n do 
begin 
 
if (st[i]<>' ') and (i<n) {Текст разбивается на слова и каждое слово заносится в ячейку массива} 
then slov:=slov+st[i] 
      else 
          begin 
if st[i]=' ' 
then a[j]:=slov 
else a[j]:=slov+st[i]; 
q:=j;{Переменной w присваевается последнее значение переменной j (последнее слово)} 
j:=j+1; 
 
slov:=''; 
 for j:=1 to q-1 do {Производиться сравнение всех слов с последним} 
if a[j]=a[q] 
then continue 
else 
begin 

if a[j]=copy(alfafit,1,length(a[j]))
then 
begin 
write(a[j]+' '); 
break; 

end;

end;

end;

writeln;

end;
end.

Последний раз редактировалось Stilet; 27.08.2014 в 07:59.
RADik_bo вне форума Ответить с цитированием
Старый 27.08.2014, 03:26   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

begin -8 штук, end 9 штук. Программа не должна компилироваться.

Код:
program a;
uses crt;
var
st:string;
i, j, k, l, m, n:integer;
a1:array[1..100] of string;
b1: array[1..26] of char;

begin

b1[1] := 'z';
b1[2] := 'y';
b1[3] := 'x';
b1[4] := 'w';
b1[5] := 'v';
b1[6] := 'u';
b1[7] := 't';
b1[8] := 's';
b1[9] := 'r';
b1[10] := 'q';
b1[11] := 'p';
b1[12] := 'o';
b1[13] := 'n';
b1[14] := 'm';
b1[15] := 'l';
b1[16] := 'k';
b1[17] := 'j';
b1[18] := 'i';
b1[19]:='h';
b1[20]:='g';
b1[21]:='f';
b1[22]:='e';
b1[23]:='d';
b1[24]:='c';
b1[25]:='b';
b1[26]:='a';

j:=1;

for j:=1 to 100 do
begin
a1[j]:='';
end;

j:=1;

writeln('vvedite crazy:');
readln(st);

for i:=1 to length(st) do
begin
if st[i]<>' ' then
begin
a1[j]:=a1[j]+st[i];
end
else
begin
j:=j+1;
end;
end;

k:=j;
for j:=1 to k do
begin
if a1[j]<>a1[1] then
begin
l:=length(a1[j]);
n:=1;
m:=1;
while(a1[j][m] = b1[n]) and (n<=26) and (m<=1) do
begin
m:=m+1;
n:=n+1;
end;

if (m = l+1) then
begin
writeln(a1[j]);
end;

end;

end;

end.
Примерно следующим образом
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось Stilet; 27.08.2014 в 08:00.
challengerr вне форума Ответить с цитированием
Старый 27.08.2014, 18:20   #3
RADik_bo
 
Регистрация: 24.08.2014
Сообщений: 7
По умолчанию

спасибо, там много лишнего потому что еще есть вторая часть задания, а вообще через a[j]=copy(alfafit,1,length(a[j])) где alfafit='Z,Y,X,W,V,U,T,S,R,Q,P,O,N, M,L,K,J,I,H,G,F,E,D,C,B,A'; можно сделать или неправильно мыслю?
P.S. не судите строго, я еще даже не поступил).
RADik_bo вне форума Ответить с цитированием
Старый 27.08.2014, 21:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы так делал:
Код:
program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };
{
дана строка,нужно напечатать слова, отличные от последнего слова,
если они удовлетворяют следующему условию: слово совпадает с конечным отрезком латинского алфавита (z, yz, xyz и т.д.).}
var c,a,s:string;j,i:integer; b:boolean;
begin
  s:='zy hello xy is xy zy';c:='';
  for i:=Length(s) downto 0 do
   if s[i]=' ' then break else begin
     c:=s[i]+c;;
   end;
  i:=pos(' ',s);
  while i<>0 do begin
    b:=true;
    a:=copy(s,1,i-1);
    for j:=1 to length(a) do
     if not(a[j] in ['z','y','x']) or (c=a) then begin b:=false;break;end;
    if b then writeln(a);
    delete(s,1,i);
    i:=pos(' ',s);
  end;
  readln;
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2014, 23:47   #5
RADik_bo
 
Регистрация: 24.08.2014
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я бы так делал:
Код:
program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };
{
дана строка,нужно напечатать слова, отличные от последнего слова,
если они удовлетворяют следующему условию: слово совпадает с конечным отрезком латинского алфавита (z, yz, xyz и т.д.).}
var c,a,s:string;j,i:integer; b:boolean;
begin
  s:='zy hello xy is xy zy';c:='';
  for i:=Length(s) downto 0 do
   if s[i]=' ' then break else begin
     c:=s[i]+c;;
   end;
  i:=pos(' ',s);
  while i<>0 do begin
    b:=true;
    a:=copy(s,1,i-1);
    for j:=1 to length(a) do
     if not(a[j] in ['z','y','x']) or (c=a) then begin b:=false;break;end;
    if b then writeln(a);
    delete(s,1,i);
    i:=pos(' ',s);
  end;
  readln;
end.
по мойму ты сравниваешь только с x y z а нужен весь алфавит.
RADik_bo вне форума Ответить с цитированием
Старый 28.08.2014, 01:38   #6
RADik_bo
 
Регистрация: 24.08.2014
Сообщений: 7
По умолчанию вот что получилось, но почему выдает одинаковые с последним слова

Код:
program labapoputka;
uses crt;
const
    alfafit='zyxwvutsrqponmlkjihgfedcba';
var
    a: array[1..100] of string; 
    st,slov,slov2:string;
    i,j,n,q,s:integer;
    Flag:boolean;
{ввод данных и проверка их на условие}    
begin
 while 1=1 do
   begin
    writeln('Vvedite vrazy:');
    readln(st);
     for i:=1 to length(st) do
      case st[i] of
       'a'..'z',' ':flag:=true;
      else
       begin
        writeln('chto-to ne to');
        flag:=false;
      break;
       end;
      end;
    if flag=true then break;
    end;
while st[length(st)]=' ' do delete(st,length(st),1);{удаляем лишние пробелы в конце строки}
{разбиваем строку на слова}
i:=1;
j:=1;
n:=length(st);
slov:='';
for i:=1 to n do 
 begin 
  if (st[i]<>' ') and (i<=n) {Текст разбивается на слова и каждое слово заносится в ячейку массива} 
   then slov:=slov+st[i] 
   else 
    begin 
     if st[i]=' ' 
      then a[j]:=slov 
      else q:=j;{Переменной w присваевается последнее значение переменной j (последнее слово)} 
           j:=j+1; 
           slov:=''; 
           q:=j;{Переменной w присваевается последнее значение переменной j (последнее слово)} 
     end;      
 end;
for j:=1 to q-1 do {Производиться сравнение всех слов с последним} 
if a[j]<>a[q] 
then begin
 if a[j]=copy(alfafit,1,length(a[j]))
            then writeln(a[j])
            end; 


       end.

Последний раз редактировалось Stilet; 28.08.2014 в 08:04.
RADik_bo вне форума Ответить с цитированием
Старый 28.08.2014, 08:05   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
по мойму ты сравниваешь только с x y z а нужен весь алфавит.
А по-моему в задании сказано:
Цитата:
слово совпадает с конечным отрезком латинского алфавита (z, yz, xyz и т.д.)
Т.е. в нем нет никаких других букв кроме конечных.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2014, 08:12   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Т.е. в нем нет никаких других букв кроме конечных.
как же нет?
а это:
Цитата:
(z, yz, xyz и т.д.)
и "т.д." означает, что нужно проверять
z
yz
xyz
wxyz
vwxyz
uvwxyz
tuvwxyz
stuvwxyz

дальше, надеюсь, можно не продолжать?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.08.2014, 09:57   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
дальше, надеюсь, можно не продолжать?
Я понял по другому.
Впрочем видимо мой пример автор всетки отбросит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2014, 22:59   #10
RADik_bo
 
Регистрация: 24.08.2014
Сообщений: 7
По умолчанию если кому интересно

задание: Дана строка символов S, состоящая из латинских букв. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя, будем называть словами. Преобразовать исходную строку в строки S1 и S2 в соответствии с пунктами 1 и 2 (п.1, п.2) заданий № 1 - 30. Если какая-либо из итоговых строк окажется пустой, выводить соответствующее сообщение.
п.1. – Напечатать слова, отличные от последнего слова, если они удовлетворяют следующему условию: слово совпадает с конечным отрезком латинского алфавита (z, yz, xyz и т.д.).
п.2. - Напечатать все слова, отличные от последнего слова, удаляя все гласные буквы.
Код:
program LABA3;
uses crt;
 
const alfafit='zyxwvutsrqponmlkjihgfedcba';
var
 a: array[1..100] of string; 
 st,slov:string;
 i,j,n,q,s,z,st3:integer;
 Flag:boolean;
{ввод данных и их проверка на условие} 
 begin
   while 1=1  do 
    begin
      writeln ('vvedite frazy:');
      readln (St); 
      for i:=1 to length(st) do
        begin
         case st[i] of
         'a'..'z',' ':flag:=true;
         else
           begin
 writeln ('chto-to ne to');
 flag:=false;
 break;
 end;
end;
end;
if flag=true then break;
end;
n:=length(st); 
j:=1;
z:=1; 
s:=1;
for i:=1 to n do 
begin 
if (st[i]<>' ') and (i<n) {Текст разбивается на слова и каждое слово заносится в ячейку массива} 
then slov:=slov+st[i] 
else 
begin 
if st[i]=' ' 
then a[j]:=slov 
else a[j]:=slov+st[i]; 
q:=j; {Переменной q присваевается последнее значение переменной j (последнее слово)} 
j:=j+1; 
slov:=''; 
end; 
end; 
for j:=1 to q-1 do {Производиться сравнение всех слов с последним} 
if a[j]=a[q] 
then continue 
else 

begin 
{Производиться поиск буквы аналогичной последней в каждом слове} 
if a[j]=copy(alfafit,1,length(a[j]))
then 
begin 
write(a[j]+'+'); 
s:=s+1;
end;
end;

writeln;{Вывод строки согласно условию №1}
if s=1 then Writeln('fraza ne alfafit libo vse kak poslednee');
for j:=1 to q-1 do {Производиться сравнение всех слов с последним} 
if a[j]=a[q]
then continue 
 else
 begin
 for i:=1 to length(a[j]) do {поиск буквы "q" в словах} 
 if a[j][i]=('e')
 then 
 Write(''){удаление}
 else 
   begin 
  if a[j][i]=('u')
     then
      Write('')
      else
     begin
       if a[j][i]=('i')
        then 
        Write('')
        else 
        begin
       if a[j][i]=('o')
        then
        Write('')
        else 
        begin
       if a[j][i]=('a')
       then   Write('')
             else 
             begin
             write(a[j][i]);
             z:=z+1;
             end;
 
  end;
   end;
    end;
     end;
     write(' '); 
 end;
writeln; {Вывод строки согласно условию №2} 
if z=1 then Writeln('odni glassnye libo vse kak poslednee');

readkey; 
end.

Последний раз редактировалось Stilet; 28.08.2014 в 23:29.
RADik_bo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Сортировка за алфавитом JosH7 Помощь студентам 2 13.10.2012 21:49
Как заполнить StringGrid русским алфавитом рандомно без повтора буквы LatuSerge Помощь студентам 2 18.04.2011 15:45
Работа с русским алфавитом 0479 Общие вопросы по Java, Java SE, Kotlin 4 09.11.2010 23:12
Шифрование файла алфавитом 0479 Паскаль, Turbo Pascal, PascalABC.NET 3 13.09.2010 23:11
Сортировка за алфавитом $T@LKER Помощь студентам 2 30.03.2009 16:02