2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Произведение матриц
Сообщение04.01.2015, 21:32 


27/08/14
206

(Оффтоп)

Чисто из занудства. Всё-таки array of array of integer - это не двумерный массив, а массив массивов. Работа с ним не всегда удобна (например нельзя целиком обнулить массив через FillChar или скопировать через Move) и менее эффективна (память для каждой строки выделяется и освобождается отдельно). К сожалению Pascal не позволяет создавать нормальных многомерных динамических массивов. Поэтому надо написать соответствующий класс :D

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение04.01.2015, 22:42 
Аватара пользователя


27/03/14
1091
rockclimber в сообщении #956435 писал(а):
fronnya в сообщении #956416 писал(а):

(Оффтоп)

Кто не согласен, тот пусть вместо программирования вышиванием займется.

Пойду домик вышью. Неужели это нельзя реализовать с помощью статического массива? Почему? Извините, пожалуйста, но ничего мне пока про динамические массивы не говорите, мы их ещё не используем.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение04.01.2015, 22:49 
Заслуженный участник
Аватара пользователя


18/01/13
12044
Казань
Можно. Если размеры массивов ограничены какой-то константой (например, не более 100).
Да вы же уже написали, в чем проблема? Хотя, конечно, несколько громоздко. Зачем заводить две процедуры создания матриц? Разве нельзя два раза воспользоваться одной?

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение04.01.2015, 23:18 
Аватара пользователя


27/03/14
1091
provincialka в сообщении #956507 писал(а):
Можно. Если размеры массивов ограничены какой-то константой (например, не более 100).
Да вы же уже написали, в чем проблема? Хотя, конечно, несколько громоздко. Зачем заводить две процедуры создания матриц? Разве нельзя два раза воспользоваться одной?

Я не знаю, как это сделать. Там же возникает новый размерчик $p$

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение04.01.2015, 23:32 
Заслуженный участник
Аватара пользователя


18/01/13
12044
Казань
А разве размеры не передаются в процедуру в качестве параметров? Я, правда, внимательно не читала.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение04.01.2015, 23:44 
Аватара пользователя


27/03/14
1091
provincialka в сообщении #956530 писал(а):
А разве размеры не передаются в процедуру в качестве параметров? Я, правда, внимательно не читала.

Ну тогда я скину программу, которую я писал до тех пор, пока у меня нервы не сдали.
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type TMatrix=array[1..100,1..100] of integer;


procedure TM(Var m,n:integer; Var a:TMatrix);
var
    i,j:integer;
begin
  randomize;
  writeln ('kol-vo strok: ');
  readln(m);
  writeln ('kol-vo stolbcov: ');
  readln(n);
  i:=1;
    while i<=m do
      begin
        j:=1;
          repeat
            a[i,j]:=random(6)-1;
            write(a[i,j]:3);
            j:=j+1;
          until j>n;
        writeln;
        i:=i+1;
      end;
end;

procedure TM1(n:integer; var p:integer; Var b:TMatrix);
var
    j,k:integer;
begin
  randomize;
  writeln ('kol-vo stolbcov: ');
  readln(p);
  j:=1;
    while j<=n do
      begin
        k:=1;
          repeat
            b[j,k]:=random(6)-1;
            write(b[j,k]:3);
            k:=k+1;
          until k>p;
        writeln;
        j:=j+1;
      end;
end;

procedure ymnog(m,n,p:integer; a,b:TMatrix; Var c:TMatrix);
var
    i,j,k:integer;
begin
  for i:=1 to m do
    begin
      for k:=1 to p do
        begin
          c[i,k]:=0;
            for j:=1 to n do
              begin
                c[i,k]:=a[i,j]*b[j,k]+c[i,k];
              end;
            write (c[i,k]:4);
        end;
      writeln;
    end;

end;

Var
    m,n,p:integer;
    a,b,c:TMatrix;

Begin
  TM(m,n,a);
  TM1(n,p,b);
  writeln;
  ymnog(m,n,p,a,b,c);
readln;
End.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение04.01.2015, 23:51 
Заслуженный участник
Аватара пользователя


18/01/13
12044
Казань
А зачем вы ввод данных с экрана включаете в процедуру создания матрицы? Это разные вещи. В основной программе организуйте ввод размеров, а в функцию передавайте их как параметры.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение05.01.2015, 01:20 
Аватара пользователя


27/03/14
1091
provincialka в сообщении #956540 писал(а):
А зачем вы ввод данных с экрана включаете в процедуру создания матрицы? Это разные вещи. В основной программе организуйте ввод размеров, а в функцию передавайте их как параметры.

А в чем разница?
Кстати, в паскале функция- это совсем не то, что вы имеете в виду.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение05.01.2015, 01:27 
Заслуженный участник
Аватара пользователя


18/01/13
12044
Казань
Ну, процедура, непринципиально. Функция тоже может внутри себя разные действия производить.

(Оффтоп)

я просто сейчас пользуюсь языком R, в котором это разделение не предусмотрено, все называется функцией. Что разумно.

А делать ввод отдельно нужно, чтобы пользоваться одной процедурой для создания обеих матриц. Например, процедура создания называется sozd и вы вызываете sozd(m,n,a); sozd(n,p,b).

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение05.01.2015, 01:53 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли

(Бу-бу-бу)

Ну вот зачем это вообще? Какого чёрта? Зачем калечить мозги физикам-первокурсникам изучением Паскаля? Это что, какая-то особенная шутка белых, которую нам, чёрным, не понять? Хочешь научить их низкоуровневому программированию, учи их Си. Хочешь показать им, как компьютер помогает решать физические задачи, познакомь их с Wolfram Mathematica. Хочешь учить их программированию, преподавай им Python. Извините, достало.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение05.01.2015, 02:07 
Заслуженный участник
Аватара пользователя


18/01/13
12044
Казань

(to Aritaborian)

Да, странно. У нас (на ВМК) дают Си. Про Паскаль что-то не слышала. У меня ребенок на курсах и то Си изучает. Правда, C#.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение05.01.2015, 02:12 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли

(Оффтоп)

Ну что вы, блин, в самом деле. Си-шарп — совсем иная штука, гораздо более близкая к той же Java. О «низкоуровности» там и речи никакой не идёт.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение05.01.2015, 02:16 
Заслуженный участник
Аватара пользователя


18/01/13
12044
Казань

(Aritaborian)

Ладно, признаюсь в невежестве. Он на других курсах C++ проходил, но маловат был, не выдержал.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение05.01.2015, 02:20 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли

(provincialka)

Ну разные ведь, совершенно разные языки: C++ и C#! (да и Си — третий, отдельный язык.) В свою очередь прошу у вас прощения за несдержанность.

 Профиль  
                  
 
 Re: Произведение матриц
Сообщение05.01.2015, 02:24 
Аватара пользователя


27/03/14
1091

(Оффтоп)

:-( ну что поделать. Такая у нас программа на физфаке. Пришли из лицея при БГУ олимпиадники- физики, которых в лицее учили языку СИ, долго ржали, когда посмотрели на программу по программированию. В следующем семестре будет объектно-ориентированное что-то. Хм, а вот правда, зачем ребят учить в лицее языку СИ, если они потом на том же физфаке все равно будут паскаль учить? Нас лектор говорила, что в общем паскаль сложнее, чем СИ в силу того, что в СИ заранее много чего заложено. Типа хотят, чтобы мы посмотрели, как все на самом деле. ПО- моему так она говорила, не очень хорошо помню.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group