21.11.2010, 00:59 | #1 (permalink) |
Member
Регистрация: 13.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Строки. Pascal
Задание: Задан одномерный массив, каждым элементом которого является строка символов, состоящая из одних цифр. Рассматривая каждую строку как число, определить сумму четных и нечетных значений элементов массива. Вот что попробовал сделать, но не могу понять почему не работает Код:
uses crt; Var a:array[1..100] of integer; i,n:integer; s1,s2:integer; begin clrscr; s1:=0; s2:=0; write ('Введите количество элементов массива n='); Readln(n); Writeln('Вводим элементы массивов') ; for i:=1 to n do Read (a[i]); for i:=1 to n do if i mod 2=0 then s1:=s1+a[i] else s2:=s2+a[i]; writeln('Сумма четных элементов массива s1=',s1); writeln('Сумма нечетных элементов массива s2=',s2); End. |
21.11.2010, 00:59 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Пожалуйста, уделите чуточку внимания схожим топиками Строки Строки Строки Строки |
21.11.2010, 10:54 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Пожалст.
1. В условии задачи говорится, что вводятся не числа, а строки символов. Значит, так и надо делать: вводить строки а уж затем преобразовывать в числа. 2. Нужно проверять четность не НОМЕРА элемента, а САМОГО элемента. 3. В конце программы хорошо бы вставить останов. С учетом вышесказанного: Код:
uses crt; Var a:array[1..100] of String; i,n,s1,s2,d,Code:integer; begin clrscr; s1:=0; s2:=0; write('n= '); Readln(n); Writeln('Вводим элементы массива:') ; for i:=1 to n do ReadLn(a[i]); for i:=1 to n do begin VAL(a[i],d,Code); if (d mod 2)=0 then s1:=s1+d else s2:=s2+d; end; writeln('Сумма четных элементов массива s1=',s1); writeln('Сумма нечетных элементов массива s2=',s2); ReadKey; End. |
22.11.2010, 01:07 | #3 (permalink) | ||
Member
Регистрация: 13.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
А val переводит строку в число? И в чем замешаны переменные d и code? Запутался что-то. В конце ReadKey - эт что? Цитата:
|
||
22.11.2010, 10:22 | #4 (permalink) | |||
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Да, процедура VAL переводит строку в целое число. Подробно о ней можно прочитать в любом руководстве по Паскалю и в Help'е самого установленного к Вас пакета. У процедуры три параметра: первый - преобразуемая строка, второй - получающееся после преобразования число (в программе это и есть d), третий (Code) - служебный параметр, возвращающий "0", если преобразование прошло успешно, и код ошибки в противном случае. Использование Code - на усмотрение программиста, но задавать его нужно всегда. Цитата:
В данном случае желательно, чтобы программа, выведя на экран результаты работы, остановилась и дала возможность на них посмотреть, а не вылетала в окно транслятора. Это и называется "вставить останов" ReadKey - это он (останов) и есть. Используется только при присоединении модуля CRT. По этой команде выполнение программы останавливается до нажатия любой клавиши. Если модуль CRT не присоединен, то можно в качестве останова использовать команду Readln без параметров. Запуск программы на продолжение осуществляется нажатием клавиши Enter. |
|||
23.11.2010, 13:53 | #5 (permalink) | |
Member
Регистрация: 13.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|