Допоможіть будь-ласка з курсовою на С.
#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 комментариев
Добавить комментарий