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

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

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

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

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

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

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

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

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

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

14
Phantom
Эксперт С++
3168 / 850 / 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
Модератор
54149 / 41782 / 28889
Регистрация: 18.05.2008
Сообщений: 98,331
17.05.2010, 13:53 #3
Phantom, А ты проверял свой код?
0
Phantom
Эксперт С++
3168 / 850 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 13:53 #4
Puporev, да, а что?
0
Inadequate
Retired
7709 / 2542 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
17.05.2010, 13:55 #5
Phantom, goto лучше бы заменил на
Pascal
1
2
ReadLn; 
exit;
0
Phantom
Эксперт С++
3168 / 850 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 13:56 #6
Inadequate, да, так лучше

По идее, можно вообще генерировать снизу-вверх построчно и каждый раз сохранять номер строки, если элемент сгенерировался положительный. Тогда мы уже будем знать номер строки на этапе генерации, но вот проверки... Кто как думает?
0
Puporev
Модератор
54149 / 41782 / 28889
Регистрация: 18.05.2008
Сообщений: 98,331
17.05.2010, 13:57 #7
Phantom, Просто когда вижу label, goto, то вздрагиваю, мало кто умеет ими правильно пользоваться. Наверное школа Бейсика...
0
Phantom
Эксперт С++
3168 / 850 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 14:00 #8
Puporev, да, в точку, в школе как раз изучал бэйсик, это мой первый язык С тех пор к goto отношусь с теплотой.
К слову, программа вполне себе нормально работает. А goto иногда здорово помогает. Когда нужно выйти из нескольких циклов, у меня автоматом оно вылетает))
0
Inadequate
Retired
7709 / 2542 / 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
Эксперт С++
3168 / 850 / 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
7709 / 2542 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
17.05.2010, 14:20 #11
Phantom, быстрее мой, потому что у меня 2 цикла, а у тебя их 4.
0
Phantom
Эксперт С++
3168 / 850 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 14:31 #12
Inadequate, два цикла - вывод матрицы, который я для читабельности вынес отдельно. Тоже могу совместить с генерацией, как у тебя и будет два цикла.
Касаемо основного алгоритма, то различие в том, откуда мы генерируем - ты сверху-вниз, а я снизу-вверх, что позволяет мне делать одну проверку (у тебя - две - на полож-ть и на флаг), и сэкономить одну булевскую переменную
0
Inadequate
Retired
7709 / 2542 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
17.05.2010, 14:42 #13
Phantom, у тебя количество присваиваний будет равно количеству положительных в матрице. Да и если переставить условия местами в моём коде т.е. сначала проверку на логическую переменную, а потом на положительность элемента, то у меня тоже будет одна проверка, так как, насколько мне известно, если одна часть не истина, то вторая не проверяется. А количество присваиваний у меня постоянно и равно 1. Так что это всё таки тебе

А вообще, к слову сказать, все эти мелочи несущественны на современных компьютерах
0
Phantom
Эксперт С++
3168 / 850 / 39
Регистрация: 29.12.2008
Сообщений: 952
17.05.2010, 15:08 #14
Inadequate, действительно, ты прав
Ну и, наверное, можно ещё проверять не на флаг, а на равенство p=0, сэкономив одну булевскую переменную.
Цитата Сообщение от Inadequate Посмотреть сообщение
А вообще, к слову сказать, все эти мелочи несущественны на современных компьютерах
Всё равно, код всегда отражает мастерство его автора. Все хорошие свойства кода (переносимость, читабельность, производительность) перерастают в хорошие программы, а если можно сделать конечный продукт ещё лучше, то почему бы этим не воспользоваться.
0
Inadequate
Retired
7709 / 2542 / 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
Привет! Вот еще темы с решениями:

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

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

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

Найти сумму элментов в тех строках матрицы, которые содержат хотя бы один отрицательный элемент
Для заданной матрицы размером 8*8 найти такое к, что к-я строка матрицы...


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

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

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