Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2008, 10:02   #1
vdv08
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 42
По умолчанию задача на паскале - Матрица,2-х мерный массив

Матрица K(m,m) cостоит изнулей и единицю. Найти в ней номера (индексы) хотя бы одной строки или хотя бы одного столбца,не содержащих единицы,либо сообщить,что таковых нет.

Зарание спасибо всем кто откликнеться!!!

const
m = 3;
var
i, j: byte;
mas: array[1..m, 1..m] of byte;
naideno, b: boolean;
begin
randomize;
naideno := false;
for i := 1 to m do //заполнение матрицы и вывод на экран
begin
for j := 1 to m do
begin
mas[i, j] := random (2);
write(mas[i, j]:2)
end;
writeln
end;

for i := 1 to m do //поиск по строкам
begin
b := false;
for j := 1 to m do if mas[i, j] = 1 then b := true;
if not b then
begin
writeln('Stroka ', i);
naideno := true
end;
end;

for j := 1 to m do //поиск по столбцам
begin
b := false;
for i := 1 to m do if mas[i, j] = 1 then b := true;
if not b then
begin
writeln('Stolb ', j);
naideno := true
end;
end;

if not naideno then //если не найдено
write('Not found');
readln
end.
vdv08 вне форума Ответить с цитированием
Старый 17.09.2008, 10:36   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

А в чем проблема? Программа же работает.
puporev вне форума Ответить с цитированием
Старый 20.09.2008, 09:07   #3
vdv08
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 42
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
А в чем проблема? Программа же работает.
проблема втом,что прога выдает иногда ответ..тольоко столбец,без указания строки и наоборот
vdv08 вне форума Ответить с цитированием
Старый 20.09.2008, 09:28   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Не знаю, раз 30 прогнал, если нет единиц в строке, выдает строку, если нет в столбце, выдает столбец, если есть строка и столбец без единиц, то выдает и то и другое, но это только один раз выпало, если нет ни строки ни столбца, сообщает. Размер матрицы 3х3 не дает возможности нормально тестировать программу. Возьмите
const
m = 5;
Матрицу введите вручную, типа
0 0 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 0 1 0
0 0 0 0 0
Для этого перепишите строки
Код:
for i := 1 to m do //заполнение матрицы и вывод на экран
begin
for j := 1 to m do
begin
mas[i, j] := random (2);
write(mas[i, j]:2)
end;
writeln
end;
на такие:
Код:
for i := 1 to m do //заполнение матрицы и вывод на экран
begin
for j := 1 to m do
begin
read(mas[i,j]);
end;
readln
end;
Матрицу вводите как нарисована, в строках через пробел, в конце каждой строки - Enter.
Увидите, что программа выдаст Вам все строки и столбцы.
puporev вне форума Ответить с цитированием
Старый 22.09.2008, 09:12   #5
vdv08
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 42
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
const
m = 3;
var
i, j: byte;
mas: array[1..m, 1..m] of byte;
naideno, b: boolean;
begin
randomize;
naideno := false;
for i := 1 to m do //заполнение матрицы и вывод на экран
begin
for j := 1 to m do
begin
mas[i, j] := random (2);
write(mas[i, j]:2)
end;
writeln
end;

for i := 1 to m do //поиск по строкам
begin
b := false;
for j := 1 to m do if mas[i, j] = 1 then b := true;
if not b then
begin
writeln('Stroka ', i);
naideno := true
end;
end;

for j := 1 to m do //поиск по столбцам
begin
b := false;
for i := 1 to m do if mas[i, j] = 1 then b := true;
if not b then
begin
writeln('Stolb ', j);
naideno := true
end;
end;

if not naideno then //если не найдено
write('Not found');
readln
end.
как напиать прогу без false и true попроще,и легче вы не знаете....
vdv08 вне форума Ответить с цитированием
Старый 22.09.2008, 09:17   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Можно написать как Вы хотите, подсчитывая количество единиц или нолей в строке и если одни ноли, то выводить сообщение, но это будет не проще, а сложнее. Здесь Вам переменная типа Boolean все это сама делает, ничего считать и писать не надо.
Если очень хочется посложнее, напишу.
puporev вне форума Ответить с цитированием
Старый 22.09.2008, 09:32   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот что будет без true, false.
Код:
uses crt;
var a:array[1..20,1..20]of byte;
    n,m,i,j,k,s:byte;
begin
clrscr;
write('Kolichestvo strok n=');
readln(n);
write('Kolichestvo stolbcov m=');
readln(m);
writeln('Matrica:');
for i:=1 to n do
for j:= 1 to m do
read(a[i,j]);//здесь вводим чbсла в строке через пробел, в конце строки-Enter
readln;
s:=0;
for i:=1 to n do
  begin
    k:=0;
    for j:= 1 to m do
    if a[i,j]=1 then k:=k+1;//считаем единицы в строке
    if k=0 then //если нет
      begin
        s:=1; //фиксируем
        writeln('V stroke ',i,' edinic net!');//выводим сообщение
      end;
  end;
