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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2008, 22:56   #1
stasig
Пользователь
 
Регистрация: 04.11.2008
Сообщений: 31
По умолчанию Двумерный массив. О цене договоримся.

Дан двумерный массив символов. Определить пару строк, содержащих наибольшее число общих символов(одинаковых для обеих строк).
stasig вне форума Ответить с цитированием
Старый 14.12.2008, 23:42   #2
1991_BoS
Новичок
Джуниор
 
Регистрация: 14.12.2008
Сообщений: 1
По умолчанию

Стучи 432394078
1991_BoS вне форума Ответить с цитированием
Старый 15.12.2008, 19:41   #3
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

А чем Вас это не устраивает?
Нормальное состояние техники - нерабочее, все остальное частный случай.

Последний раз редактировалось alex_fcsm; 23.01.2009 в 12:33.
alex_fcsm вне форума Ответить с цитированием
Старый 16.12.2008, 17:10   #4
svobodys
Пользователь
 
Регистрация: 07.10.2008
Сообщений: 42
По умолчанию

Просто препод не примет.
т.к. функции он еще не объяснял.
svobodys вне форума Ответить с цитированием
Старый 16.12.2008, 17:20   #5
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию Без функций

Код:
uses crt;
const n=10;
var i,j,max,l,r,temp,n1,p,k:integer;
    a:array[1..n,1..n] of char;
     m,m1:set of char;

begin
randomize;
clrscr;
for i:=1 to n do
 begin
 for j:=1 to n do
 begin
  a[i,j]:=chr(random(25)+65);{инициализируем матрицу букв}
  write(a[i,j],' ');
 end;
 writeln;
 end;

l:=1;r:=1;max:=0;{начальные присвоения}
for i:=1 to n do
 for j:=1 to n do
   if i<>j then begin
                 n1:=0;
                 m:=[];{множество букв строки i}
                 m1:=[];{множество совпавших букв}
                 for p:=1 to n do
                          if not(a[i,p] in m) then begin 
                           m:=m+[a[i,p]];{если буква из строки i еще не рассматривалась то просматриваем}
                           for k:=1 to n do
                            if (a[i,p]=a[j,k])and(not(a[j,k] in m1)) then begin 
                                                   m1:=m1+[a[j,k]];{если буква есть в j}
                                                   inc(n1);
                                                  end;
                          end; 
                 temp:=n1;{число совпадений}
                 if temp>max then begin {если больше чем до этого то запоминаем их и номера этих строк}
                                   l:=i;
                                   r:=j;
                                   max:=temp;
                                  end;
                 end;

  writeln(l,' ',r,' ',max,'chars');

end.
Нормальное состояние техники - нерабочее, все остальное частный случай.

Последний раз редактировалось alex_fcsm; 16.12.2008 в 19:40.
alex_fcsm вне форума Ответить с цитированием
Старый 16.12.2008, 19:33   #6
stasig
Пользователь
 
Регистрация: 04.11.2008
Сообщений: 31
По умолчанию

А можете немного пояснить ход решения..
stasig вне форума Ответить с цитированием
Старый 16.12.2008, 19:40   #7
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Посмотрите пост выше
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 21.12.2008, 18:13   #8
stasig
Пользователь
 
Регистрация: 04.11.2008
Сообщений: 31
По умолчанию

Извините еще раз, просто не сталкивался с этим.
a[i,j]:=chr(random(25)+65) {мы инициализируем матрицу значит, а 25 и 65 что такое?}
и вот еще

if (a[i,p]=a[j,k])and(not(a[j,k] in m1)) then begin
тут у нас условие как работает?
stasig вне форума Ответить с цитированием
Старый 21.12.2008, 18:21   #9
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Цитата:
Извините еще раз, просто не сталкивался с этим.
a[i,j]:=chr(random(25)+65) {мы инициализируем матрицу значит, а 25 и 65 что такое?}
ASCII код букв начинается от 65 до 90, таким образом чтобы сгенерировать букву мы берем число из диапазона от 65 до 90 и "переводим" его в букву.
Посмотрите таблицу ASCII символов от 65 до 90.

Цитата:
if (a[i,p]=a[j,k])and(not(a[j,k] in m1)) then begin
тут у нас условие как работает?
Если в строке i буква [i,p] равна букве[j,k] в строке j и при этом букву [j,k] не рассматривали то подсчитываем ее.
Это условие позволяет избегать повторения буквы в строке

A B C D
A A A A

без этого (not(a[j,k] in m1)) условия получится 4 - хотя совпадений между 2 - мя строками только 1
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный Массив n01R Помощь студентам 9 19.12.2009 16:41
Двумерный массив Анжелика Помощь студентам 3 29.12.2008 21:23
Двумерный массив apetr Паскаль, Turbo Pascal, PascalABC.NET 2 30.11.2008 12:32
Двумерный массив... slim5 Помощь студентам 2 20.06.2008 23:16
Двумерный массив в С++ Draid Помощь студентам 2 07.03.2008 22:06