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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2012, 16:34   #1
sc0pus
 
Регистрация: 13.05.2012
Сообщений: 4
По умолчанию задача на строки

Добрый день. У меня проблема с такой программой: "Пусть даны две строки str1 и str2. Выясните, можно ли из str1 путём перстановки литер получить str2." Вот код.

Код:
program strok;
var str1, str2:string[10];
k,i,j:integer;
begin
writeln ('vvedite str1');
readln (str1);
writeln ('vvedite str2');
readln (str2);
k:=0;
for i:=1 to 10 do
for j:=1 to 10 do
begin
if (str1[i]=str2[j]) then k:=k+1;
if (str1[i]=str2[j]) then break;
end;
if (k=10) then write ('stroki sostoyat iz odinakovih simvolov')
else write ('stroki imeyut raznie simvoli');
readln;
end.
В принципе работает, но если первая строка "1111", а вторая "1234" например, то выведет что строки состоят из одинаковых символов. Почему так происходит я понимаю, но как исправить... в голову не приходит)

Последний раз редактировалось Stilet; 13.05.2012 в 17:43.
sc0pus вне форума Ответить с цитированием
Старый 13.05.2012, 16:42   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
uses
  crt;

var
  a, b: array[0..255] of integer;
  s1, s2: string;
  i: integer;
  t: boolean;

begin
  t := true;
  for i := 0 to 255 do
  begin
    a[i] := 0;
    b[i] := 0;
  end;
  writeln('Input 2 strings:');
  readln(s1);
  readln(s2);
  if length(s1) <> length(s2) then
    t := false
  else
  begin
    for i := 1 to length(s1) do
    begin
      inc(a[ord(s1[i])]);
      inc(b[ord(s2[i])]);
    end;
    for i := 0 to 255 do
      if a[i] <> b[i] then
      begin
        t := false;
        break;
      end;
  end;
  if t then
    writeln('Possible')
  else
    writeln('Impossible');
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.05.2012, 16:47   #3
sc0pus
 
Регистрация: 13.05.2012
Сообщений: 4
По умолчанию

Огромное спасибо!
sc0pus вне форума Ответить с цитированием
Старый 13.05.2012, 18:22   #4
sc0pus
 
Регистрация: 13.05.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
    begin
      inc(a[ord(s1[i])]);
      inc(b[ord(s2[i])]);
    end;
не совсем понимаю, что сдесь делается?
sc0pus вне форума Ответить с цитированием
Старый 13.05.2012, 18:28   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Разберем операцию:
inc(a[ord(s1[i])]);
s1 - 1 строка
s1[i] - i-й символ строки
ord(s[i]) - код i-го символа строки
a - массив используемых в s1 символов
a[ord(s[i])] - соответствующая позиция в массиве

Коротко - подсчитываем количество вхождений каждого символа в строку.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки diekster Помощь студентам 1 13.02.2012 17:48
Задача на строки (С++). Serega2030 Помощь студентам 0 20.12.2011 18:28
Задача на строки. andrey_fest Помощь студентам 1 03.12.2011 20:29
Задача на строки SlayerLiving Помощь студентам 4 04.11.2010 12:37
Задача на строки.С++ Many man Помощь студентам 5 19.05.2009 19:04