for j:=1 to m do
  begin
    k:=0;
    for i:= 1 to n do
    if a[i,j]=1 then k:=k+1; //то же в столбцах
    if k=0 then
      begin
        s:=1;
        writeln('V stolbce ',j,' edinic net!');
      end;
  end;
if s=0 then writeln('Takih strok i stolbcov net!');//если нет ничего
readln
end.
Как видите, вместо false, true появились k,s + вычисления, т.е программа стала тяжелее, хотя если не понимаеете тип boolean, то легче для понимания.
puporev вне форума Ответить с цитированием
Старый 22.09.2008, 13:10   #8
vdv08
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 42
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Вот что будет без true, false.
Код:
uses crt;
var a:array[1..20,1..20]of byte;
    n,m,i,j,k,s:byte;
begin
clrscr;
write('Kolichestvo strok n=');
readln(n);
write('Kolichestvo stolbcov m=');
readln(m);
writeln('Matrica:');
for i:=1 to n do
for j:= 1 to m do
read(a[i,j]);//здесь вводим чbсла в строке через пробел, в конце строки-Enter
readln;
s:=0;
for i:=1 to n do
  begin
    k:=0;
    for j:= 1 to m do
    if a[i,j]=1 then k:=k+1;//считаем единицы в строке
    if k=0 then //если нет
      begin
        s:=1; //фиксируем
        writeln('V stroke ',i,' edinic net!');//выводим сообщение
      end;
  end;
for j:=1 to m do
  begin
    k:=0;
    for i:= 1 to n do
    if a[i,j]=1 then k:=k+1; //то же в столбцах
    if k=0 then
      begin
        s:=1;
        writeln('V stolbce ',j,' edinic net!');
      end;
  end;
if s=0 then writeln('Takih strok i stolbcov net!');//если нет ничего
readln
end.
Как видите, вместо false, true появились k,s + вычисления, т.е программа стала тяжелее, хотя если не понимаеете тип boolean, то легче для понимания.
спасибо что помогаете,но надо что выводило как в задаче Найти в ней номера (индексы) хотя бы одной строки или хотя бы одного столбца,не содержащих единицы,либо сообщить,что таковых нет.

а у вас он пишет не верный директив.....посмотрите и дорполните...за раннее спасибо...
vdv08 вне форума Ответить с цитированием
Старый 22.09.2008, 13:16   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вы сами хоть знаете, что вам надо? Вам так и было сделано, но вы написали, что или строку выдает или столбец. Вам переделали, чтобы все строки и все столбцы выдавло, опять нехорошо. Сами то хоть чуть-чуть пошевелите мозгами.
Всего и нужно то, прервать циклы, как находим строку или столбец.
Код:
s:=0;
for i:=1 to n do
  begin
    k:=0;
    for j:= 1 to m do
    if a[i,j]=1 then k:=k+1;//считаем единицы в строке
    if k=0 then //если нет
      begin
        s:=1; //фиксируем
        writeln('V stroke ',i,' edinic net!');//выводим сообщение
        readln;
        exit
      end;
  end;
Тоже самое в столбцах.
puporev вне форума Ответить с цитированием
Старый 22.09.2008, 13:25   #10
vdv08
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 42
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Вы сами хоть знаете, что вам надо? Вам так и было сделано, но вы написали, что или строку выдает или столбец. Вам переделали, чтобы все строки и все столбцы выдавло, опять нехорошо. Сами то хоть чуть-чуть пошевелите мозгами.
Всего и нужно то, прервать циклы, как находим строку или столбец.
Код:
s:=0;
for i:=1 to n do
  begin
    k:=0;
    for j:= 1 to m do
    if a[i,j]=1 then k:=k+1;//считаем единицы в строке
    if k=0 then //если нет
      begin
        s:=1; //фиксируем
        writeln('V stroke ',i,' edinic net!');//выводим сообщение
        readln;
        exit
      end;
  end;
Тоже самое в столбцах.
спасибо огромное
vdv08 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на паскале - Матрица,2-х мерный массив vdv08 Помощь студентам 1 14.09.2008 12:45
матрица {двумерные массив} Влдислаав3911 Помощь студентам 6 27.05.2008 08:33
Помогите Написать программу Матрица и Массив 77rusnaut Помощь студентам 4 20.12.2007 20:22
С++ Создать класс содержащий 3х-мерный массив int'ов, заполнять с помощью генератора случайных чисел vipER Помощь студентам 1 22.09.2007 22:08