Народ, хто може допомогти ?

4 мая, 10:43 Учеба 3811 0

Допоможіть будь-ласка з курсовою на С.

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

#include <string.h>

#include "myhead.h"

 

int read_int_beween(int from, int to) {

   int value;

   while (1) {

       printf("enter value in [%d, %d]: ", from, to);

       scanf_s("%d", &value);

       if (value >= from && value <= to) {

           break;

       }

       printf("wrong input\n");

   }

   return value;

}

 

struct NumberInSystem {

   int* digits;

   int n;

   int sign;

   int base;

};

 

void create_number_in_system(struct NumberInSystem* number, int base, int n, int sign) {

   number->n = n;

   number->sign = sign;

   number->base = base;

 

   number->digits = malloc(sizeof(int) * n);

   memset(number->digits, 0, sizeof(int) * n);

}

 

int read_base() {

   int base;

 

   while (1) {

       printf("Enter base which you choose: ");

       scanf_s("%d", &base);

       if (base > 1 && base <= 10)

           break;

       printf("base must be in [2, 10]. repeat please\n");

   }

 

   return base;

}

 

void read_number_in_system(struct NumberInSystem* number) {

   number->base = read_base();

 

   while (1) {

       printf("number length: ");

       scanf_s("%d", &(number->n));

       if ((number->n) > 0)

           break;

       printf("length must be more than 0\n");

   }

 

   number->digits = malloc(sizeof(int) * number->n);

 

   (number->digits)[0] = read_int_beween(1, number->base - 1);

   for (int i = 1; i < number->n; ++i) {

       (number->digits)[i] = read_int_beween(0, number->base - 1);

   }

 

   number->sign = 0;

}

 

void print_number(struct NumberInSystem number) {

   if (number.sign == 1) {

       printf("-");

   }

   for (int i = 0; i < number.n; ++i) {

       printf("%d", number.digits[i]);

   }

   printf("\n");

}

 

int NumberInSystem_to_int(struct NumberInSystem number) {

   int value = 0;

   int power = 1;

 

   for (int i = number.n - 1; i >= 0; --i) {

       value += number.digits[i] * power;

       power = power * number.base;

   }

 

   if (number.sign == 1)

       value = value * (-1);

   return value;

}

 

struct NumberInSystem int_to_NumberInSystem(int value, int base) {

   int* buffer = malloc(sizeof(int) * 255);

 

   int sign = 0;

   if (value < 0) {

       sign = 1;

       value = value * (-1);

   }

 

   int length = 0;

   while (value > 0) {

       buffer[length] = value % base;

       value = value / base;

       length++;

   }

 

   struct NumberInSystem number;

   create_number_in_system(&number, base, length, sign);

 

 

   for (int i = 0; i < length; ++i) {

       number.digits[i] = buffer[length - i - 1];

   }

 

   free(buffer);

   return number;

}

 

void remove_number(struct NumberInSystem* number) {

   free(number->digits);

}

 

int main() {

   struct NumberInSystem a, b;

 

   read_number_in_system(&a);

 

   printf("your number: ");

   print_number(a);

 

   int other_base;

   other_base = read_base();

 

   int a_int = NumberInSystem_to_int(a);

   printf("your number in dec: %d\n", a_int);

 

   b = int_to_NumberInSystem(a_int, other_base);

   printf("your number in base %d: ", other_base);

   print_number(b);

 

   remove_number(&a);

   remove_number(&b);

 

   return 0;

}

Цей код потрібно зробити у вигляді багатофункціональної програми і додати блок-схему, якщо в когось є бажання допомогти ,то буду дуже вдячний. 

0 комментариев
Сортировка:
Добавить комментарий

IT Новости

Смотреть все