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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2007, 19:19   #1
istragon
Новичок
Джуниор
 
Аватар для istragon
 
Регистрация: 02.12.2007
Сообщений: 2
Вопрос массив в паскале

Дано: var C: array [1..12,1..18] of char; k:integer;
Определить k-количество различных элементов массива C (т.е. повторяющиеся элементы считать один раз).
istragon вне форума Ответить с цитированием
Старый 03.12.2007, 19:37   #2
kommunist
C# developer
Форумчанин
 
Аватар для kommunist
 
Регистрация: 03.10.2007
Сообщений: 393
По умолчанию

Заполняеш массив затем ->
Код:
n:=c[1,1];  // символ который сравниваем
  for i:= 1 to 12 do
  begin
  for j:= 1 to 18 do
  begin
  if n = c[i,j]  // сравниваем все символы с первым
  then
  inc(k);      // увелисиваем на еденицу
end;
  write(k);
end;
  readln;
end.
I like WPF
kommunist вне форума Ответить с цитированием
Старый 03.12.2007, 20:16   #3
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Вот рабочий код:
Код:
program massiv;
uses crt;
const m=12; n=18;
var
b:array[1..m,1..n] of boolean;
c:array[1..m,1..n] of integer;
i,j,t,p,k:integer;
begin
clrscr;
randomize;
for i:=1 to m do begin
for j:=1 to n do begin
c[i,j]:=random(50)+10;
write(c[i,j],' ');
b[i,j]:=true;
end;
writeln;
end;
for i:=1 to m do
for j:=1 to n do
for t:=1 to m do
for p:=1 to n do
if (i<>t) or (j<>p) then begin
if b[i,j]=true then if c[i,j]=c[t,p] then b[t,p]:=false;
end;

writeln;
for i:=1 to m do
for j:=1 to n do if b[i,j]=true then begin k:=k+1; write(c[i,j],' '); end;
writeln;
writeln('KOLICHESTVO->',k);
readkey;
end.
Я не маюсь бездельем, я от него тащусь!
Tayfun вне форума Ответить с цитированием
Старый 04.12.2007, 09:41   #4
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Цитата:
for i:=1 to m do
for j:=1 to n do
for t:=1 to m do
for p:=1 to n do
получается сложность алгоритма n*m*n*m
для m=12 и n= 18
получаем 46656

Код:
  k:=0;
  for i:=1 to n-1 do
  begin
    for j:=i+1 to n do
      if c[i]=c[j] then
        begin
          t:=c[i+1];
          c[i+1]:=c[j];
          c[j]:=t;
        end;
      if c[i]<>c[i+1] then k:=k+1;
  end;
  k:=k+1;
// programming by plague
для одномерного массива сложность (n-1)*(n-2)/2
для двухмерного массива сложность (n*m-1)*(n*m-2)/2
для m=12 и n= 18
получаем 23005
ну и конечно если взять большие n и m разница сложности сушественна
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив что ли... Черничный Общие вопросы Delphi 4 11.06.2008 08:19
массив! Jodu Помощь студентам 2 11.01.2008 20:59
Массив xxxPascalxxx Помощь студентам 10 05.01.2008 16:19
массив Jodu Паскаль, Turbo Pascal, PascalABC.NET 11 01.11.2007 16:11
Массив vitalik007 Помощь студентам 15 17.10.2007 19:56