IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Матрица
ghost
сообщение 4.12.2004 19:50
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


:help: Помогите пожалуйста сделать задачу :help:
Дана матрица А(6,6). Создать новую матрицу В(6,6), где
а) В(I,J)=A(I,J), если A(I,J)>0
б) B(I,J) не равно 0, если A(I,J)<=0
Вывести исходную матрицу А, а под ней полученную матрицу В.
В программе должна быть "защита от дурака"

Сообщение отредактировано: ghost - 4.12.2004 20:23
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
volvo
сообщение 4.12.2004 20:14
Сообщение #2


Гость






ghost
Цитата
B(I,J) не равно 0, если A(I,J)<=0

А чему равно B(I, J) при A(I,J)<=0 ? Любое ненулевое число?
 К началу страницы 
+ Ответить 
ghost
сообщение 4.12.2004 20:30
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Как я понял в б) в итоге должно быть так
Цитата
Матрица А                Матрица В
1 -5 2                  1    0    2
0    4 7                  0    4    7
3 -2  -8                  3    0    0


Отрицательные числа заменяются на 0.
Для сохранения форматирования - пользуемся тегами [ quote][ /quote]

Сообщение отредактировано: volvo - 4.12.2004 20:37
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
АнтонП
сообщение 4.12.2004 20:42
Сообщение #4





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


Простите, что вмешался...

возможно в натуре условие не точно

Код


Var a,b:array[1..6]of integer;
I,j:intger;
begin
randomize;

for i:= 1 to 6 do
for j:= 1 to 6 do
a[I,j]:= random(99)-(random(99));

И отрицательные -  random(99)-(random(99))


for i:= 1 to 6 do
for j:= 1 to 6 do
if a[i,j]>0 then b[i,j]:=a[i,j]
else b[i,j]:= Любое ненулевое число (random(99)); или 0

А если и отрицательные, то random(99)-(random(99))

Вывод в таблицу:

For i:= 1 to 6 do
Begin
    For j:= 1 to 6 do
    Write(a[I,J]);
  WRITELN;
End;


For i:= 1 to 6 do
Begin
    For j:= 1 to 6 do
    Write(b[I,J]);
  WRITELN;
End;

End.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.12.2004 20:45
Сообщение #5


Гость






АнтонП
Автор вопроса уже уточнил -
Цитата
Отрицательные числа заменяются на 0.
 К началу страницы 
+ Ответить 
mithquessir
сообщение 4.12.2004 21:56
Сообщение #6


Гость






Код

const
    n = 6;
var
  a,b:array[1..n,1..n] of integer;
  i,j:integer;
begin
    randomize;
    for i := 1 to n do
    for j := 1 to n do
    if (i mod 2 = 0) and (j mod 2 = 0) then a[i,j] := -1 else
    a[i,j] := random(100);
    for i := 1 to n do
    for j := 1 to n do
    begin
         if a[i,j] > 0 then b[i,j] := a[i,j]
         else
         b[i,j] := 0;
    end;
    for i := 1 to n do
    begin
         writeln;
         for j := 1 to n do
         Write(a[i,j]:3);
    end;
    for i := 1 to n do
    begin
         WriteLn;
         for j := 1 to n do
         Write(b[i,j]:3);
    end;
end.
 К началу страницы 
+ Ответить 
volvo
сообщение 4.12.2004 22:20
Сообщение #7


Гость






mithquessir
Что это?
Код

for i := 1 to n do
   for j := 1 to n do
   if (i mod 2 = 0) and (j mod 2 = 0) then a[i,j] := -1 else
   a[i,j] := random(100);
 К началу страницы 
+ Ответить 
Jahnerus
сообщение 4.12.2004 22:54
Сообщение #8


Уникальный
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  2  +


volvo
Цитата
mithquessir
Что это?
Код 
for i := 1 to n do
   for j := 1 to n do
   if (i mod 2 = 0) and (j mod 2 = 0) then a[i,j] := -1 else
   a[i,j] := random(100);

Кажется это исскуственное засовывание отрицательных чисел, в данном случае (-1) в матрицу, в данном случае на все чётные позиции i и j!
Сам Я первый раз ТАКОЕ вижу... довольно странно.
АнтонП
Цитата
И отрицательные -  random(99)-(random(99))

Интересный способ задания отрицательных чисел <_<
Может так понятнее...
Код
a:=random(101)-50

числа [-50,50].

Сообщение отредактировано: Jahnerus - 4.12.2004 22:55


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.12.2004 23:03
Сообщение #9


Гость






Цитата
исскуственное засовывание отрицательных чисел, в данном случае (-1) в матрицу, в данном случае на все чётные позиции i и j!

Это ясно, но ЗАЧЕМ?

mithquessir
Все, что требовалось - занести в матрицу случайные числа (скажем, по методу Jahnerus ), а уж потом - их анализировать. То есть вот это:
Код
if (i mod 2 = 0) and (j mod 2 = 0) then a[i,j] := -1 else
абсолютно лишнее...
 К началу страницы 
+ Ответить 
АнтонП
сообщение 4.12.2004 23:07
Сообщение #10





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


Я сруктуру рандома не изучал, но инстнктивно кажется, что так будет случайнее smile.gif

Кто-нить конец задачи читал, вообще,

Ручной ввод нужен, а то какие "дураки", если комп все делает?

"защита от дурака" 0.01 beta версия

Если вводить напрямую read(a[i,j]),
то защиту поставить трудно, вроде можно исключительную ситуацию обработать, но в паскале я не знаю как,

лучше вводить элементы матрицы в строку
Код

