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

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

Форум «Всё о Паскале» _ Задачи _ Одномерные массивы - вычисление суммы индексов положительных элементов.

Автор: HumFF 24.12.2009 20:54

Написать программу, которая вводит с клавиатуры 25 действительных чисел, организовывает их хранение в одномерном массиве, а затем определяет число положительных элементов ланной последовательности и выводит результат... Помогите пожалуста, я уже не знаю что и делать. Да знаю, задача элементарная, но я в паскале новичок и толком ничего не знаю... wacko.gif

Автор: Рустам 25.12.2009 2:16

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


uses crt; // модуль работы с экраном
const n=25; //количество элементов в массиве
var
a: array [1..25] of integer;
i,k,j,s: integer;

begin
clrscr; // очистка экрана
randomize; // подключаем случайные числа

for i:=1 to n do
begin
a[i]:=random(20)-10; // в цикле заполняем массив случайными числами от -10 до 9, если хочешь вручную
// то вместо этого напиши read(a[i]);
write(a[i],' '); // выводим на экран последовательность
end;

for i:=1 to n do
if a[i]>0 then // если число положительное
begin
s:=s+a[i]; // то суммируем его
inc(k); // увеличиваем количество
j:=j+i; // считаем сумму индексов
end;
writeln;
writeln('Summa polojitelnih elementov ',s); // выводим
writeln('Kol-vo polojitelnih elementov ',k);
writeln('Summa indecsov polojit elementov ',j);

readln;
end.



Автор: Lapp 25.12.2009 2:28

Рустам, пара замечаний:
- в условии ясно сказано про количество, остальное - фантазии ));
- обязательно инициализируй переменные (счетчики, суммы..), не рассчитывай на компилятор;
- форматируй код - без этого не уйдешь дальше максимум сотни операторов.

PS
с крещением, +1 ))

Добавлено через 3 мин.
и отвыкай чистить экран в консольном режиме с последовательным выводом.. mauvais ton ))

Автор: volvo 25.12.2009 2:51

Можно еще одно замечание? smile.gif

Рустам, если уж ты ввел константу N и приписал в комментариях, что это "количество элементов в массиве", то надо было и массив описывать не через магическое число 25, а через N... А то надо будет изменить программу для работы с 30-ю значениями, ты N изменишь, и запустишь программу. А она что? Правильно, вылетит с ошибкой...

Цитата
отвыкай чистить экран в консольном режиме с последовательным выводом..
yes2.gif Первое, что делаю при тестировании чужих программ - отключаю CRT и убираю разноцветность и очистку экрана...

Автор: Рустам 25.12.2009 20:38

lapp, -просто в названии темы одно а в задании другое..
- окей буду знать)
- в смысле форматировать? вроде и так все не в одну строчку написал))

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

Автор: Lapp 26.12.2009 11:02

Цитата(Рустам @ 25.12.2009 16:38) *
lapp, -просто в названии темы одно а в задании другое..
думаю, надо ориентироваться на задание. А то, что в названии у него что-то другое - это вообще наказуемо smile.gif.

Цитата
- окей буду знать)
Это особенно относится к процедурам/функциям. А поскольку любой кусок кода может быть неожиданно перенесен в процедуру, то..

Цитата
- в смысле форматировать? вроде и так все не в одну строчку написал))
Это большое упущение твоего преподавателя.. Ты совсем не знаешь про формат??
Объяснять это ГОРАЗДО сложнее, чем показывать на примере. Внимательно рассмотри мои коды или коды volvo. У нас с ним есть некоторые различия в подходах, но не в главных моментах. Попробуй усвоить, что неясно - спрашивай.

Цитата
и почему нельзя чистить экран

- во время отладки КРАЙНЕ полезно иметь предыдущий вывод перед глазами.

- ты когда нибудь видел, чтоб нормальные команды делали это? dir, например. Когда я работаю в командной строке (а это нередко, и совсем не только в UNIX), я могу навыводить кучу полезной инфы, и вдруг мне потребуется твоя прога (калькулятор или еще что-то). Я и ее вызываю - хренак, она мне все стерла.. Зачем? А для красоты! smile.gif Если бы ты стирал только свои данные - это полбеды. Но ты стираешь ВСЕ! Надо УВАЖАТЬ чужую работу и не подвергать ее ненужному риску. А если мне понадобится очистить свой терминал - я это сделаю САМ. Это, конечно, не относится к программам с позиционным выводом - и то, там лучше промотать вверх перед работой.

Цитата
и надо убирать crt?
Модуль CRT противоречит основным принципам работы с терминалом. Более того, он переделывает по-своему работу с файлами. Я уж не говорю про то, что он увеличивает размер программы, а также может содержать ошибки (и содержит, в FPC, например). Это как трость, которая по сути не нужна, но если привык - не можешь без нее.

Кстати еще: randomize - это не инициализация случайных чисел. Это просто перемешивание. Этот оператор следует вставлять только после полной отладки. Отлаживаться на случайной, но ПОВТОРЯЕМОЙ последовательности гораздо проще.

Автор: andriano 26.12.2009 15:11

Цитата(Lapp @ 26.12.2009 7:02) *
Это, конечно, не относится к программам с позиционным выводом - и то, там лучше промотать вверх перед работой.
Относится и к ним. И наиболее грамотно написанная часть из них не проматывает изображение вверх, а оставляет его как есть в 0-странице видеопамяти, а сама переключают вывод на 1-ю и пишет туда.
Ну а по окончании работы возвращаются в 0-ю, где сохранился весь предыдущий вывод.
Цитата

Модуль CRT противоречит основным принципам работы с терминалом.
Да.
Я, когда писал на ТР под DOS, специально сделал модуль MyCrt, содержащий лишь delay, readkey и keypressed, и пользовался только им.

Автор: Рустам 26.12.2009 22:31

Lapp, Adriano, хорошо спасибо!!:)