С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Flatterer
4 / 3 / 0
Регистрация: 08.12.2009
Сообщений: 63
1

Найти номер первой из строк матрицы, содержащих хотя бы один положительный элемент

17.05.2010, 11:00. Просмотров 694. Ответов 14
Метки нет (Все метки)

Целочисленная прямоугольная матрица заполняется с помощью генератора случайных чисел значениями из промежутка [-10, 10]. Найти номер первой из строк, содержащих хотя бы один положительный элемент.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2010, 11:00
Ответы с готовыми решениями:

Найти количество строк матрицы, содержащих хотя бы один нулевой элемент
Дана целочисленная прямоугольная матрица. Определить: 1) количество строк,...

Найти сумму элементов четных строк матрицы, содержащих хотя бы один нулевой элемент
Привет всем ! помогите пожалуйста ,мне не нужна вся программа,только часть ее ....

Сформировать вектор D, состоящий из номеров строк, содержащих хотя бы один отрицательный элемент
выполнить с использованием процедуры ввод и вывод массивов и других данных не...

Определить количество столбцов матрицы, содержащих хотя бы один нулевой элемент
PASCAL Дана целочисленная прямоугольная матрица Определить: -количество...

Определить количество столбцов матрицы, содержащих хотя бы один нулевой элемент
помогите пожалуйста с задачей! дана целочисленная прямоугольная матрица. Нужно...

14
Phantom
Эксперт С++
3174 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 13:50 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
program Prog;
label 1;
var Matr: array [1..40, 1..40] of Integer;
    i,j,n,m: byte;
begin
writeln('Ввод матрицы: ');
writeln('Количество столбцов M='); readln(m);
writeln('Количество строк N='); readln(n);
for i:=1 to n do
 for j:=1 to m do
  Matr[i,j]:=-10+random(21); {заполнение числами}
 
{вывод матрицы на печать}
for i:=1 to n do
 begin
 for j:=1 to m do
  write(Matr[i,j]:4);
 writeln;
 end;
{поиск нужного номера строки}
for i:=1 to n do
 for j:=1 to m do
  if Matr[i,j]>0 then
  begin
  writeln('номер искомой строки = ', i);
  goto 1;
  end;
writeln('Нет строк с положительными элементами');
1:
readln;
end.
0
Puporev
Модератор
55504 / 42593 / 29443
Регистрация: 18.05.2008
Сообщений: 100,754
17.05.2010, 13:53 3
Phantom, А ты проверял свой код?
0
Phantom
Эксперт С++
3174 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 13:53 4
Puporev, да, а что?
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
17.05.2010, 13:55 5
Phantom, goto лучше бы заменил на
Pascal
1
2
ReadLn; 
exit;
0
Phantom
Эксперт С++
3174 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 13:56 6
Inadequate, да, так лучше

По идее, можно вообще генерировать снизу-вверх построчно и каждый раз сохранять номер строки, если элемент сгенерировался положительный. Тогда мы уже будем знать номер строки на этапе генерации, но вот проверки... Кто как думает?
0
Puporev
Модератор
55504 / 42593 / 29443
Регистрация: 18.05.2008
Сообщений: 100,754
17.05.2010, 13:57 7
Phantom, Просто когда вижу label, goto, то вздрагиваю, мало кто умеет ими правильно пользоваться. Наверное школа Бейсика...
0
Phantom
Эксперт С++
3174 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 14:00 8
Puporev, да, в точку, в школе как раз изучал бэйсик, это мой первый язык С тех пор к goto отношусь с теплотой.
К слову, программа вполне себе нормально работает. А goto иногда здорово помогает. Когда нужно выйти из нескольких циклов, у меня автоматом оно вылетает))
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
17.05.2010, 14:05 9
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Phantom, какие проверки ? Я бы так и сделал как ты предлагаешь, но только без изврата Код выглядел бы так
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
uses
  Crt;
const
  N = 3;
  M = 3;
var
  a: array [1..N, 1..M] of integer;
  i,j,p: byte;
  f: boolean;
begin
  p := 0;
  f := true;
  ClrScr;
  Randomize;
  for i := 1 to N do
  begin
    for j := 1 to M do
    begin
      a[i, j] := Random(21) - 10;
      if (a[i, j] > 0) and f then
      begin
        p := i;
        f := not f;
      end;
      Write(a[i, j]:3, ' ');
    end;
    WriteLn;
  end;
  if f then
    WriteLn('bla-bla-bla ', p)
  else
    WriteLn('!!!');
  ReadLn;
end.
0
Phantom
Эксперт С++
3174 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 14:07 10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
program Prog;
label 1;
var Matr: array [1..40, 1..40] of Integer;
    i,j,n,m,k: byte;
begin
writeln('Ввод матрицы: ');
writeln('M='); readln(m);
writeln('N='); readln(n);
 
for i:=n downto 1 do
 for j:=1 to m do
  begin
  Matr[i,j]:=-10+random(21);
  if Matr[i,j]>0 then k:=i;
  end;
 
if (k<>0) then writeln('искомая строка ',k)
else writeln('нет строк с положительными элементами ');
 
for i:=1 to n do
 begin
 for j:=1 to m do
  write(Matr[i,j]:4);
 writeln;
 end;
 
readln;
end.
Вот вариант о котором я говорил. Интересно, какой быстрее?
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
17.05.2010, 14:20 11
Phantom, быстрее мой, потому что у меня 2 цикла, а у тебя их 4.
0
Phantom
Эксперт С++
3174 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 14:31 12
Inadequate, два цикла - вывод матрицы, который я для читабельности вынес отдельно. Тоже могу совместить с генерацией, как у тебя и будет два цикла.
Касаемо основного алгоритма, то различие в том, откуда мы генерируем - ты сверху-вниз, а я снизу-вверх, что позволяет мне делать одну проверку (у тебя - две - на полож-ть и на флаг), и сэкономить одну булевскую переменную
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
17.05.2010, 14:42 13
Phantom, у тебя количество присваиваний будет равно количеству положительных в матрице. Да и если переставить условия местами в моём коде т.е. сначала проверку на логическую переменную, а потом на положительность элемента, то у меня тоже будет одна проверка, так как, насколько мне известно, если одна часть не истина, то вторая не проверяется. А количество присваиваний у меня постоянно и равно 1. Так что это всё таки тебе

А вообще, к слову сказать, все эти мелочи несущественны на современных компьютерах
0
Phantom
Эксперт С++
3174 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 15:08 14
Inadequate, действительно, ты прав
Ну и, наверное, можно ещё проверять не на флаг, а на равенство p=0, сэкономив одну булевскую переменную.
Цитата Сообщение от Inadequate Посмотреть сообщение
А вообще, к слову сказать, все эти мелочи несущественны на современных компьютерах
Всё равно, код всегда отражает мастерство его автора. Все хорошие свойства кода (переносимость, читабельность, производительность) перерастают в хорошие программы, а если можно сделать конечный продукт ещё лучше, то почему бы этим не воспользоваться.
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
17.05.2010, 15:16 15
Phantom,
0
17.05.2010, 15:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2010, 15:16

Определить количество столбцов матрицы, содержащих хотя бы один нулевой элемент
Дана целочисленная прямоугольная матрица. Определить: 1) количество столбцов,...

Определить номер первого из столбцов матрицы, содержащий хотя бы один нулевой элемент
Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов,...

Найти количество столбцов матрицы, в которых есть хотя бы один нулевой элемент
Найти количество столбцов матрицы Y(8,6), в которых есть хотя бы один нулевой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru