Помощь - Поиск - Пользователи - Календарь
Полная версия: Строка с минимальным числом элементов
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
REC0N
Всем привет! У меня небольшая проблема с задачаю.Помогите пожалуйста.
Условие!
Данная матрица NxN.
Нужно вывести номер строки с минимальным число элементов что равны заданному (заданое число вводит пользователь).
Итак, программа работает, только есть одно "но", если пользователь вводит матрицу в которой все строки одинаковые (Пример: Матрица 3х3!Во всех строках присутствует число,например "1") и пользователь вводит число "1" то минимальным будет только первая строка, и программа ее выведет на экран.
Как сделать так чтобы выводило порядковые номера всех трех строк (поскольку они же равние).
Вот сама программа:

program matryca;
uses crt;
const nmax = 100;

var Matr: array [1 .. nmax, 1 .. nmax] of integer;
Vec: array [1 .. nmax] of integer;
n, m, i, j, k, l, min: integer;

begin
repeat
write ( 'Введите количество строк в матрице:');
readln (m);
write ( 'Введите количество столбцов в матрице:');
readln (n);
if m <> n then writeln ( 'Матрица должна быть квадратная!');
until m = n;


/ / Ввод матрицы

writeln ( ' ');
writeln ( '--------------------');
writeln ( 'Ввод матрицы');
writeln ( '--------------------');
writeln ( ' ');

for i: = 1 to n do
for j: = 1 to m do begin

write ( 'Введите элемент матрицы A (', i ,';', j ,'):');
readln (Matr [i, j]);
end;

/ / Вывод матрицы

for i: = 1 to n do begin
write ('(', i, '-ю строку');
for j: = 1 to m do
write (Matr [i, j], '');
writeln;
end;

/ / Ввод числа

write ( 'Введите число:');
read (k);

for i: = 1 to n do begin vec [i]: = 0;
for j: = 1 to m do begin

if k = matr [i, j] then vec [i]: = vec [i] 1
end;
end;

for i: = 1 to n do begin
write ('(', i, '-ю строку');
write (vec [i]);
writeln;
end;

min: = 1;
for i: = 2 to n do begin

if vec [i] <vec [min] then min: = i;

end;

write ( 'Строка с минимальным значением:');
writeln (min);

end.

Lapp
Цитата(REC0N @ 8.03.2010 22:26) *
Как сделать так чтобы выводило порядковые номера всех трех строк (поскольку они же равние).

Предпоследнюю строку (writeln (min);) замени на следующее:
for i:=1 to n do if vec[i]=vec[min] then WriteLn(i);


Пожалуйста, используй правильные тэги (см. п.2 правил вверху страницы), а также:
форматируй
свои программы
нормально
очень трудно
же
читать
твой
код
!
REC0N
Цитата(Lapp @ 9.03.2010 1:42) *

Предпоследнюю строку (writeln (min);) замени на следующее:
for i:=1 to n do if vec[i]=vec[min] then WriteLn(i);


Пожалуйста, используй правильные тэги (см. п.2 правил вверху страницы), а также:
форматируй
свои программы
нормально
очень трудно
же
читать
твой
код
!


Чем тебе не нравитса мой код.Вроде все норм. сделал,по правилам??
Lapp
Цитата(REC0N @ 10.03.2010 0:13) *
Чем тебе не нравитса мой код.Вроде все норм. сделал,по правилам??
А чего так эмоционально?
Лучше бы спасибо за ответ сказал..

Нет, у тебя не по правилам. Правила такие:
- после begin и т.п. сдвигать вправо;
- end и т.п. сдвигать влево.
И еще несколько правил небольших.
У тебя сдвиг пляшет, как молодой жеребец на выпасе )).

А если ты про тэги - так это я тебе исправил.
REC0N
Цитата(Lapp @ 10.03.2010 7:10) *

Лучше бы спасибо за ответ сказал..

Спасибо
P.S:Нормальние у меня сдвиги


