IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Использование процедур и функций, разбор задачи
valeral
сообщение 2.06.2006 7:48
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: valera

Репутация: -  0  +


Дана задача
Пусть дана матрица 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.



Дальше ступор включился полный, чё делать ХЕЗ
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
valeral
сообщение 2.06.2006 10:48
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: valera

Репутация: -  0  +


Посмотрите пожалуйста так на что то уже похоже
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
valeral   Использование процедур и функций   2.06.2006 7:48
volvo   Объединить все это в одну программу, и запустить. ...   2.06.2006 7:52
Malice   Не понял, в задании требуется проверить симметричн...   2.06.2006 8:21
Malice   Это потому что массив real, а функция с параметром...   2.06.2006 9:26
valeral   во первых вылезла ошибка в блоке подсчета if TestS...   2.06.2006 8:36
valeral   Хорошо, а как тогда сделать то? Я так понял что то...   2.06.2006 9:57
Malice   Функция TestSym должна быть примерно такой: functi...   2.06.2006 10:18
valeral   Посмотрите пожалуйста так на что то уже похоже pro...   2.06.2006 10:48
Malice   Посмотрите пожалуйста так на что то уже похоже Т...   2.06.2006 11:15
RaV   а где дальше?   2.06.2006 11:09
valeral   RaV да я вижу что не то получается, три не будет м...   2.06.2006 11:11
volvo   [color=red]Дана задача Пусть дана матрица A(N x N)...   2.06.2006 11:16
valeral   ребят, не злитесь. Я ж только учусь, и поэтому не ...   2.06.2006 11:33
valeral   нифига не выходит :wacko: чувствую себя полным иди...   2.06.2006 13:20
valeral   уже второй час долблюсь с этой задачей. Malice, Vo...   2.06.2006 14:51
Malice   Const N=5; type Matrix = array[1..N,1..N] of int...   2.06.2006 15:56
valeral   Malice, Volvo громаднейшее спасибо   2.06.2006 17:24


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 24.06.2025 15:46
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"