Помощь - Поиск - Пользователи - Календарь
Полная версия: Строка с минимальным числом элементов
Форум «Всё о Паскале» > 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/ ).
Успехов!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.