Рекурсия: проверить, является ли строка 16-ной записью числа и вернуть 10-ое значение - C (СИ)

Узнай цену своей работы

Формулировка задачи:

помогите сделать программу с рекурсией, без смог сделать, а с рекурсией не получается Задание: сделать функцию которая проверяет символьный рядок есть ли он 16-ным кодом и возвращает 10-ое значение, если нет то -1, з клавиатуры нужно ввести последовательность символьных рядков из 16-ми кодами
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
 
void isHex(char *r)
{
    int i=0, j=0, k;
    char *z, *f;
    if(r==NULL) return;
    while(i<strlen(r))
    {
        z=r[i];
        if(isdigit(z))
        {
            k=atoi(&z);
            j=j*16+k;
            i++;
        }
        else if(z=='a'||z=='A')
        {
            k=10;
            j=j*16+k;
            i++;
        }
        else if(z=='b'||z=='B')
        {
            k=11;
            j=j*16+k;
            i++;
        }
        else if(z=='c'||z=='C')
        {
            k=12;
            j=j*16+k;
            i++;
        }
        else if(z=='d'||z=='D')
        {
            k=13;
            j=j*16+k;
            i++;
        }
        else if(z=='e'||z=='E')
        {
            k=14;
            j=j*16+k;
            i++;
        }
        else if(z=='f'||z=='F')
        {
            k=15;
            j=j*16+k;
            i++;
        }
        else
        {
            j=-1;
            i=strlen(r);
        }
    }
 
    printf("%d\n", j);
}

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char SymbStr[100];
 
    printf("Введіть послідовність символьних рядків: \n");
    gets(SymbStr);
    char *pch=strtok(SymbStr," ,.-");
    while (pch!='\0')
    {
        printf("%s - ", pch);
        isHex(pch);
        pch = strtok(NULL, " ,.-");
    }
    return 0;
}

Решение задачи: «Рекурсия: проверить, является ли строка 16-ной записью числа и вернуть 10-ое значение»

textual
Листинг программы
if ('a' <= z && z <= 'f') k = 10 + z - 'a';
else if ('A' <=z && z<='F') k = 10 +z - 'A';
else // Error

Объяснение кода листинга программы

  1. Проверяется, является ли символ z заглавной буквой от 'A' до 'F' (включительно).
  2. Если это так, то k присваивается значение 10 + z - 'A'.
  3. Иначе, проверяется, является ли символ z строчной буквой от 'a' до 'f' (включительно).
  4. Если это так, то k присваивается значение 10 + z - 'a'.
  5. Иначе, выполняется действие, помеченное как // Error.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы