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

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

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

Автор: KriN 4.03.2009 1:42

program lab9;
type mat=array[1..10000,1..10000] of real;
var
i,j,n:integer;
k:real;
km:mat;
procedure changediag( x:mat;
var i,j,n:integer;
var k:real);
begin
For i := 1 To n do
For j := 1 To n do
k := 0;
For i := 1 To n - 1 do
For j := 1 To n - 1 do
k := x[i, i + 1] ;
x[i, i + 1] := x[j + 1, j] ;
x[j + 1, j] := k ;
end;
begin
For i := 1 To n do
For j := 1 To n do
write('n=');
readln(n);
writeln('x[',i,j:2,']=');
For i := 1 To n do
For j := 1 To n do
changediag(km,n,k,i,j);
writeln(' x',km[i,j]:2 :1);
end.




Пишет:"тип фактического параметра-переменной real отличается от типа формального параметра integer"

Автор: Unconnected 4.03.2009 1:52

У меня на TP7 вообще ругается на тип, говорит Structure too large. Слишком большой диапазон как я понял. Какой компилятор используешь?

Плюс Invalid For control variable..

Автор: volvo 4.03.2009 2:02

Цитата
Слишком большой диапазон как я понял
Матрица очень большая... Под TP ни одна структура данных не может быть больше 64Кб. А тут - полгигабайта...

ДАльше... Паскаль всегда требовал и будет требовать, чтобы в качестве переменной цикла использовалась ЛОКАЛЬНАЯ переменная, а не переданная в качестве Var-параметра.

Ну, и третье: KriN, исправь первый пост... Теги добавь, чтобы программа была читаемой.

Автор: Unconnected 4.03.2009 2:11

Только вот интересно, как он получил ошибку несовпадения типов, если дальше второй строки не компилируется)

Автор: volvo 4.03.2009 2:16

Любой 32-битный компилятор выдает тебе ВСЕ ошибки, а не по одной, как Турбо-Паскаль. И ограничения в 64К у этих компиляторов нет.

Автор: KriN 4.03.2009 2:45

Цитата(Unconnected @ 3.03.2009 21:52) *

Какой компилятор используешь?



Pascal ABC

Автор: Unconnected 4.03.2009 2:59

А ошибку только одну выдаёт или ещё которые volvo назвал?

Автор: maksimla 4.03.2009 13:22

посмотрел и вот исправил эти ошибки если можно сказать так вот что получилось

 program lab9;
type mat=array[1..100,1..100] of real;
var
i,j,n:integer;
k:real;
km:mat;
procedure changediag( x:mat;
var i,j,n:integer;
var k:real); {у тебя в процедуре тип real стоит 5 а как задаешь то он стоит 3 из за этого ошибка}
begin
{For i := 1 To n do
For j := 1 To n do} {зачем это тебе это ненужно и так k = 0 будет это ведь не массив}
k := 0;
For i := 1 To n - 1 do
For j := 1 To n - 1 do
k := x[i, i + 1] ;
x[i, i + 1] := x[j + 1, j] ;
x[j + 1, j] := k ;
end;
begin
{For i := 1 To n do
For j := 1 To n do } {зачем тебе это если всеравно невыполняется это только потом задаешь n}
write('n=');
readln(n);
writeln('x[',i,j:2,']=');
For i := 1 To n do
For j := 1 To n do
changediag(km,n,{k}i,j,k);{вот поставил его последним и ошибки нету}
writeln(' x',km[i,j]
{1});{некак непойму зачем тебе цыфра тут или ее совсем ненадо или поставь перед ней запятую или двоеточие}
end.



вот сейчас у меня запускается вводим число и потом ошибка выбивает в процедере на k := 0; когда несколько раз проходит

Автор: volvo 4.03.2009 13:28

maksimla, это не будет компилироваться. Почему - я уже написал выше, читай внимательнее...

Автор: maksimla 4.03.2009 13:59

Цитата(volvo @ 4.03.2009 8:28) *

maksimla, это не будет компилироваться. Почему - я уже написал выше, читай внимательнее...

ну я вот поспешил немножко сейчас исправил и у меня программа запускается и работает пару строчек lol.gif
а как не знаем самого задания так я дальше не полезу только исправлю что найду тут .



Добавлено через 7 мин.
я даже не знаю что о такой программе и сказать внимательнее посмотрел ужас просто

Автор: volvo 4.03.2009 14:34

ЭТО у тебя запускается?

Цитата
procedure changediag( x:mat;
var i,j,n:integer;
var k:real); {у тебя в процедуре тип real стоит 5 а как задаешь то он стоит 3 из за этого ошибка}
begin
{For i := 1 To n do
For j := 1 To n do} {зачем это тебе это ненужно и так k = 0 будет это ведь не массив}
k := 0;
For i := 1 To n - 1 do
For j := 1 To n - 1 do
k := x[i, i + 1] ;
x[i, i + 1] := x[j + 1, j] ;
x[j + 1, j] := k ;
end;
Неправда... Повторяю еще раз: ни один компилятор Паскаля такое НЕ КОМПИЛИРУЕТ, и не будет. Так что - делай выводы... И исправляй дальше.

Автор: maksimla 4.03.2009 14:52

это так у меня компилируется и я выполняю тут пошаговые действия смотрю постоянно
в процедуре доходит до

k := x[i, i + 1] ;
пишет ошибка и все

вот как думал я так сейчас ему написал только незнаю что процедура должна делать и там все когда считается выдает ошибку
вот

program lab9;
type mat=array[1..100,1..100] of real;
var
i,j,n:integer;
k:real;
km:mat;
procedure changediag( x:mat;
var i,j,n:integer;
var k:real);
begin
k := 0;
{я тут вот застрял незнаю что ты тут хочешь делать }
For i := 1 To n - 1 do
For j := 1 To n - 1 do
k := x[i, i + 1] ;
x[i, i + 1] := x[j + 1, j] ;
x[j + 1, j] := k ;
end;
begin
write('n=');
readln(n);
{мне кажется что ты тут хотел в массив числа ввести и посмотреть на числа }
For i := 1 To n do
For j := 1 To n do
readln(km[i,j]);
For i := 1 To n do
For j := 1 To n do
writeln('x[',i,j:2,']=',km[i,j]);
{если будишь по шаговую операцию выполнять то увидишь все числа }
For i := 1 To n do
For j := 1 To n do
changediag(km,i,j,n,k); {так более правильно будет наверное если все буквы по порядку стоят задаются }
{тут забыл ты поставить циклы чтобы потом все значения увидить}
For i := 1 To n do
For j := 1 To n do
writeln(' x',km[i,j]);
readln;
end.


подскажите что процедура должна делать?
то я чего то не разобрался
а так у меня запускается программа

Автор: maksimla 4.03.2009 15:21

запустил на fpc 2.2.2 выдало ошибку error: Illegal parameter: -Opentium3

Автор: KriN 4.03.2009 22:45

Программа должна переставлять местами строчки,прилегающие к главной диагонали в кв.матрице