Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.02.2011, 06:34
Doctor_Che Doctor_Che вне форума
Прохожий
 
Регистрация: 25.01.2011
Сообщения: 36
Репутация: 10
По умолчанию Перевести код из С в Pascal

Здравствуйте!
Помогите пожалуйста перевести перевести код из С в Pascal. В С никак не шарю...
Заранее спасибо.

Код:
/* В заданном предложении найти пару слов, из которых одно 

является обращением другого */ 

#include <stdio.h> 

#include <string.h> 

#define R "., ;:'\"()!?" /* символы - разделители */ 

main() 

{ 

char s[100],c[100],*p[50],*q; 

int i=0,j,k,n,fl=0; 

puts("\nВведите предложение"); 

gets(s); /* ввод предложения */ 

q=strtok(s,R); 

while(q) /* разбиваем предложение на слова */ 

{ 

p[i++]=q; 

q=strtok(NULL,R); 

} 

for(j=0;j<i;j++) /* перебираем слова */ 

for(k=j+1;k<i;k++) 

{ 

if(!fl) /* проверка флага */ 

{ 

for(n=0;n<strlen(p[k]);n++) /* переворачиваем слово */ 

{ 

c[n]=*(p[k]+(strlen(p[k])-n-1)); 

} 

c[n]='\0'; 

if(!strcmp(c,p[j])) /* если слова одинаковы, то выводим */ 

{ 

puts("Ответ:"); 

puts(p[j]); 

puts(p[k]); 

fl=1; /* устанавливаем флаг */ 

} 

} 

} 

if(!fl) puts("\nНет таких слов"); 

} 
Ответить с цитированием
  #2  
Старый 16.02.2011, 10:03
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

Как я понимаю, программа должна выделить слова из предложения, и проверить есть ли слова которые читаются одинокого слева направо и справа налево?
вот примерчик:
на форме, edit1, memo1, button1
в эдит вводим строку, в мемо отображаются нужные слова
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
TDelim=set of Char;
TArrayOfString=Array of String;

  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function fcToParts(sString:String;tdDelim:TDelim):TArrayOfString ;  //функция разбора строки на слова
var iCounter,iBegin:Integer;
begin
if length(sString)>0 then
begin
include(tdDelim,#0);
iBegin:=1;
SetLength(Result,0);
For iCounter:=1 to Length(sString)+1 do
  begin
   if (sString[iCounter] in tdDelim) then
    begin
     SetLength(Result,Length(Result)+1);
     Result[Length(Result)-1]:=Copy(sString,iBegin,iCounter-iBegin);
     iBegin:=iCounter+1;
    end;
end;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
StrArr:TArrayOfString;
i,k,z:integer;
s:string;
zard :TDelim;
t:char;
begin
zard:=[' ',',','.'];  //разделители
t:=edit1.Text[length(edit1.Text)]; //последний символ строки
if not (t in zard) then edit1.Text:=Edit1.Text+' '; // если последний символ не разделитель то добавляем пробел
StrArr:=fcToParts(edit1.Text,[' ',',','.']);
for i:=1 to Length(StrArr) do
  begin
  s:='';
     for k:=length(StrArr[i]) downto 1 do
        begin
          s:=s+StrArr[i][k]; //переворачиваем слово
        end;
  if StrArr[i]=s then memo1.Lines.Add(StrArr[i]);  // проверяем равенство, если ок то выводим в мемо
  end;

end;

end.
__________________
Последний раз редактировалось Admin, Сегодня в 10:32.
Ответить с цитированием
  #3  
Старый 17.02.2011, 06:33
Doctor_Che Doctor_Che вне форума
Прохожий
 
Регистрация: 25.01.2011
Сообщения: 36
Репутация: 10
По умолчанию

Спасибо огромное!!!
Но по заданию необходимо на Паскале сделать. И потом еще задания по программе выполнять.
Можете поправить пожалуйста на Паскаль. Очень надо.

Последний раз редактировалось Doctor_Che, 17.02.2011 в 06:42.
Ответить с цитированием
  #4  
Старый 17.02.2011, 13:00
Doctor_Che Doctor_Che вне форума
Прохожий
 
Регистрация: 25.01.2011
Сообщения: 36
Репутация: 10
По умолчанию

Спасибо! Решилась проблема.
Код:
uses Crt;
const rz=[' ',',','.',';',':','?','!'];
var s,s1:string;
    a:array[1..50] of string;
    i,j,k,p:byte;
    f,b:boolean;
begin
clrscr;
writeln('Введите предложение:');
readln(s);
s:=s+',';//добавим запятую в конец
for i:=1 to length(s) do
if s[i] in rz then s[i]:=',';//заменим все разделители на запятые
while pos(',,',s)>0 do delete(s,pos(',,',s),1); //удалим повторяющиеся запятые
k:=0;
while pos(',',s)>0 do //пока есть запятые
 begin
  k:=k+1; //считаем слова
  a[k]:=copy(s,1,pos(',',s)-1);//записываем в массив
  delete(s,1,pos(',',s)); //удаляем
 end;
f:=false;//пока пары нет
i:=1;
while(i<k) and not f do//пока не предпоследнее слово и не нет пары
 begin
  b:=false;//это слово не пара?
  j:=i+1;//начинаем со следующего
  while(j<=k)and not b do //пока не конец или не пара
   begin
    s1:=''; //будем переворачивать слова
    for p:=length(a[j]) downto 1 do
    s1:=s1+a[j][p];
    if s1=a[i] then //если перевернутое совпадает с проверяемым
     begin
      b:=true;
      f:=true;
      writeln('Такая пара есть!');
      write(a[i],'  ',a[j]);
     end
    else j:=j+1; //если нет дальше
   end;
  if not b then i:=i+1;//если для этого слова пары нет, проверяем следующее
 end;
if not f then write('Такой пары нет!');
readln
end.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025