Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Похожие строки матриц

Автор: good3p 27.12.2004 2:58

у меня еще вопросик))

1. Дана матрица Х размерности N x N. Две строки матрицы называются похожими если совпадают совокупности чисел, встречающихся в этих строках. Найти количество попарно похожих и непохожих строк матрицы Х. вывести спивок этих строк. (совподают совокупности означает, что в строках расположены одни и те же числа, причем не важно в каком порядке... )
и тут же появляется задача номер 3.

задание:
по введённой дате программа должна сказать какой день недели.

требования:
type
"число" = 1..31 (тип диапазон)
"месяц" = 1..12
"год" = 1..2100
"день_недели" = (PN,VT,SRE,CHE,PIA,SUB,VOS);
var ch: "число"
mes: "месяц"
god: "год"
D_N: "день_недели"

вот такие вот переменные должны быть в проге. сам плохо шарю в этих вещах, так что ничего более объяснить не могу...увы((
пользоваться "sudc" и "pred"

Высокосный год - который делится на 4, за исключением тех, которые делятся на 100 и не делятся на 400.


если кто хорошо шарит и кому не сложно напишите плз эти проги сюда.
и пожалуйста сделать ее как можно более примитивной (операторы например не замудренные) и + как можно больше комментариев.

спасибо

Автор: klem4 27.12.2004 3:05

Цитата(good3p @ 26.12.04 22:58)
совпадают совокупности чисел, встречающихся в этих строках

т.е. 15423 и 12345 - похожие или как ?

Первое, что приходит в голову по задаче 1 - отсортировать массив ПОСТРОЧНО
(по возраст/убыв) а потом сравнить строки!

Ну как-то так, может поможет
Неважный код конечно... предлагайте свои решения.

Код

uses crt;                  
const n=3;
var x:array[1..n,1..n] of integer;
  i,j,k,p,s,t:integer;
  bo:boolean;

Begin
 clrscr;
 randomize;
 for i:=1 to n do
  begin
     for j:=1 to n do
      begin
         k:=j;
         x[i,j]:=random(2);
         x[i,k]:=x[i,j];
         write(x[i,j]);
         write(' ');
      end;
      writeln;
  end;
 for i:=1 to n do
  for j:=1 to n-1 do
   for k:=j+1 to n do
    if x[i,j]>x[i,k] then
     begin
        p:=x[i,j];
        x[i,j]:=x[i,k];
        x[i,k]:=p;
     end;
  writeln;
  s:=0;
  for i:=1 to n-1 do
   begin
      t:=0;
      repeat
         inc(t);
         bo:=true;
         for j:=1 to n do
          if x[i,j]<>x[i+t,j] then
           bo:=false;

      if bo=true  then
       begin
          inc(s);
          writeln('Совпали строки ',i,' и ',i+t );
          writeln;
       end;
     until(i+t=n);
   end;

 writeln;
 writeln('s=',s);
 readln;
 end.