Матрица |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Матрица |
ghost |
Сообщение
#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 - |
volvo |
Сообщение
#2
|
Гость |
ghost
Цитата B(I,J) не равно 0, если A(I,J)<=0 А чему равно B(I, J) при A(I,J)<=0 ? Любое ненулевое число? |
ghost |
Сообщение
#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
|
Группа: Пользователи Сообщений: 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. |
volvo |
Сообщение
#5
|
Гость |
АнтонП
Автор вопроса уже уточнил - Цитата Отрицательные числа заменяются на 0. |
mithquessir |
Сообщение
#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 |
Сообщение
#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 |
Сообщение
#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
|
volvo |
Сообщение
#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 |
Я сруктуру рандома не изучал, но инстнктивно кажется, что так будет случайнее
Кто-нить конец задачи читал, вообще, Ручной ввод нужен, а то какие "дураки", если комп все делает? "защита от дурака" 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. |
mithquessir |
Сообщение
#11
|
Гость |
volvo
Извиняюсь, не дочитал условия Цитата В программе должна быть "защита от дурака" а Цитата if (i mod 2 = 0) and (j mod 2 = 0) then a[i,j] := -1 else просто как бы псевдосупергипермегаслучайное заполнение отрицательными эл-ми. |
volvo |
Сообщение
#12
|
Гость |
Цитата лучше вводить элементы матрицы в строку Это, конечно, очень интересный способ, но вот при его реализации будет столько ошибок, что никакой "дурак" программе уже не страшен. Цитата --Какая-то лажа, вроде должна работать, но… А вот это напрасно... Если уже Вы видите, что метод слишком сложный и запутанный - зачем его вообще постить? |
Jahnerus |
Сообщение
#13
|
Уникальный Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 2 |
volvo
Цитата Это ясно, но ЗАЧЕМ? Наверно человек писавший это переживал что это a:=random(101)-50 за 36 проходов (А(6,6)) может по непонятным причинам не сгенерировать отрицательного числа и решил сделать наверняка!... толи по его мнению так проверять легче :D . Вощем от бетта версии 0.01 защиты от дурака я ваще в шоке может попробовать так : Код Readln(s); val(s,a[i,j],er); if er<>0 then writeln('Error'); -------------------- Век живи, век учи С © by Jahnerus
|
volvo |
Сообщение
#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 |
Сообщение
#15
|
Уникальный Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 2 |
mithquessir
Цитата просто как бы псевдосупергипермегаслучайное заполнение отрицательными эл-ми Да просто случайность прям на каждом втором шаге встречается ... это уже называется линейная зависимость, а не псевдосупергипермегаслучайное заполнение . ;) АнтонП Цитата if s[k] in ['0'..'9'] then Не удивительно что не работает ... а если дробные числа вводить, а там ещё и "." и буква "e" есть! например: 2.324e-03 -------------------- Век живи, век учи С © by Jahnerus
|
Jahnerus |
Сообщение
#16
|
Уникальный Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 2 |
volvo
Цитата Просто твой код пропускает в Integer значения типа 60000 (но изменяет их до неузнаваемости)... Этого тоже допустить нельзя. Полностью с тобой согласен ... забыл ... он их потом как бы по кругу гонять начинает и может даже оказаться что вводил а положительное а получилось отрицательное ! :D Но раз уж на то пошло а как быть с дробными ... их тогда ваще гиморно проверять ... единственный выход кажется это посимвольный прогон... и трудоёмкий анализ! Сообщение отредактировано: Jahnerus - -------------------- Век живи, век учи С © by Jahnerus
|
volvo |
Сообщение
#17
|
Гость |
Jahnerus
Вот с дробными как раз проблемы нет... Там ошибиться можно только набрав букву вместо цифры, но Val это ловит... (а интервал возможных значений очень велик) |
mithquessir |
Сообщение
#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; |
volvo |
Сообщение
#19
|
Гость |
mithquessir
А попробуй ввести 60000 - узнаешь... |
Jahnerus |
Сообщение
#20
|
Уникальный Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: 2 |
mithquessir
Тогда хотябы так Код var a:longint; ---------- {$I-} repeat writeln('Vvedite chislo A'); readln(a); until IOResult=0; {$I+} Сообщение отредактировано: Jahnerus - -------------------- Век живи, век учи С © by Jahnerus
|
Текстовая версия | 24.12.2024 6:58 |