Помощь - Поиск - Пользователи - Календарь
Полная версия: Процедуры и функции
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Добрик
Найти кол-во цифр в строке
С помощью процедуры и функции.



Есть решение с помощью процедуры (и то есть косяк sad.gif, см. прог-у), а как с помощью функции?

Код
program test;

uses crt;


var
s:string; c:char;
procedure myproc (s:string);


begin

{Как записать?} if  c in '1'..'9' (char=(1 ..9))

var
s1:string;
i,n:integer;


begin
writeln ('Введи строку:');
readln (s);

for m:=1 to lengtstr (s) do

begin
c:=s[i];

if (c in cfr) then
i:=i+1
m:=m+1;
end;
writeln ('Количество цифр:',i);
end.



klem4
Цитата
Найти кол-во цифр в строке


с помощью функции :

function F(s: string) : byte;
var
i, count : byte;
begin
count := 0;
for i := 1 to length(s) do
if s[i] in ['0'..'9'] then
inc(count);
F := count;
end;

volvo
Цитата
и то есть косяк
А косяк - потому, что код процедуры перемешан с кодом основной программы (да и внутри процедуры тоже непорядок...). Вот так никакого косяка не будет:

procedure myproc (s:string; var count: byte);
var
i: integer;
begin
count := 0;
for i:=1 to length(s) do
if s[i] in ['0' .. '9'] then inc(count)
end;

...
{ основная программа: }
...
{ читаешь строку в s }
myproc(s, _count);
writeln('число цифр в строке = ', _count);
Добрик
Получилось две программы.

Первая (функция):

progaram func;

uses crt;

function number(s: string): integer;
var
i, m: integer;
begin
m := 0;
for i := 1 to length(s) do
if s[i] in ['0'..'9'] then m := m + 1;
Number := m;
end;


var s:string ;
begin

writeln(' Vvedite stroku:');
readln(s);
writeln(Number(s), ' cifr v stroke');
writeln;
readln;
end.



Вторая (процедура) - что-то не то ...:

program proc;


procedure writeCyfraNumber(s: string);
var
i, m: integer;
begin
m := 0;
for i := 1 to length(s) do
if s[i] in ['0' .. '9'] then m := m + 1;
writeln(' There are ', m, ' cyfras in string (PROCEDURE)');
end;

begin
writeln(' Enter string:');
readln(s);
writeln(' There are ', cyfraNumber(s), ' cyfras in string (FUNCTION)');
writeln;
writeCyfraNumber;
readkey;
end.
volvo
Я же привел тебе рабочую процедуру, почему обязательно надо что-то испортить, а потом говорить "не работает"??? Функция возвращает результат, как свое значение, это ясно... Где твоя процедура возвращает результат?

То, что ты печатаешь все внутри процедуры - просто ни в какие ворота не лезет. Нельзя смешивать оформление с логикой !!! Функция только считает, и процедура должна ТОЛЬКО посчитать и вернуть значение:

program proc;

procedure CyfraNumber(s: string; Var m: Integer);
var
i: integer;
begin
m := 0;
for i := 1 to length(s) do
if s[i] in ['0' .. '9'] then m := m + 1;
end;

var count: integer;
begin
writeln(' Enter string:');
readln(s);
cyfraNumber(s, count);
writeln(' There are ', count, ' cyfras in string (Procedure)');
readkey;
end.
Guest
ага, только описание переменной s тоже не забываем делать smile.gif.

...

var count: integer;
s: string;

...


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.