Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 21.11.2010, 00:59   #1 (permalink)
Tepp
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.
Спасайте пожалст ))
Tepp вне форума   Ответить с цитированием

Старый 21.11.2010, 00:59
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Пожалуйста, уделите чуточку внимания схожим топиками

Строки
Строки
Строки
Строки

Старый 21.11.2010, 10:54   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Tepp Посмотреть сообщение
Спасайте пожалст ))
Пожалст.

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.
Обратите внимание - строки вводить оператором Read нельзя, только ReadLn.
Vladimir_S вне форума   Ответить с цитированием
Старый 22.11.2010, 01:07   #3 (permalink)
Tepp
Member
 
Регистрация: 13.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Пожалст.

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.
Обратите внимание - строки вводить оператором Read нельзя, только ReadLn.
Спасибо огромное Но есть парочка вопросов
А val переводит строку в число?
И в чем замешаны переменные d и code?
Запутался что-то.
В конце ReadKey - эт что?
Цитата:
3. В конце программы хорошо бы вставить останов.
Кого? Не въехал
Tepp вне форума   Ответить с цитированием
Старый 22.11.2010, 10:22   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Tepp Посмотреть сообщение
Спасибо огромное Но есть парочка вопросов
А val переводит строку в число?
И в чем замешаны переменные d и code?
Запутался что-то.
Распутываю.
Да, процедура VAL переводит строку в целое число. Подробно о ней можно прочитать в любом руководстве по Паскалю и в Help'е самого установленного к Вас пакета. У процедуры три параметра: первый - преобразуемая строка, второй - получающееся после преобразования число (в программе это и есть d), третий (Code) - служебный параметр, возвращающий "0", если преобразование прошло успешно, и код ошибки в противном случае. Использование Code - на усмотрение программиста, но задавать его нужно всегда.
Цитата:
В конце ReadKey - эт что?
Цитата:
3. В конце программы хорошо бы вставить останов.
Кого? Не въехал
Попробую ввезти. "Останов" (в том числе АВОСТ, т.е. Аварийный Останов) - так называется команда остановки выполнения программы со времен появления первых цифровых ЭВМ в середине прошлого века.
В данном случае желательно, чтобы программа, выведя на экран результаты работы, остановилась и дала возможность на них посмотреть, а не вылетала в окно транслятора. Это и называется "вставить останов"
ReadKey - это он (останов) и есть. Используется только при присоединении модуля CRT. По этой команде выполнение программы останавливается до нажатия любой клавиши.
Если модуль CRT не присоединен, то можно в качестве останова использовать команду Readln без параметров. Запуск программы на продолжение осуществляется нажатием клавиши Enter.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.11.2010, 13:53   #5 (permalink)
Tepp
Member
 
Регистрация: 13.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Распутываю.
Да, процедура VAL переводит строку в целое число. Подробно о ней можно прочитать в любом руководстве по Паскалю и в Help'е самого установленного к Вас пакета. У процедуры три параметра: первый - преобразуемая строка, второй - получающееся после преобразования число (в программе это и есть d), третий (Code) - служебный параметр, возвращающий "0", если преобразование прошло успешно, и код ошибки в противном случае. Использование Code - на усмотрение программиста, но задавать его нужно всегда.

Попробую ввезти. "Останов" (в том числе АВОСТ, т.е. Аварийный Останов) - так называется команда остановки выполнения программы со времен появления первых цифровых ЭВМ в середине прошлого века.
В данном случае желательно, чтобы программа, выведя на экран результаты работы, остановилась и дала возможность на них посмотреть, а не вылетала в окно транслятора. Это и называется "вставить останов"
ReadKey - это он (останов) и есть. Используется только при присоединении модуля CRT. По этой команде выполнение программы останавливается до нажатия любой клавиши.
Если модуль CRT не присоединен, то можно в качестве останова использовать команду Readln без параметров. Запуск программы на продолжение осуществляется нажатием клавиши Enter.
Спасибо тебе огромное
Tepp вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 19:03.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.