Змінюй хід війни! Допомагай ЗСУ!

Pascal , покажите где ошибка ?

🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #81
В общем я написал немного другой алгоритм ,ща снапищу и скажу где уже другая ошибко
ИМХО, проблема в том, что алгоритм то вы и не написали...
Если действительно хотите понять, что делаете, то попробуйте как раз таки этот самый алгоритм написать. Можно просто на русском языке понятными вам словами, можно ввиде структуры и т.п.
Если же вам надо просто не получить двойку, то пишите так: "Есть задача, нужен код". Ну или пиво кому-нить отнесите :)

А вот то что вы запостили... Ошибка говорите?.. Да тут только бегло взглянув и увидев randomize или 3 begin'a и один end... Вообщем, не будет никто в этом разбираться... Особенно на ХФ :)
*голосую за вариант "отнести пиво"

Кстати, а почему в этой теме еще не отметился Тыемураз? Вроде бы, очень подходящее место для гусей и бараньего сыра :-)
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #82
а зачем два ,один и тот же умножить друг на друга ну или квадрат ...
я ж в танке ))

В общем я написал немного другой алгоритм ,ща снапищу и скажу где уже другая ошибко ((
program first;
uses crt;
const
n=5;
x=10;
type
matrix=array[1..n,1..x] of integer;
matrix2=array[1..n,1..x] of integer;
a=matrix;
b=matrix2
var
j,i.j2,i2:byte;
w:integer;
begin
clrscr;
randomize;
for i:= 1 to n do;
for j:= 1 to x do;
begin
for i2:=1 to n do
for j2:=1 to x do
begin
w:= a * b;
write (w[i,j]:4);
writeln;
readkey;
end.


ругаеться 88 ")' expected возле умножения ...
нет, ну паскаль язык специфический, поэтому я даже и не помню на каких мелочах там ошибки могутбыть, но для обучения самое оно...т.к. у меня его и близко нет, та и в инет мне лень глядеть на синаксис и т.п. этого языка, но я то тоже на нём учился когда-то давно, поэтому меня сразу же много смущает:
w:= a * b; - умножить два массива через переменные, это по-моему смешно.
randomize; - это по-моему была вообще случайная какая-то переборка массива.

Можно попробовать мне немного исправить этот код, на примерно такой, но он вряд ли будет правильным, но зато суть понятна будет:

program first;
uses crt;
const
n=5;
x=10;
type
matrix=array[1..n,1..x] of integer;
matrix2=array[1..n,1..x] of integer;
var
j,i.j2,i2:byte;
w:integer;
begin
clrscr;
for i:= 1 to n do;
begin
for i2:=1 to n do
for j2:=1 to x do
writeLn (w[i,j]:4);
end;
for j:= 1 to x do;
begin
for i2:=1 to n do
for j2:=1 to x do
writeLn (w[i,j]:4);
end;
readkey;
end.

ЗЫ: нет, ну это точно не правильно...
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #83
kaska_, не гони куйню. В с++ я тебе перегружу оператор * так, чтоб он перемножал два разномерных массива.

P.S. Pascal-кода ты всё равное не исправил аж ни разу, да и алгоритма тоже.
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #84
kaska_, не гони куйню. В с++ я тебе перегружу оператор * так, чтоб он перемножал два разномерных массива.

P.S. Pascal-кода ты всё равное не исправил аж ни разу, да и алгоритма тоже.
причём тут с++? Если ты считаешь себя программистом, то где твоя логика?
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #85
На свой код смотрел?

Если посмотришь, то почитай пост Vader'а и расскажи нам, что ты написал.

PS "kaska_, не гони куйню." и "В с++ я тебе перегружу оператор * так, чтоб он перемножал два разномерных массива". два разных предложения.
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #86
Код:
Del3 := 5;
MinD := 17;
MinD := (MinD div Del3) * Del3;
solor2001, чему будет равно MinD?
Это тут ни при чем. Я о конкретном участке кода:
Код:
if MinD mod Del3 <> 0 then
   ...
else
  MinD := (MinD div Del3) * Del3;
Вот тут-то как раз если MinD делится без остатка на Del3, то div эквивалентно "/" (обычное деление). Поэтому именно здесь это бессмысленный код. Лишние операции для проца, и никакого толку. Оптимизатор прекомпилятора, естественено, ничего здесь не оптимизрует, т.к. код немусорный.

Этот умник прав только в том случае, когда A кратно B
В том то и дело, что оно всегда кратно в этом месте кода :)

...
задали задание перемножить два двумерных массива .
...
Код:
program first;
...
for i:= 1 to n do;
for j:= 1 to x do;
begin
w:=sqr(a);
write (w[i,j]:4);
writeln;
readkey;

Если ничего не путаю, такая конструкция
Код:
for i:= 1 to n do;
если и выполнится, то является циклом без тела. Т.е. точку с запятой ставить не нужно, а после do сразу пишется операция (если она одна) или целый блок begin-end;
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #87
Это тут ни при чем. Я о конкретном участке кода:
Код:
if MinD mod Del3 <> 0 then
   ...
else
  MinD := (MinD div Del3) * Del3;

if MinD mod Del3 <> 0 then
if MinD >= 0 then
MinD := (MinD div Del3 + 1) * Del3
else
MinD := (MinD div Del3) * Del3;

Ты всё-таки даун. Там вообще ничего не произойдет, если делимое кратное делителю.

Сам ты даунбыдлокодер. Смотри код внимательней, а потом делай выводы!
:D
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #88
Думаю, наиб эффективно двумерный массив представить ономерным (какой он и есть на самом деле), взять указатель на первую ячейчку и потом приинлайнить вставку на ассемблере для умножения и помещения результата в заранее отведенное место :)
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #89
Думаю, наиб эффективно двумерный массив представить ономерным (какой он и есть на самом деле), взять указатель на первую ячейчку и потом приинлайнить вставку на ассемблере для умножения и помещения результата в заранее отведенное место :)
Ничо так подход для начинающего программировать студента :) Препод будет счастлив.
Вот накидал примерное решение, вполне обыкновенное, без оптимизаций и с конкретными данными:
Код:
program matrix; {hello neo! white rabbit still looking for you}
uses crt;
const
  m1:array [1..3,1..3] of integer=((1,2,-1),
                                   (3,4,0),
                                   (-1,2,-2));
  m2:array [1..3,1..2] of integer=((3,-2),
                                   (1,0),
                                   (4,-3));
