|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
21.05.2015, 17:30 | #1 (permalink) |
Новичок
Регистрация: 02.04.2015
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль. Многомерные массивы
Напишите логическую функцию TEST(A, k), принимающую значение True, если k-я строка массива совпадает с k+1 (при k=10 совпадает с 1-й строкой). |
21.05.2015, 17:30 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Не стоит делать поспешных действий, полистайте аналогичные проблемы Многомерные массивы язык Си Массивы. Паскаль |
21.05.2015, 17:48 | #2 (permalink) |
Специалист
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,423
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 18120
|
и чему вас в школе учат бедолаги как жить то будете ?
строка массива ? наверное имеется ввиду ЭЛЕМЕНТ массива ? Код:
function TEST(A:array[1..10] of integer,k:Integer):Boolean; begin Result:=false; if k>10 then exit; if ((k=10) AND (A[10]=a[1])) OR ((k<10) AND (A[k]=a[k+1])) then Result:=true; end; |
21.05.2015, 17:55 | #4 (permalink) |
Специалист
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,423
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 18120
|
Я наверное не совсем правильно задачу понял, раз в теме многомерные массивы ?
Опишите хотя бы тип массива. С одной стороны указано многомерные, ч другой стороны что то сказано про строки ? т.е. это или A:array[1..10][1..X] of char; или может быть A:array[1..10] of string; ??? |
21.05.2015, 18:01 | #5 (permalink) |
Новичок
Регистрация: 02.04.2015
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Извиняюсь. type matrix = array[0..n, 0..n] of integer;
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
21.05.2015, 18:15 | #6 (permalink) |
Специалист
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,423
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 18120
|
обычно в паскале размерность массивов с единицы начинают (если вам все же надо с нуля, то код надо будет переписать, учитывая что длина массива получится на единицу больше)
Код:
const HEIGHT_MATRIX=10, {первая размерность массива } WIDTH_MATRIX=10; {это длина строки будет, вторая размерность массива } function TEST(A:array[1..HEIGHT_MATRIX][1..WIDTH_MATRIX] of Integer;k:Integer):Boolean; {* функция сравнения одномерных массивов. Сравниваем только на равенство *} function cmpmatrix(s,d:array [1..WIDTH_MATRIX] of Integer):Boolen; var i:Integer; begin Result:=true; for i:=1 to WIDTH_MATRIX do if s[i]<>d[i] then begin Result:=false; break; end; end; begin Result:=false; if k>HEIGHT_MATRIX then exit; {* что бы не вылететь за размерность массива *} {* тут я подозреваю что вместо 10 нужно HEIGHT_MATRIX, но в условии четко сказано про число 10 :), при HEIGHT_MATRIX=10 это не существенно *} if ((k=10) AND cmpmatrix(A[10],A[1])) OR ((k<>10) AND cmpmatrix(A[k],a[k+1])) then Result:=true; end; |
21.05.2015, 18:41 | #8 (permalink) |
Новичок
Регистрация: 02.04.2015
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Попробовал сам написать код, но функция не хочет правильно работать. Можете помочь найти ошибку
function Test(A: matrix;k:integer):boolean; var i:integer; begin if k=n then for i:=1 to n do if A[k,i]=A[1,i] then Test:=true else Test:=false; if k<>n then for i:=1 to n do if A[k,i]=A[k+1,i] then Test:=true else Test:=false; end; |
21.05.2015, 19:10 | #9 (permalink) |
Специалист
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,423
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 18120
|
Вам надо "вывалиться" из цикла при первом же не совпадении, а не прогонять цикл до конца, т.е. если переписать вашу функцию:
Код:
function Test(A: matrix;k:integer):boolean; var i:integer; begin Test:=true; if k=n then for i:=1 to n do if A[k,i]<>A[1,i] then begin Test:=false; exit; {* сразу выйдем из функции, дальше смысла проверять нет *} end; // if k<>n then это заменим на else else for i:=1 to n do if A[k,i]<>A[k+1,i] then begin Test:=false; exit; {* сразу выйдем из функции, дальше смысла проверять нет *} end; end; |
21.05.2015, 19:19 | #10 (permalink) |
Новичок
Регистрация: 02.04.2015
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Огромное спасибо!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|