Lapp
Упорство - хорошо, упрямство - плохо. Когда утверждаешь что-то:
Цитата(REC0N @ 10.03.2010 17:13) *
P.S:Нормальние у меня сдвиги
- будь добр, приводи аргументы. Я тебе не поленился сказать, что я имею в виду, а у тебя с аргументами проблема, раз повторяешь как попугай, что у тебя все нормально? Я что тебе что - учитель, чтобы придираться? мне плевать с высокой колокольни, на все твои закидоны. Хотел помочь - но нет смысла помогать тому, кто того не хочет.

Вот твоя прога, правильно отформатированная (tab=4):
program matryca;
uses
crt;
const
nmax = 100;

var
Matr: array [1 .. nmax, 1 .. nmax] of integer;
Vec: array [1 .. nmax] of integer;
n, m, i, j, k, l, min: integer;

begin
repeat
write ( 'Введите количество строк в матрице:');
readln (m);
write ( 'Введите количество столбцов в матрице:');
readln (n);
if m <> n then writeln ( 'Матрица должна быть квадратная!');
until m = n;

// Ввод матрицы

writeln ( ' ');
writeln ( '--------------------');
writeln ( 'Ввод матрицы');
writeln ( '--------------------');
writeln ( ' ');

for i:= 1 to n do for j:= 1 to m do begin
write ( 'Введите элемент матрицы A (', i ,';', j ,'):');
readln (Matr [i, j]);
end;

// Вывод матрицы

for i:= 1 to n do begin
write ('(', i, '-ю строку');
for j:= 1 to m do
write (Matr [i, j], '');
writeln;
end;

// Ввод числа

write ( 'Введите число:');
read (k);

for i:= 1 to n do begin
vec [i]:= 0;
for j:= 1 to m do begin
if k = matr [i, j] then vec [i]:= vec [i]+1
end;
end;

for i:= 1 to n do begin
write ('(', i, '-ю строку');
write (vec [i]);
writeln;
end;

min:= 1;
for i:= 2 to n do begin
if vec [i] <vec [min] then min:= i;
end;

write ( 'Строка с минимальным значением:');
writeln (min);
end.

Постарайся разобратся с принципами на этом примере. А то, если делать, как у тебя было - для красоты и проформы -, то с прогой большей, чем на пару экранов, ты замучишься. Хотя, не исключен вариант, что у тебя в программной среде все выглядит иначе, а тут твои табы поехали. Тогда один взгляд на твой первый пост (если ты не удосужился посмотреть) должен тебе прояснить, о чем я говорю.

Ты, кстати, в чем пишешь? Если TP/BP - то странные у тебя комментарии (впрочем, они в любом случае странные). И убери галку с опции "use Tab characters" - она тебя подведет еще не раз. А уж про твои ": =" с пробелом внутри я вообще молчу - неясно, как на вообще компилилась..

И оставь свой норов перед входом на форум. Маме с папой будешь говорить "у меня все хорошо,"- и губы надувать . Все, что говоришь - подтверждай..
REC0N
Цитата(Lapp @ 11.03.2010 5:06) *

Упорство - хорошо, упрямство - плохо. Когда утверждаешь что-то:
Ты, кстати, в чем пишешь? Если TP/BP - то странные у тебя комментарии (впрочем, они в любом случае странные). И убери галку с опции "use Tab characters" - она тебя подведет еще не раз. А уж про твои ": =" с пробелом внутри я вообще молчу - неясно, как на вообще компилилась..

На PascalABC...А ПРОГУ кинул в переводчик чтоб коменти перевести, бо сам в руском неочень(с Украини) вот оно и ": = " разделило как попало sad.gif
P.S: Каждий коментарий по отдельности как то неохота било кидадь :P
Lapp
Цитата(REC0N @ 11.03.2010 18:41) *
На PascalABC...А ПРОГУ кинул в переводчик чтоб коменти перевести, бо сам в руском неочень(с Украини) вот оно и ": = " разделило как попало sad.gif
P.S: Каждий коментарий по отдельности как то неохота било кидадь :P
И это из-за этого переводчика весь этот сыр-бор?? lol.gif Лучше уж не переводи совсем... smile.gif

ABC - не лучший вариант. Ты с ним намучишься. Скачай FPC ( http://freepascal.org/ ).
Успехов!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.