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, это не будет компилироваться. Почему - я уже написал выше, читай внимательнее...
ну я вот поспешил немножко сейчас исправил и у меня программа запускается и работает пару строчек а как не знаем самого задания так я дальше не полезу только исправлю что найду тут .
Добавлено через 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
Программа должна переставлять местами строчки,прилегающие к главной диагонали в кв.матрице
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.