Форум «Всё о Паскале» _ Задачи _ Одномерные массивы - вычисление суммы индексов положительных элементов.
Автор: HumFF 24.12.2009 20:54
Написать программу, которая вводит с клавиатуры 25 действительных чисел, организовывает их хранение в одномерном массиве, а затем определяет число положительных элементов ланной последовательности и выводит результат... Помогите пожалуста, я уже не знаю что и делать. Да знаю, задача элементарная, но я в паскале новичок и толком ничего не знаю...
Автор: Рустам 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
Можно еще одно замечание?
Рустам, если уж ты ввел константу N и приписал в комментариях, что это "количество элементов в массиве", то надо было и массив описывать не через магическое число 25, а через N... А то надо будет изменить программу для работы с 30-ю значениями, ты N изменишь, и запустишь программу. А она что? Правильно, вылетит с ошибкой...
Цитата
отвыкай чистить экран в консольном режиме с последовательным выводом..
Первое, что делаю при тестировании чужих программ - отключаю CRT и убираю разноцветность и очистку экрана...
Автор: Рустам 25.12.2009 20:38
lapp, -просто в названии темы одно а в задании другое.. - окей буду знать) - в смысле форматировать? вроде и так все не в одну строчку написал))
и почему нельзя чистить экран , и надо убирать crt? а про константу в описании массива я забыл ... извините
Автор: Lapp 26.12.2009 11:02
Цитата(Рустам @ 25.12.2009 16:38)
lapp, -просто в названии темы одно а в задании другое..
думаю, надо ориентироваться на задание. А то, что в названии у него что-то другое - это вообще наказуемо .
Цитата
- окей буду знать)
Это особенно относится к процедурам/функциям. А поскольку любой кусок кода может быть неожиданно перенесен в процедуру, то..
Цитата
- в смысле форматировать? вроде и так все не в одну строчку написал))
Это большое упущение твоего преподавателя.. Ты совсем не знаешь про формат?? Объяснять это ГОРАЗДО сложнее, чем показывать на примере. Внимательно рассмотри мои коды или коды volvo. У нас с ним есть некоторые различия в подходах, но не в главных моментах. Попробуй усвоить, что неясно - спрашивай.
Цитата
и почему нельзя чистить экран
- во время отладки КРАЙНЕ полезно иметь предыдущий вывод перед глазами.
- ты когда нибудь видел, чтоб нормальные команды делали это? dir, например. Когда я работаю в командной строке (а это нередко, и совсем не только в UNIX), я могу навыводить кучу полезной инфы, и вдруг мне потребуется твоя прога (калькулятор или еще что-то). Я и ее вызываю - хренак, она мне все стерла.. Зачем? А для красоты! Если бы ты стирал только свои данные - это полбеды. Но ты стираешь ВСЕ! Надо УВАЖАТЬ чужую работу и не подвергать ее ненужному риску. А если мне понадобится очистить свой терминал - я это сделаю САМ. Это, конечно, не относится к программам с позиционным выводом - и то, там лучше промотать вверх перед работой.
Цитата
и надо убирать 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, и пользовался только им.