var s:string;
var y:1..2; r:0..9;
a,b:array[1..6,1..6]of integer;
i,j,k,l:integer;
begin

........****................цикл

read(S);
i:=1;j:=1; a[i,j]:=0;
y:=1;
if s[1]='-' then y:=2;

for k:= y to length(s) do
if s[k] in ['0'..'9'] then
begin
      val(s[k],r,l);
      a[i,j]:= a[i,j]+r*round(exp((length(s)-k)*ln(10)));

end
else
begin
      writeln('Ошибка!');
      readln;
      readln;
      Exit;
End;

If s[1]='-' then a[I,J]:= a[I,J]*(-1);

…………*****…………….


writeln(a[i,j]);
readln;
readln;
end.

--Какая-то лажа, вроде должна работать, но…(От нас защиты нет!(шутка))

Или по-«Крутому» 0.02 beta

Код

var a:integer;
begin
{$i-}
readln(a);
if IoResult<>0  then writeln('Errrror')
else writeln(a);
{$i+}

readln;
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mithquessir
сообщение 4.12.2004 23:16
Сообщение #11


Гость






volvo
Извиняюсь, не дочитал условия
Цитата
В программе должна быть "защита от дурака"

а
Цитата
if (i mod 2 = 0) and (j mod 2 = 0) then a[i,j] := -1 else

просто как бы псевдосупергипермегаслучайное заполнение отрицательными эл-ми. smile.gif
 К началу страницы 
+ Ответить 
volvo
сообщение 4.12.2004 23:16
Сообщение #12


Гость






Цитата
лучше вводить элементы матрицы в строку

Это, конечно, очень интересный способ, но вот при его реализации будет столько ошибок, что никакой "дурак" программе уже не страшен.

Цитата
--Какая-то лажа, вроде должна работать, но…

А вот это напрасно... Если уже Вы видите, что метод слишком сложный и запутанный - зачем его вообще постить?
 К началу страницы 
+ Ответить 
Jahnerus
сообщение 4.12.2004 23:22
Сообщение #13


Уникальный
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  2  +


volvo
Цитата
Это ясно, но ЗАЧЕМ?

Наверно человек писавший это переживал что это a:=random(101)-50 за 36 проходов (А(6,6)) может по непонятным причинам не сгенерировать отрицательного числа и решил сделать наверняка!... толи по его мнению так проверять легче :D .
Вощем от бетта версии 0.01 защиты от дурака я ваще в шоке lol.gif
может попробовать так :
Код
Readln(s);
val(s,a[i,j],er);
if er<>0 then writeln('Error');


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.12.2004 23:29
Сообщение #14


Гость






Jahnerus
Я бы добавил еще кое-что:
Код

var
 x: longint;
...
Readln(s);
val(s, x, er);
if (er<>0) or (er < -maxint) or (er > maxint)
 then writeln('Error');


Просто твой код пропускает в Integer значения типа 60000 (но изменяет их до неузнаваемости)... Этого тоже допустить нельзя.
 К началу страницы 
+ Ответить 
Jahnerus
сообщение 4.12.2004 23:31
Сообщение #15


Уникальный
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  2  +


mithquessir
Цитата
просто как бы псевдосупергипермегаслучайное заполнение отрицательными эл-ми

Да просто случайность прям на каждом втором шаге встречается ... это уже называется линейная зависимость, а не псевдосупергипермегаслучайное заполнение . ;)
АнтонП
Цитата
if s[k] in ['0'..'9'] then

Не удивительно что не работает ... а если дробные числа вводить, а там ещё и "." и буква "e" есть! например: 2.324e-03


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Jahnerus
сообщение 4.12.2004 23:37
Сообщение #16


Уникальный
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  2  +


volvo
Цитата
Просто твой код пропускает в Integer значения типа 60000 (но изменяет их до неузнаваемости)... Этого тоже допустить нельзя.

Полностью с тобой согласен ... забыл ... он их потом как бы по кругу гонять начинает и может даже оказаться что вводил а положительное а получилось отрицательное ! :D
Но раз уж на то пошло а как быть с дробными ... их тогда ваще гиморно проверять ... единственный выход кажется это посимвольный прогон... и трудоёмкий анализ! sad.gif

Сообщение отредактировано: Jahnerus - 4.12.2004 23:40


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.12.2004 23:43
Сообщение #17


Гость






Jahnerus
Вот с дробными как раз проблемы нет... Там ошибиться можно только набрав букву вместо цифры, но Val это ловит... (а интервал возможных значений очень велик)
 К началу страницы 
+ Ответить 
mithquessir
сообщение 4.12.2004 23:52
Сообщение #18


Гость






А почему нельзя так?
Код

    for i := 1 to n do
    for j := 1 to n do
    begin
         repeat
         begin
              {$I-}read(m);{$I+}
              if IOResult <> 0 then
              WriteLn('vvedite eshe raz')
              else
              begin
                   a[i,j] := m;
                   f := TRUE;
              end;
         end;
         until f;
    end;
blink.gif
 К началу страницы 
+ Ответить 
volvo
сообщение 4.12.2004 23:58
Сообщение #19


Гость






mithquessir
А попробуй ввести 60000 - узнаешь...
 К началу страницы 
+ Ответить 
Jahnerus
сообщение 5.12.2004 0:03
Сообщение #20


Уникальный
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  2  +


mithquessir
Тогда хотябы так
Код
var a:longint;
----------
{$I-}
repeat
 writeln('Vvedite chislo A');
 readln(a);
until IOResult=0;
{$I+}


Сообщение отредактировано: Jahnerus - 5.12.2004 0:31


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 25.07.2025 22:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"