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

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

Форум «Всё о Паскале» _ Задачи _ Программирование обработки одномерных массивов

Автор: ЯЯЯ 27.10.2006 20:27

Помогите, пожалуйста решить 2 задачки:
1) Создать массив вещественных чисел. Заменить все отрицательные значения равными по модулю положительными и вывести результат работы на экран.

2) Создать массив целых чисел. Найти сумму и количество тех элементов массива, которые меньше заданного числа N. Вывести результат работы на экран.

Автор: Reflex 27.10.2006 20:37

var arr : array [ 1..100] of real;
n:integer;
i:integer;
begin
for i:= 1 to n do
if arr[i]<0 then arr[i]:=-2*(arr[i]);
for i:= 1 to n do
writeln(arr[i]);
end.

Автор: volvo 27.10.2006 20:39

ЯЯЯ, в задаче №1 проще всего пробежаться по всему массиву, заменяя

a[i] := Abs(a[i]);
при этом неотрицательные числа останутся прежними, а отрицательные сменят знак... И никаких условий не нужно - без них будет даже быстрее...

Автор: Reflex 27.10.2006 20:39

var arr : array [ 1..100 ] of integer;
n:integer;
c:integer;
i,count:integer;
begin
count:=0;
for i:= 1 to c do
if arr[i]<n then count:=count+arr[i];
for i:= 1 to c do
write(arr[i],' ');
end.

Автор: volvo 27.10.2006 20:40

Reflex, а если подумать?

if arr[i]<0 then arr[i]:=-2*(arr[i]);
При arr[i] = -20 что будет?

В задаче №2 ты можешь очень сильно пострадать: переменная C не инициализирована (впрочем, так же, как и N в первой)...

Никогда не торопись... Особенно, если хочешь кому-то ПОМОЧЬ...

М
P.S. Ну, и зачем ПОЛНЫЕ решения??? Что, человек научится чему-нибудь? А вот неприятный осадок точно останется. Решения вроде полные, а нерабочие... Будет так продолжаться - получишь наказание. Правила еще никто не отменял:
Цитата(Правила Раздела)
7. Проверяйте программы перед тем, как разместить их на форуме!!!



Автор: Reflex 27.10.2006 21:06

Volvo - опечатка


if arr[i]<0 then arr[i]:=-(arr[i]);



а поповоду переменных N и С - это переменные означающие количество использованных переменных в массиве, а предполагаеться что значение переменных n и c даны и массив заполнен

А программы проверялись, просто я запуталась когда перепечатывала

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

Автор: мисс_граффити 27.10.2006 21:43

ОФФ:
из паскаля тоже можно копировать smile.gif просто открывай pas файл блокнотом.
а разбираться никто не будет smile.gif пойдут сдавать готовое, не глядя. ни на один вопрос препода не смогут ответить и тебя же обвинят во всех смертных грехах.

Автор: ЯЯЯ 27.10.2006 23:43

Задачи не работают! Помогите исправить!

Автор: Reflex 28.10.2006 0:02

выложи код, который править. А те задачи которые выложила я достаточно правильные почитай эту тему и пойми что делать ;)

Автор: Гость 9.11.2006 21:34

Program Sm;
var arr : array [ 1..100 ] of integer;
n:integer;
c:integer;
i,count:integer;
begin
count:=0;
for i:= 1 to c do
if arr[i]<0 then arr[i]:=-(arr[i]);
for i:= 1 to c do
write(arr[i],' ');
end.


Заменил, не работает всё равно!

Сколько ни пытался "пробежаться по всему массиву заменяя a[i] := Abs(a[i]);" в 1-ой задаче, ничего не вышло!
Где я не прав?

 ! 
ТЕГИ !


Автор: TimeStopper 9.11.2006 22:10