var
  h1,w1h2,w2:integer;
  res:array [1..3,1..2] of integer;
  i,j,k:integer;
begin
  h1:=3;
  w1h2:=3;
  w2:=2;
  {umnogenie}
  for i:=1 to h1 do
    begin
      for j:=1 to w2 do
        begin
          res[i,j]:=0;
          for k:=1 to w1h2 do
            res[i,j]:=res[i,j]+m1[i,k]*m2[k,j];
            {pechataem stroku}
            write(res[i,j],' ');
          end;
      writeln; {novaya stroka}
    end;
    readkey;
end.

Если компилиться что-то не будет, прошу простить - паскаля нету, а если и найду, то будет древняя гадская error 200 вылазить из-за ошибки в crt. Хотя были времена, когда в универе писал проги на бумажке и все правильно было, смешно конечно, но компов тогда не хватало, ляха-муха. Короче отдаю как есть на суд присяжных, ТС и его препода :D

Ты всё-таки даун. Там вообще ничего не произойдет, если делимое кратное делителю.


:D

Ну ладно, прошу прощения, смотрел код "по-диагонали"и пропустил еще один if. И все же это не повод обзывать дауном. Даунизм - просто клинический диагноз, а ко мне он отношения не имеет :) А то, что ты пишешь, показывает тебя не с лучшей стороны.
 
Останнє редагування:
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #90
Вот пример.

program five;
var
a:array[1..100,1..100] of integer; {можно было объединить a,b,c:array[1..100,1..100] of integer;}
b:array[1..100,1..100] of integer;
c:array[1..100,1..100] of integer;
m,k,n,i,j,m2,n2,S:integer;
begin
randomize;
write ('введите n= ');
read(n);
write ('введите m= ');
read(m);
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(20)-10; {наверное так}
writeln('матрица а=');
for i:=1 to n do
begin
for j:=1 to m do
write(round(a[i,j]),' ');
writeln( );
end;
write('введите n2= ');
read(n2);
write('введите m2= ');
read(m2);
for i:=1 to n2 do
for j:=1 to m2 do
b[i,j]:=random(20)-10;
writeln('матрица b=');
for i:=1 to n2 do
begin
for j:=1 to m2 do
write(round(b[i,j]),' ');
writeln( );
end;
if m=n2 then
begin
for i:=1 to n do
for j:=1 to m2 do
begin
S:=0;
for k:=1 to m do
S:=S+a[i,k]*b[k,j];
c[i,j]:=S;
end;
writeln('матрица c=a*b');
for i:=1 to n do
begin
for j:=1 to m2 do
write(round(c[i,j]),' ');
writeln( );
end;
end
else
write('перемножение невозможно');
end.
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #91
А зачем round? Все же integer...
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #92
PS "kaska_, не гони куйню." и "В с++ я тебе перегружу оператор * так, чтоб он перемножал два разномерных массива". два разных предложения.
ну так причём тут с++? ты из Таллинна?
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #93
w:= a * b; - умножить два массива через переменные, это по-моему смешно.

с++ при том, что вот это можно спокойно реализовать.

Обратите внимание, что цель задачи - умножить два двумерных массива (матрицы), а не умножить элементы двух массивов с одинаковыми индексами
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #94
Не суть важно, необходимо просто сделать одномерные массивы произведений сначала столбцов и строк.
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #95
Всем спасибо парни кто помогал , все реальное спасибо и каждому по плюсу , родина вас не забудет !!!
 
  • 🟡 17:30 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #96
закрывай тему, ТС
 
Назад
Зверху Знизу