Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 13


единицы и т. д. Вначале массив счетчиков обнуляется, а после выделения всех цифр числа проверяется, сколько счетчиков хранят ненулевые значения. Вообще говоря, можно не заниматься подсчетом количества появлений каждой цифры —достаточно фиксировать сам факт появления той или иной цифры.

Совет 2 (Си, Паскаль)

Обратите внимание на различное оформление функций num_digits на Си и Паскале. Локальные переменные в функциях на Си, которым присваиваются начальные значения, при повторных обращениях к функциям инициализируются заново. В процедурах и функциях Паскаля такая инициализация производится только один раз, поэтому повторный вызов может привести к неверным результатам.

Программа 2_08.bas

RЕМ Определение количества различных цифр в числе

DECLARE FUNCTION NumDig!(N&)

CLS

INPUT "Введите число : ", N&

PRINT "Количество разных цифр в его записи = ";NumDig(N&)

END

FUNCTION NumDig(N&)

REM Выделение и подсчет количества разных цифр в числе N

DIM d(10) : ' Массив для фиксации обнаруженных цифр

КЕМ При вызове функции d(i)=0

IF N&<10 THEN NumDig=l: EXIT FUNCTION

DO

k%=N& MOD 10 : ' Выделение очередной цифры

d(k%)=d(k%)+l : ' Подсчет количества цифр, равных k

N&=(NS-k%)/10 : ' Удаление обработанной цифры

LOOP UNTIL N&=0

FOR k%=0 TO 9 : ' Цикл подсчета количества обнаруженных цифр

IF d(k%)<>0 THEN s=s+l : ' Если d(i)=0, цифры i не было

NEXT k%

NumDig=s

END FUNCTION

Программа 2_08.с

/* Определение количества различных цифр в числе */

#include <stdio.h>

#include <conio.h>

int num_digits(long N);

main() {

long N;

printf("\n Введите число - ");

scanf("%ld",&N);

printf("\Количество разных цифр в его записи = %d ",

num_digits(N));

getch(); }

int num_digits(long N)

/* Выделение и подсчет количества разных цифр в числе N */ {

char d[10]={0,0,0,0,0,0,0,0,0,0}; /* Массив счетчиков цифр */

int k,s=0;

if(N<10) return 1;




- Начало -  - Назад -  - Вперед -