![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
valeral |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: valera Репутация: ![]() ![]() ![]() |
Дана задача
Пусть дана матрица A(N x N), а симметричная строка – такая строка, у которой все ее элементы симметричны относительно ее центрального элемента. Воспользуйтесь логической функцией, определяющей симметричность i-й строки, а также функцией, подсчитывающей количество таких строк в заданной матрице. Что я сделал program One;
const
N = 100;
M = 10;
var
A : array[1..N, 1..M] of real;
i, Count, Row, MaxCount : integer;
{ Ввод исходной матрицы }
procedure InputMatrix;
var
i, j : integer;
begin
writeln( ‘+++ Введите исходную матрицу +++’ );
for i := 1 to N do
for j := 1 to M do
begin
write( ‘A[’, i, ‘;’, j, ‘] = ’ );
readln( A[i, j] );
end;
end;
{ Вывод матрицы на экран }
procedure PrintMatrix;
var
i, j : integer;
begin
writeln( ‘+++ Матрица A +++’ );
for i := 1 to N do
begin
for j := 1 to M do
write( A[i,j], ‘ ’ );
writeln;
end;
end;
Потом проверка на симметричность
{ Проверка, является ли число симметричным }
function TestSym( x : integer ) : boolean;
var
y, z : integer;
begin
y := 0;
z := x;
while z > 0 do
begin
y := y * 10 + z mod 10;
z := z div 10;
end;
TestSym := x = y;
end;
потом подсчет
{ Подсчёт в строке симметричных чисел }
function CalculateRow( x : integer ) : integer;
var
i, Count : integer;
begin
Count := 0;
for i := 1 to M do
if TestSym( A[x,i] ) then Count := Count + 1;
CalculateRow := Count;
end;
begin
InputMatrix;
writeln; writeln;
PrintMatrix;
MaxCount := 0;
Row := 0;
for i := 1 to N do
begin
Count := CalculateRow( i );
if Count > MaxCount then
begin
MaxCount := Count;
Row := i;
end;
end;
writeln; writeln;
if Row = 0 then
writeln( ‘Нет строк с симметричными числами’ );
else
writeln( ‘Строка с макс. кол-вом сим. чисел: ’, Row );
end.
Дальше ступор включился полный, чё делать ХЕЗ |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Объединить все это в одну программу, и запустить.
Ты не указываешь проблему, которая у тебя возникла. С чего ты взял, что достаточно вывалить сюда куски кода, и кто-то будет искать ошибки ЗА ТЕБЯ? Ты расскажи, ГДЕ у тебя ошибки/недочеты... |
Malice |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Не понял, в задании требуется проверить симметричность чисел в строке, а ты проверяешь симметричность одного числа, это немного не то.
|
valeral |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: valera Репутация: ![]() ![]() ![]() |
во первых вылезла ошибка в блоке подсчета
if TestSym( A[x,i] ) then Count := Count + 1;
ошибка выдала со второй скобкой |
Malice |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Это потому что массив real, а функция с параметром integer. Но все равно - ты надергал кусков из разных программ, но делают они (в частности функция TestSym) не то.
|
valeral |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: valera Репутация: ![]() ![]() ![]() |
Хорошо, а как тогда сделать то? Я так понял что только первая часть правильна, остальное бред полный! Я проверил код, он вообще не работает, а его я переделывал с методички которую нам училка дала. Но потом и её пример проверил, балалайка - не работает
![]() ![]() |
Malice |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Функция TestSym должна быть примерно такой:
function TestSym(j:integer):boolean;
var i:integer;
b:boolean;
begin
b:=true;
for i:=1 to n div 2 do
b:=b and (a[j,i]=a[j,n-i+1]);
test:=b;
end;
Параметр J- номер строки в массиве. Массив А используется через глобальные переменные-это может не понравится преподам, можно его тоже в параметрах передавать. вызывать так: if TestSym(i) then Count := Count + 1;
ps и еще- в задании у тебя матрица NxN, а в программе NxM.. Сообщение отредактировано: volvo - 2.11.2006 16:40 |
valeral |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: valera Репутация: ![]() ![]() ![]() |
Посмотрите пожалуйста так на что то уже похоже
program One;
Const
N=10; {число СТРОК!}
N=10; {число СТОЛБЦОВ!}
type
TElem = integer;
Matrix = array[1..N,1..N] of TElem;
(* Построчный ввод матрицы *)
Procedure ReadMatr(var A:Matrix; var n,n:word );
var
i,j:word;
begin
repeat
write('Vvedide kol-vo strok: '); readln(N)
until (N>0) and (N<=N);
repeat
write('Vvedide kol-vo stolbcov: '); readln(n)
until (n>0) and (N<=N);
For i:=1 to n do
begin
For j:=1 to n do
begin
write('A[',i,j,']= ');
readln(A[i,j])
end
end
end;
(* Построчный вывод матрицы *)
Procedure PrintMatr(A:Matrix; n,n:word);
Var
i,j:word;
begin
For i:=1 to n do
begin
For j:=1 to n do write(A[i,j],' ');
writeln
end
end
{ тестовая программа}
var
n,n:word;
a:matrix;
Begin
Readmatr(a,n,n);
PrintMatr(a,n,n)
end;
function TestSym(j:integer):boolean;
var i:integer;
b:boolean;
begin
b:=true;
for i:=1 to n div 2 do
b:=b and (a[j,i]=a[j,n-i+1]);
test:=b;
end;
это только часть кода, не полный. Дальше ещё интересней Сообщение отредактировано: volvo - 2.11.2006 16:40 |
RaV |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
а где дальше?
Сообщение отредактировано: RaV - 2.06.2006 11:13 |
valeral |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: valera Репутация: ![]() ![]() ![]() |
RaV да я вижу что не то получается, три не будет мало?
|
Malice |
![]()
Сообщение
#11
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Посмотрите пожалуйста так на что то уже похоже Теперь с другого места методички с заменой M на N ![]() |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата(valeral @ 2.06.2006 7:48) Дана задача Пусть дана матрица A(N x N), а симметричная строка – такая строка, у которой все ее элементы симметричны относительно ее центрального элемента. Воспользуйтесь логической функцией, определяющей симметричность i-й строки, а также функцией, подсчитывающей количество таких строк в заданной матрице. Так в чем, собственно, задача, у тебя как раз и не написано. Что ты решаешь??? Тебе надо что? Найти количество симметричных строк? Количество НЕсимметричных? Распечатать симметричные строки? Задание как следует напиши, а потом уже берись за выполнение... На данный момент из твоего задания следует "сделать что-то, воспользовавшись теми или иными функциями." Так вот напиши, что это ЧТО_ТО... |
valeral |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: valera Репутация: ![]() ![]() ![]() |
ребят, не злитесь. Я ж только учусь, и поэтому не успеваю так же быстро соображать в паскале как Вы. Пока тайм-аут.
|
valeral |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: valera Репутация: ![]() ![]() ![]() |
нифига не выходит
![]() Сообщение отредактировано: valeral - 2.06.2006 13:23 |
valeral |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: valera Репутация: ![]() ![]() ![]() |
уже второй час долблюсь с этой задачей. Malice, Volvo прошу вас добейте её и я отстану от вас
Сообщение отредактировано: valeral - 2.06.2006 14:51 |
Malice |
![]()
Сообщение
#16
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Const
N=5;
type
Matrix = array[1..N,1..N] of integer;
var a:matrix;
Procedure ReadMatr(var A:Matrix);
var
i,j:word;
begin
For i:=1 to n do begin
For j:=1 to n do begin
write('A[',i,',',j,']= ');
readln(A[i,j])
end
end
end;
Procedure PrintMatr(A:Matrix);
Var
i,j:word;
begin
For i:=1 to n do begin
For j:=1 to n do write(A[i,j],' ');
writeln
end
end;
function TestSym(var a:matrix;j:integer):boolean;
var i:integer;
b:boolean;
begin
b:=true;
for i:=1 to n div 2 do
b:=b and (a[j,i]=a[j,n-i+1]);
testSym:=b;
end;
function TestSymStr(var a:matrix):integer;
var i,c:integer;
begin
c:=0;
for i:=1 to n do inc(c,byte(testsym(a,i)));
testsymstr:=c;
end;
Begin
Readmatr(a);
PrintMatr(a);
writeln (testSymStr(a));
readln;
end.
|
valeral |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: valera Репутация: ![]() ![]() ![]() |
Malice, Volvo громаднейшее спасибо
|
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 20:51 |