Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программа на языке Паскаль.

Татьяна Мачавариани Мыслитель (6175), закрыт 4 года назад
Почему процедура работает правильно, а после её вызова программа выдаёт неправильные результаты?

Дополнен 4 года назад
program pr1;
var i,C,S,K2: integer; //C,S фактические параметры
mas: array [1..5] of integer;
procedure sum (K,C1,S1:integer); // проседура считает количество цифр в числе K и их сумму.
// C1 - количество цифр, S1 - их сумма. Формальные параметры
var j,C2,k1: integer; //с1-выбираем цифры
stroka: string;
begin
S1:=0; // обнуляем сумму
k1:=K;
str(K,stroka);
C1:=length(stroka);
for j := 1 to C1 do
begin
C2:=k1 mod 10; // выделяем очередную цифру
k1:= k1 div 10; // Отрезаем последнюю цифру
S1:=S1+C2;
end;
writeln('C=',C2,' S=',S1, ' в процедуре *****'); //****** Заплатка
end;
begin // начало программы
C:=0;
S:=0;
// writeln('введите число ');
// readln (K2);
// sum (K2,C,S);
// writeln('В программе число',K2,' количество цифр =',C, 'сумма цифр =', S);
writeln('введите пять целых чисел ');
for i:=1 to 5 do
begin
readln (mas[i]);
end;
for i:=1 to 5 do
begin
K2:=mas[i];
sum (K2,C,S);
writeln('В программе число',K2,' количество цифр =',C, 'сумма цифр =', S);
end;
end.
Лучший ответ
... Гений (84839) 4 года назад
Как минимум;
procedure sum (K:integer; var C1,S1:integer);

Иначе C1 и S1 изменяются локально и изменения "не передаются" обратно.
После этого должно работать. У Вас если ввести отрицательное число - будут проблемы

По коду:
Зачем Вам str в процедуре? Считайте кол-во пока число после деления не станет равным 0.
Есть лишние перменные (будем считать, что это черновик)

Можно и с str, но тогда и считать лучше другим способом - получаете символ числа из строки, пребразуете в число через Ord(символ) -Ord('0'), считаете, складываете и т. д.

--- Если чуть причесать (не смотрите, если хотите сами =):

program pr1;
var i,C,S: integer; //C,S фактические параметры
mas: array [1..5] of integer;

procedure sum (K:integer; var C1, S1:integer); // проседура считает количество цифр в числе K и их сумму.
// C1 - количество цифр, S1 - их сумма. Формальные параметры
begin
C1:=0; S1:=0;
repeat
Inc(S1, K mod 10);
Inc(C1);
K:=k div 10;
until K=0;
end;

begin // начало программы
writeln('введите пять целых чисел ');
for i:=1 to 5 do readln (mas[i]);

for i:=1 to 5 do
begin
sum(mas[i],C,S);
writeln('В программе число ', mas[i],' количество цифр =',C, ' сумма цифр =', S);
end
end.
Остальные ответы
Aлeкceй Мыслитель (8287) 4 года назад
попробуйте так:
procedure sum (var K,C1,S1:integer);
Похожие вопросы