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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Матрица
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

А чему равно B(I, J) при A(I,J)<=0 ? Любое ненулевое число?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






АнтонП
Автор вопроса уже уточнил -
Цитата
Отрицательные числа заменяются на 0.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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


Гость






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

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

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


Гость






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

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

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


Гость






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

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

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

А вот это напрасно... Если уже Вы видите, что метод слишком сложный и запутанный - зачем его вообще постить?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 (но изменяет их до неузнаваемости)... Этого тоже допустить нельзя.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


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

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

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


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

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

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


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


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

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

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


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

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

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


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


Гость






Jahnerus
Вот с дробными как раз проблемы нет... Там ошибиться можно только набрав букву вместо цифры, но Val это ловит... (а интервал возможных значений очень велик)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






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


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

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

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


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


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


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

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

 





- Текстовая версия 23.12.2024 19:42
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name