Program Sm;
uses crt;
var a : array [ 1..100 ] of integer;
n:integer;
i:integer;
begin
clrscr;
randomize; {делает так чтоб числа каждый раз выпадали разные}
writeln('Введите количесто символов в массиве?');
read(n); {читаем скоко символов хотите чтоб было }
for i:= 1 to n do
begin
a[i]:=random(20)-10; {заполняем массив чилами случайным образом}
write(a[i],' ');{показывает ети числа которые задались рандомом}
if a[i]< 0 then a[i]:=abs(a[i]);{если число < 0 то тогда записуем ето число в масcив по модулю}
end;
writeln;
for i:= 1 to n do
write(a[i],' '); {выдает результат}
repeat until keypressed; {выходит при нажатий на любую клавишу }
end.


 ! 
Используем теги !


Автор: Алена 10.11.2006 13:37

TimeStopper, если в IDE установлен режим RangeCheck (что, кстати, вполне логично делать, особенно для начинающего), то твой код вылетит при генерации первого же числа, которое ты думаешь, что будет отрицательным... Я бы делала так:

a[i]:=Integer(random(20))-10;
, тогда ошибки не будет...

Автор: ЯЯЯ 10.11.2006 21:31

А что насчёт первой задачи?

Автор: TimeStopper 11.11.2006 1:09

Цитата(ЯЯЯ @ 10.11.2006 16:31) *

А что насчёт первой задачи?

Так ето и есть первая задача.
а на счет второй вот:


Program n1;
uses crt;
var a : array [ 1..100 ] of integer;
n,m:integer;
i:integer;
s:integer;
k:integer;
begin
clrscr;
randomize;
writeln('Введите количесто символов в массиве?');
read(m);
writeln('Введите N');
read(n);
for i:= 1 to m do
begin
a[i]:=random(20);
write(a[i],' ');
if a[i]<n then
s:=s+a[i];
inc(k);
end;
writeln;
writeln('Количество символов которые меньше N = ',k);
writeln('Сума таких чисел = ',s);
repeat until keypressed; {выходит при нажатий на любую клавишу }
end.

Я не компилировал но вроде правильно.

 ! 
Еще раз запостишь код без тегов, получишь предупреждение


Автор: klem4 11.11.2006 2:26

Цитата
Я не компилировал но вроде правильно.


Последнее китайское предупреждение, _ЧИТАЙТЕ_ правила форума или в крайнем случае не пишит подобные глупости, вот это ты видел ?

Цитата(Правила форума)
7. Проверяйте программы перед тем, как разместить их на форуме!!!


dry.gif

Автор: TimeStopper 11.11.2006 2:32

Видел, но я просто быстро писал и хотел помочь, и если сделал какуето ошибку, то чтоб не ругали сильно. Но больше так небуду.

Автор: klem4 11.11.2006 2:36

Поспешишь - людей насмешишь. Твоя программа выдает бредовый результат.

Автор: мисс_граффити 11.11.2006 2:48

Цитата(klem4 @ 10.11.2006 22:36) *

Поспешишь - людей насмешишь. Твоя программа выдает бредовый результат.

ну... а что она может выдавать? smile.gif

TimeStopper, накопительные счетчики надо обнулять перед использованием.

Автор: TimeStopper 11.11.2006 3:05

Цитата(klem4 @ 10.11.2006 21:36) *

Поспешишь - людей насмешишь. Твоя программа выдает бредовый результат.

В смысле бредовые?

Автор: klem4 11.11.2006 3:22

В смысле результат, который выдает твоя программа порой является чушью не совместимой с истиной, так понятнее ?




Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: TimeStopper 11.11.2006 3:34

Цитата(klem4 @ 10.11.2006 22:22) *

В смысле результат, который выдает твоя программа порой является чушью не совместимой с истиной, так понятнее ?

Точно. Извенняюсь. Там я забыл begin и end написать.

if a[i]<n then
BEGIN
s:=s+a[i];
inc(k);
END;
end;


Автор: ЯЯЯ 12.11.2006 21:38

А что такое


inc(k)


Автор: TimeStopper 12.11.2006 21:44

Цитата(ЯЯЯ @ 12.11.2006 16:38) *

А что такое

inc(k)



Ето тоже самое что k:=k+1;