Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Процедуры в Паскале (http://www.tehnari.ru/f43/t38197/)

пупс 23.07.2010 03:36

Процедуры в Паскале
 
Привет. ПОМОГИТЕ РЕШИТЬ ОДНУ ПРОБЛЕМУ. Вот условие программы:
Напечатать все целые числа из отрезка [1,100], сумма цифр которых является четным числом. Подсчет суммы цифр числа и определение их четности оформить в процедуре (входной параметр: целое число; выходной параметр: логическая переменная)
А вот решение:
Код:

uses
  crt;
var
  i:integer;
function sum(a:integer):boolean;
  var
    s:integer;
begin
  s:=0;
  while a<>0 do
  begin
    s:=s+a mod 10;
    a:=a div 10;
  end;
  sum:=s;
end;
begin
  clrscr;
  for i:=1 to 100 do if not odd(sum(i)) then write(i,' ');
  readln
end.

Когда я её компилирую, мне выдается ошибка под названием НЕСООТВЕТСТВИЕ ТИПОВ, и показывает на что именно:
.......
end;
sum:=s;
end;
.......
Мне бы хотелось узнать, что именно здесь не так и как устранить эту ошибку.

Long Cat 23.07.2010 04:44

Во - первых, оформляйте исходный текст программы правильно, используя тег форума code и отступы.
Во-вторых, вы пытаетесь в логическую переменную (boolean), записать целое значение (integer), что вызывает ошибку.
В-третьих, ваша процедура не решает задачу - она вычисляет сумму цифр числа, но не определяет, четная она или нет.

Vladimir_S 23.07.2010 10:32

Цитата:

Сообщение от пупс (Сообщение 364954)
Привет. ПОМОГИТЕ РЕШИТЬ ОДНУ ПРОБЛЕМУ. Вот условие программы:
Напечатать все целые числа из отрезка [1,100], сумма цифр которых является четным числом. Подсчет суммы цифр числа и определение их четности оформить в процедуре (входной параметр: целое число; выходной параметр: логическая переменная)

Программа, полностью удовлетворяющая поставленным условиям, выглядит, например, так:
Код:

uses
  crt;
var
  i:integer;
  b:boolean;
procedure sum(a:integer; var bs:boolean);
  var
    s:integer;
begin
  s:=0;
  while a<>0 do
  begin
    s:=s+a mod 10;
    a:=a div 10;
  end;
  If odd(s) then bs:=false else bs:=true;
end;
begin
  clrscr;
  for i:=1 to 100 do
  begin
    sum(i,b);
    if b then write(i,' ');
  end;
  readln
end.


пупс 23.07.2010 12:33

Процедуры в Паскале
 
Спасибо огромное за помощь))))
Все ошибки я учту.))):)


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.