Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Массив

Автор: TeRmInWeB 22.12.2007 20:57

В массиве Т(25) сделать все четные числа отрицательными, а для не четных подсчитать количество и сумму! как? и чего с этим делать непойму(!

Автор: Артемий 22.12.2007 21:23

Покажи что пробовал.

Автор: TeRmInWeB 23.12.2007 3:34

в том то и дело я незнаю как его написать надо свой массив создать а как? незнаю

Автор: мисс_граффити 23.12.2007 4:30

ну например так (заполняется случайными числами):

var T: array [1..25] of integer;
i: integer;
begin
randomize;
for i:=1 to 25 do
T[i]:=random(10);
end.


Автор: Тёмный Эльф 23.12.2007 6:11

Цитата(TeRmInWeB)
В массиве Т(25) сделать все четные числа отрицательными

Узнать четное ли число можно с помощью операции mod (взятие остатка от деления). И если возвращаемое значение 0, значит, число четное. После этого просто делаем это число отрицательным.
for i:=1 to 25 do
begin
if ((massiv[i] mod 2) = 0) then
a[i]:=-a[i];
end;

Автор: andriano 23.12.2007 16:06

Вообще-то в Паскале специально для проверки на четность существует функция Odd. Можно, конечно, то же самое делать посредством арифметических (как предложено в предыдущем посте) или логических (MyOdd := boolean(MyNumber and 1);), но для наглядности кода применение специально для этого предназначенных функций выглядит явно предпочтительнее.

Автор: TeRmInWeB 23.12.2007 16:12

Спасибо огромнейшее я попробую) не правдо спс что ответили)

Автор: Зюзюка 23.12.2007 16:15

Если все объеденить выше сказанное получится чтото типа этого =)

Код
program m;
const n=25;
var mas: array [1..n] of integer;
i,sum,kol: integer;
begin
randomize;
for i:=1 to n do begin
  mas[i]:=random(10);
end;
sum:=0;
kol:=0;
for i:=1 to n do begin write(mas[i],' '); end;
readln;
for i:=1 to n do
     begin
        if ((mas[i] mod 2) = 0) then begin mas[i]:=-mas[i]; end
else begin sum:=sum+mas[i]; kol:=kol+1;
end;
    end;
for i:=1 to n do begin write(mas[i],' ');
end;
readln;
writeln(sum);
writeln(kol);
readln;
end.

Автор: TeRmInWeB 23.12.2007 16:18

Блин народ супер уже начал писать обязательно попробую все предложенное)))

Автор: volvo 23.12.2007 16:23

Зюзюка, а вот теперь запусти свою программу. Мне интересно, сколько времени тебе понадобится, чтобы понять, что собственно происходит, и ПОЧЕМУ получается не то, что задумано, а то, что на экране smile.gif

Автор: Зюзюка 23.12.2007 16:27

Незнаю, т.к у меян даже паскале нету smile.gif smile.gif smile.gif

Автор: TeRmInWeB 23.12.2007 16:37

Я написал комплит вроде работает ошибок нет но сама прога неработает нажимаю ран а нечего не происходит? может правдо я чегот не дописал там

Автор: Client 23.12.2007 16:41

RadKey или Readln в конце поставил?

Автор: Зюзюка 23.12.2007 16:45

Так как объединял 2 несвоих кода конечно же были ошибки из за того что в середине программы стоял end. =). Исправил

Автор: TeRmInWeB 23.12.2007 16:57

сейчас погодите исправлю а то чегот 2 раза переписал а прога-зараза нереагирует)

Добавлено через 18 мин.
короче прога заработала )! так появились надписи Т.П ver 7.1 и чисел куча и я допустим ввожу там -6 она мне выдаёт числа -474 -874378 -455 -94884 и вконце -6)) вроде норм) а?) главно что работает прогресс есть)

Автор: TeRmInWeB 23.12.2007 17:48

народ а как сделать чтоб массив не автоматом задавался а вручную? чего прописать надо?

Автор: Тёмный Эльф 23.12.2007 18:07

Цитата(TeRmInWeB @ 23.12.2007 13:48) *

народ а как сделать чтоб массив не автоматом задавался а вручную? чего прописать надо?

Например вместо
randomize;
for i:=1 to n do begin
mas[i]:=random(10);
end;

написать
for i:=1 to n do 
begin
read(mas[i]);
end;

Автор: TeRmInWeB 23.12.2007 18:08

спс сейчас напишу

Добавлено через 4 мин.
отлично работает)))

Добавлено через 3 мин.
единственное то что каждый раз как я её запускаю всё что я там раньше решал она сохраняет мнеб нужно чтоб она каждый запуск в чистом окне делала без предыдущих записей...

Автор: Тёмный Эльф 23.12.2007 18:26

Цитата
мне нужно чтоб она каждый запуск в чистом окне делала без предыдущих записей...

для это надо так:
USES CRT; (перед var)
в начале программы сразу после begin можно: clrscr

Автор: compiler 23.12.2007 18:30

Цитата
отлично работает)))
исправил ошибку Зюзюки или комипилируется и хорошо? smile.gif
подсказка: сделай отступы и увидь блоки
Цитата
единственное то что каждый раз как я её запускаю всё что я там раньше решал она сохраняет мнеб нужно чтоб она каждый запуск в чистом окне делала без предыдущих записей...
Процедура ClrScr, из модуля Crt тебе в помощь!

Автор: TeRmInWeB 23.12.2007 18:31

Тёмный Эльф спасиб сейчас напишу) а то уже места нету всё пространство паскаль занял)

Автор: TeRmInWeB 23.12.2007 19:09

блин я и uses crt и clrscr попробовал а ошибка почему то? я во всех бегинах попробовал.

Автор: Client 23.12.2007 19:10

Покажи полностью код, чтоб увидели (мы не телепаты smile.gif )

Автор: TeRmInWeB 23.12.2007 19:26

program m;
const n=25;
var mas: array [1..n] of integer;
i,sum,kol: integer;
begin
randomize;
for i:=1 to n do
begin
read (mas[i]);
end;
sum:=0;
kol:=0;
for i:=1 to n do begin write(mas[i],' '); end;
readln;
for i:=1 to n do
begin
if ((mas[i] mod 2) = 0) then begin mas[i]:=-mas[i]; end
else begin sum:=sum+mas[i]; kol:=kol+1;
end;
end;
for i:=1 to n do begin write(mas[i],' ');
end;
readln;
writeln(sum);
writeln(kol);
readln;
end.

Добавлено через 9 мин.
вот там я пробовал uses crt но ошибки выдаёт.

Автор: Client 23.12.2007 20:07

program m;
uses crt;
. . .
begin
clrscr;
. . .
А так не пробовал??

Автор: TeRmInWeB 23.12.2007 20:11

сейчас попробую)


Добавлено через 10 мин.
Зашибись СУУУпер все 100% работает спс всем кто помагал!!!!!!!!!!!