Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascla 7.0] 
:(
    Опции темы
eganeev
Дата 26.11.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



К данной программе надо написать процедуру которая будет заменять отрицательные элементы массива на положительные (К примеру -5 на 5, -6 на 6 и т.д. ) и выведет матрицу уже с измененными элементами на экран. 

Заранее всем СПАСИБО!

Забыл ввести название!!! Если можно введите "Процедура"

Код

Program prog4;
Uses Crt;
Type TArray=Array[1..10,1..10] of Real;
Var A, B, C, D : TArray; n,m,k,l : Byte; h : Char; Ar : Real;
Procedure InMatr1(Var x:TArray; row,col:Byte);
Var i,j:Byte;
Begin
Randomize;
For i:=1 to row do Begin
For j:=1 to col do Begin
X[i,j]:=sin((i+j)/2);
Write(x[i,j]:7:2,' ');
End;
Writeln;
End;
End; {--------------------------------------------}
Procedure InMatr2(Var x:TArray; row,col:Byte);
Var i,j:Byte;
Begin
Randomize;
For i:=1 to row do Begin
For j:=1 to col do Begin
X[i,j]:=cos((5*i)-(2*j));
Write(x[i,j]:7:2,' ');
End;
Writeln;
End;
End; {--------------------------------------------}
Function Sum(x:TArray; row,col:Byte):Real;
Var S :Real; i,j:Byte;
Begin
S:=0;

For i:=1 to row do
For j:=1 to col do
If x[i,j]>0 Then S:=S+X[i,j];
Sum:=S;
End; {--------------------------------------------}
Procedure NewMatr(x:TArray; row,col:Byte; Var y:TArray);

Var i,j:Byte; MMax:real;
Function Max(x:TArray; row,col:Byte):Real;
Var M :Real; i,j:Byte;
Begin
M:=x[1,1];
For i:=1 to row do
For j:=1 to col do IF x[i,j] > M Then M:=X[i,j];
Max:=M;
End;
Begin
MMax:=Max(x,row,col);
For i:=1 to row do For j:=1 to col do y[i,j]:=x[i,j]/MMax;
End; {--------------------------------------------}
Procedure Print(x:TArray; row,col:Byte);
Var i,j:Byte;
Begin
For i:=1 to row do Begin
For j:=1 to col do Begin
Write(x[i,j]:7:2,' ');
End;
Writeln;
End;
End;
BEGIN
Write('vvedite chislo strok mattricy  А ne bolee 10 ');
Readln(n,m);
Writeln('vybirite sposob formirovaniya matrizy A');
Write('1 -> sinus; 2 or other -> cosinus : ');
Readln(h);
IF h='1' Then InMatr1(A,n,m) Else InMatr2(A,n,m);
Write('vvedite chislo strok mattricy B ne bolee 10  '); Readln(k,l);
Writeln('vybirite sposob formirovaniya matrizy B');
Write('1 -> sinus; 2 or other->cosinus : ');

Readln(h);
IF h='1' Then InMatr1(B,k,l) Else InMatr2(B,k,l);
Ar:=(Sum(A,n,m)+Sum(B,k,l))/2;
Writeln('srednee arifmetich = ',Ar:8:3);
Writeln('******* vyvod matr С ******');
Print(C,n,m);
NewMatr(B,k,l,D);
Writeln('******* the end ******');
Print(D,k,l);
Readkey;
End.


Это сообщение отредактировал(а) eganeev - 26.11.2007, 18:51
PM MAIL   Вверх
orthrus
Дата 26.11.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

Репутация: 5
Всего: 16



так подойдет?

Код

Procedure ConvEl(x:TArray; row,col:Byte);
Var i,j:Byte;
Begin
For i:=1 to row do Begin
For j:=1 to col do Begin
   if (x[i,j]<0) then x[i,j] = (-1)*x[i,j];
   Write(x[i,j]:7:2,' ');
End;
Writeln;
End;
End;



--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
bems
Дата 26.11.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 0
Всего: 88



Код

Procedure ConvEl(x:TArray; row,col:Byte);
Var i,j:Byte;
Begin
For i:=1 to row do Begin
For j:=1 to col do Begin
   x[i,j] = abs(x[i,j]);
   Write(x[i,j]:7:2,' ');
End;
Writeln;
End;
End;


Добавлено через 40 секунд
orthrus, зачем самому проверять?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
bobik02
Дата 26.11.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 26.11.2007

Репутация: 3
Всего: 14



можно вопрос по теме (просто интересно) :
я представляю что программа дожна работать таким образом -
1.) Пробежатся по матрице и отрицательные елементы заменить на положительные


Код

....
 int array[n][m]
....
 for (int i = 0 ; i < n ; i++)
  {
     for (int j = 0; j < m; j++)
     {
       if ( 0 > array[i][j] )  
       array[i][j] = abs ( array[i][j] );
     }
  }
.....


синтаксис pascal почти не знаю (но синтаксис єто не главное) , мне просто интересно идею саму уловить...

тоисть получается мы бегаем по матрице, и если находим отрицательный элемент то меняем его на положительный (модуль это ж делает) я правильно понял ?



--------------------
Have a nice day
PM   Вверх
bems
Дата 26.11.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 0
Всего: 88



Цитата(bobik02 @  26.11.2007,  19:35 Найти цитируемый пост)
и если находим отрицательный элемент то меняем его на положительный 
или не проверяя отрицательность меняем число на его модуль (результат тот же)



--------------------
Обижено школьников: 8
PM MAIL   Вверх
bobik02
Дата 26.11.2007, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 26.11.2007

Репутация: 3
Всего: 14



ага понял smile
Цитата(bems @  26.11.2007,  19:37 Найти цитируемый пост)
или не проверяя отрицательность меняем число на его модуль (результат тот же)

тоже вариант.... 

а вот мне интересно, представим что у нас очень-очень большой массив !

1.) берем все числа без проверки  на отрицательность и меняем число на его модуль
2.) берем только отрицательные элементы и меняем  на их модуль

какой вариант  будет обрабатывать быстрее ?



--------------------
Have a nice day
PM   Вверх
bems
Дата 26.11.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 0
Всего: 88



смотря чего там внутри abs Вероятно та же проверка. Если это верно то наша проверка будет лишней и замедлит работу


--------------------
Обижено школьников: 8
PM MAIL   Вверх
bobik02
  Дата 26.11.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 26.11.2007

Репутация: 3
Всего: 14



bems,  пожалуй Вы правы "то есть модуль числа x  есть максимальное их двух чисел  x и -x ",  abs
там получается та же проверка...

значит проверка на отрицательность в  данной задаче только замедляет процесс...


все спасибо!


--------------------
Have a nice day
PM   Вверх
bems
Дата 26.11.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 0
Всего: 88



Цитата(bobik02 @  26.11.2007,  20:10 Найти цитируемый пост)
"то есть модуль числа x  есть максимальное их двух чисел  x и -x ",  abs
там получается та же проверка...
не обязательно проверка в явном виде. Все зависит от конкретного abs (у вас одна реализация, в паскале - другая)



--------------------
Обижено школьников: 8
PM MAIL   Вверх
eganeev
Дата 26.11.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Спасибо, что помогли. Щас попробую как будет работать.
PM MAIL   Вверх
Rodman
Дата 27.11.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122




M
Rodman
Модератор: Название темы должно отражать ее суть!

PM MAIL WWW Skype GTalk YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.