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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2008, 21:03   #1
ProPaL
Пользователь
 
Регистрация: 10.11.2007
Сообщений: 22
По умолчанию Pascal. Матрици.

Привет. Не знаю как написать текст программы, кто знает напишите пожайлусто?!
Дана матрица. В матрице найти две строки с равными количествами ненулевых элементов. Вычесть элементы строки с меньшим номером из соответствующих элементов всех строк.
ProPaL вне форума Ответить с цитированием
Старый 08.02.2008, 21:10   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Давайте писать вместе.

Начнём:
1. Давайте сначало обьявим массив, а также одну переменую для работы со строками. Этот массив и будет матрицей.
Судя по всему массив двумерный. Давайте ограничимся размерностью 5 на 5.
Пишите....
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 08.02.2008, 21:26   #3
ProPaL
Пользователь
 
Регистрация: 10.11.2007
Сообщений: 22
По умолчанию

так?
Код:
program matr;
var
A:[1..5, 1..5] of real;
i:byte;
begin
ProPaL вне форума Ответить с цитированием
Старый 08.02.2008, 22:35   #4
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Несовсем так.
1. Неправильно объявлен массив.
2. Зачем Реал?

Заполнение массива будем делать при помощи функции Random.
Для справки: Random

Ну и для наглядности выведем массив на экран.

Код:
Var mas : array [1..5, 1..5] of Integer;
      x, y : Byte;

Begin

Randomize;
For x := 1 To 5 Do
  For y := 1 To 5 Do mas[x,y] := Random(2);

For x := 1 To 5 Do
  Begin
    For y := 1 To 5 Do Write(mas[x,y], ' ');
    Writeln;
  End;

// Вот сюда нужно будет поместить код обработки...
// "В матрице найти две строки с равными количествами 
// ненулевых элементов"
// За строки у нас отвечает переменная x.
// А также ввывести результат.

Readln;

End.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 08.02.2008, 22:51   #5
ProPaL
Пользователь
 
Регистрация: 10.11.2007
Сообщений: 22
По умолчанию

а как сделать: *В матрице найти две строки с равными количествами
ненулевых элементов* ?
ProPaL вне форума Ответить с цитированием
Старый 08.02.2008, 23:16   #6
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

"Этоже элементарно Ватсон"...
А как бы это сделал ты?
Ну хотьб примерно....
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 09.02.2008, 02:08   #7
ProPaL
Пользователь
 
Регистрация: 10.11.2007
Сообщений: 22
По умолчанию

элементарно когда знаешь) я ещё не сталкивался с таким просто, пожтому даже не знаю как...
ProPaL вне форума Ответить с цитированием
Старый 09.02.2008, 02:43   #8
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Я тут подумал, что использовать три раза двойной цикл попахивает особым идиотизмом... Можно же это всё засунуть в один двойной цикл?!...
Я имею ввиду: заполнение массива, ввывод его на экран и подстчёт "... количества ненулевых элементов."
Ну а потом просто ищем две* строки

* - на самом деле мой код находит все такие равные строки, просто я толькочто прочитал условие до конца.

Код:
Var mas : array [1..5, 1..5] of Integer;
      x, y : Byte;

Begin

Randomize;
For x := 1 To 5 Do
 Begin
  For y := 1 To 5 Do
    Begin
    mas[x,y] := Random(2);
    Write(mas[x,y], ' ');
      if y = 1 Then
        Begin
          if mas[x,y] = 0 Then
             mas[x,y] := 0 Else
             mas[x,y] := 1;
             Continue;
        End;
      if mas[x,y] <> 0 Then mas[x,1] := mas[x,1] + 1;
    End;
  Writeln;
 End;

Writeln;

For x := 1 To 5 Do
  For y := (1 * x) + 1 To 5 Do
    if mas[x,1] = mas[y,1] Then
     Begin
      Writeln ('Stroka #',x,' ravna stroke #',y);
      Break;
     End;

Readln;

End.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 09.02.2008, 10:58   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Продолжим писать все вместе. Критика приветствуется.
Код:
Program stroki;
uses crt;
var n:byte;-размерность матрицы
    i,j:byte;-счетчики в циклах
    k:byte;-количество ненулевых элементов
    i1:byte;-номер первой строки с одинаковым количеством ненулевых элементов
    a:array[1..20,1..20] of integer;- матрица
    b:array[1..20]of integer; - массив количеств ненулевых элементов в строках
begin
clrscr;
write('n=');readln(n);
randomize;
writeln('Ishodnaia matrica');
for i:=1 to n do
  begin
    for j:=1 to n do
      begin
        a[i,j]:=random(5);
        write(a[i,j]:3);
      end;
  writeln;
  end;
readln;
for i:=1 to n do
  begin
   k:=0;
   for j:=1 to n do
     begin
       if a[i,j]<>0 then k:=k+1;//считаем количество ненулевых элементов в строке
     end;
   b[i]:=k;  //заносим его в массив
   end;
for i:=1 to n-1 do   //определяем, есть ли одинаковые и номер первой одинаковой строки
   begin
     for j:=i+1 to n do
       begin
         if b[i]=b[j] then break;
       end;
     if j<n then break;
   end;
   if i<n then i1:=i
   else
       begin
         writeln('odin net');
         readln;
         exit;
       end;
for j:=1 to n do   //запоминаем элементы нужной строки
b[j]:=a[i1,j];
writeln('Obrabotannaia matrica');
for i:=1 to n do
  begin
   for j:=1 to n do
      begin
        a[i,j]:=a[i,j]-b[j]; //вычитаем их из всех строк
        write(a[i,j]:3);
      end;
  writeln;
  end;
readln;
end.
puporev вне форума Ответить с цитированием
Старый 10.02.2008, 01:13   #10
ProPaL
Пользователь
 
Регистрация: 10.11.2007
Сообщений: 22
По умолчанию

Пасибо парни!
ProPaL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД на Pascal Умелец Помощь студентам 24 16.09.2010 20:44
Pascal Nadjuha Помощь студентам 2 18.06.2008 18:13
Need help, Pascal Бедный студент Помощь студентам 0 31.05.2008 01:38
матрици Forro Паскаль, Turbo Pascal, PascalABC.NET 5 14.04.2008 20:31
Pascal bladebreaker Помощь студентам 2 23.05.2007 22:15