online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
/* ========================================================================= Linguagem: C'11 Compilador 4.9.2 GCC mingW32 Thread model: posix Programa: DigitoNaPosicao.c Data: 12 / 4 / 2018 13:10 Autor: Mauro Britivaldo ========================================================================= */ /* INCLUDE */ /* Incluir permite chamar as funçőes ou macros */ #include <stdio.h> /* printf; puts; scanf; ...*/ #include <assert.h> /* assert; ... */ /* DEFINE */ /* Definir o macro customizado */ #define posicao_t size_t/* se é posiçăo só pode ser năo negativo */ #define decimal_t signed int/* tipo padrăo inteiro com sinal */ #define POSICAO_INVALIDA exp/* etiqueta de exception */ #define BASE_NEGATIVA (0 <= numero)/* etiqueta de exception */ /* ------------------------------------------------ DIGITO_NA_POSICAO ------ Funçăo DIGITO_NA_POSICAO PROPÓSITO: Identificar o dígito na referida posiçăo no conjuto de dígitos da variável inteira, assumido que essa variável pode ser tanto com sinal positivo. PARÃMETROS: posicao_t indice (IN) -- a variável da posiçăo a ser identificada, índice, dígito deverá ser identificado decimal_t numero (IN) -- é a base que contém todos os dígitos RETORNA: Sem bem sucedido o dígito identificado na posiçăo da base ERROS: Solicitar identificaçăo de índice maior que capacidade da base também caso o número da base tenha sinal negativo. ALGORITMO: Sistema décimal; base 10. Tem cada casa na sequência como produto da potência de 10. O expoente da potência é a posição da unidade a partir do 0; da direita para esquerda. Exemplo: [!]O símbolo ( ^ ) representa operação de potência Base ^ Expoente * Escalares = Casa Decimal. Valor = Soma de todas as Casa Decimais Base = 10 Se Valor = 2018 Então 3 2 1 0 = Expoentes 2 0 1 8 = Escalares 8 * (10 ^ 0 = 1) = 8 1 * (10 ^ 1 = 10) = 10 0 * (10 ^ 2 = 100) = 000 2 * (10 ^ 3 = 1000) = 2000 ----+ 2018 Observe que o enunciado do problema é logicamente inverso as casas decimais, porque para a questão o índice mais significativo é o menor índice 0. Que na ordem natural dos números decimais é o menos significativo. _Estapas do Processo_ INICIO 1# Step/> Obter cópia de :numero e verificar se é positivo 2# Step/> Determinar o expoente ou Base mais significativa 3# Step/> Obter um cópia de :numero e percorrer o :indice até 3.1# Step/> a cada interação na etapa #3 o valor :numero perde seu dígito mais significativo para isso se atribui a própria variável :numero o seu módulo( resto de divisão ) ao mesmo tempo que reduz o expoente na variável :exp ao dividi-se por 10. 3.2# Step/> Se a variável :exp for igual a 0 então significa que o valor na variável índice é maior que o valor do expoente mais significativo, portanto, erro de usa da função será chamado. 4# Step/> Se :indice for igual a 0 seguramente :valor e :exp são divisor e módulo, respectivamente correspondentes ao :indice FINAL Resolve. ------------------------------------------------------------------------- */ decimal_t digito_na_posicao_( posicao_t indice, decimal_t numero ){ /* VARIÁVEIS */ register decimal_t valor;/* copia de decimal_t :numero */ register posicao_t exp;/* potencia do dígito mais significativo em :numero */ assert( BASE_NEGATIVA ); exp = 1; valor = numero; while( valor /= 10 ){ exp *= 10; } valor = numero; while( indice-- ){ valor %= exp; exp /= 10; assert( POSICAO_INVALIDA ); } return( valor / exp ); } /* ------------------------------------------------------------- MAIN ------ */ int main( void ){ /* VARIÁVEIS */ posicao_t indice;/* índice do valor a ser identificado */ decimal_t numero;/* base / conjunto de elementos de valor */ puts(":::::: FUNCAO DIGITO NA POSICAO\n" ); printf( "[ << ] Entre com numero: " ); scanf( "%d", &numero ); printf( "[ << ] Entre com indice: " ); scanf( "%d", &indice ); printf( "[ >> ] O digito %d foi identificado!\n", digito_na_posicao_( indice, numero )); printf( "[ Ok ] Fim da funcao.\n"); return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue