Упражнение следующее:
"пользователь вводит несколько чисел (например, 129109212). Затем это число фильтрует, где остаются только '0' и '1' (1101). Затем, если длина последнего числа равнабольше 4, то каждый раздел из 4 чисел преобразуется в десятичную (из двоичного числа), называемую теперь «res». Если одно из «res» больше 8, целое введенное число удаляется из очереди, а следующее число преобразуется. Затем выведите все результаты ".
ПРИМЕР (с 2 числами): введите число: 10203040506071 Двоичный файл: 10000001 (здесь два числа: 1000 и 0001. они преобразуют (8 и 1)). РЕЗУЛЬТАТ IS: 81
Введите номер: 11023232030232 Двоичный файл: 11000 (Здесь 1100 и 0 - 1100 больше 8 (12) и число удаляется из очереди)
КОНЕЦ РЕЗУЛЬТАТА: 1) 81
--- КОНЕЦ --- ЗДЕСЬ КОД (ЛОГИЧЕСКИ ВПЕРЕД, НО ОШИБКИ ПРОИСХОДЯТ (ошибка чтения и т. Д. ())
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
#include <math.h>
#define QMAX 100
typedef long long int li;
struct queue {
li qu[QMAX];
int rear, frnt;
};
//FUNCTIONS FOR THER QUEUE
void init(struct queue* q) {
q->frnt = 1;
q->rear = 0;
puts("--------THE QUEUE WAS CREATED SUCCESSFULLY!!!--------");
return;
}
void insert(struct queue* q, li x) {
if (q->rear < QMAX - 1) {
q->rear++;
//strcpy(q->qu[q->rear], str);
q->qu[q->rear] = x;
}
else
printf("---THE QUEUE IS FULL!---\n");
return;
}
int isempty(struct queue* q) {
if (q->rear == 0) return(1);
else return(0);
}
void print(struct queue* q) {
puts("----THE ELEMENTS OF THRE QUEUE ARE: ----");
int h;
if (isempty(q) == 1) {
printf("Очередь пуста!\n");
return;
}
for (h = q->frnt; h <= q->rear; h++)
printf("%lli\n", q->qu[h]);
return;
}
li removeEl(struct queue* q) {
int h; li x;
if (isempty(q) == 1) {
printf("Очередь пуста!\n");
return(0);
}
x = q->qu[q->frnt];
for (h = q->frnt; h < q->rear; h++) {
q->qu[h] = q->qu[h + 1];
}
q->rear--;
return(x);
}
int main()
{
char str[20], inputStr[100];
int i, num;
printf("Enter the amount of numbers: \n"); scanf("%d", &num);
struct queue* queue;
queue = (struct queue*)malloc(sizeof(struct queue));
init(queue);
for (i = 0; i < num; i++) {
li x;
printf("Enter your string : "); getchar();
scanf("%lli", &x); getchar();
insert(queue, x);
}
puts("THE QUEUE IS: ");
print(queue);
int h;
for (h = queue->frnt; h < queue->rear + 1; h++) {
char inputStr[127], res[20];
sprintf(inputStr, "%lli", queue->qu[h]);
//DLETING EVERYTHING IS NOT 0 OR 1
int j = 0;
for (i = 0; inputStr[i]; i++)
if (inputStr[i] >= '0' && inputStr[i] <= '1' || inputStr[i] == ' ' || inputStr[i] == '\0') {
inputStr[j] = inputStr[i];
j++;
}
inputStr[j] = '\0';
printf("String after modification : ");
printf("%s\n", inputStr); getchar();
int len = strlen(inputStr);
int temp[4];
int k;
char str[4] = "";
for (i = 0; i < len; i += 4) {
if (inputStr[i] != '\0' || inputStr[i] == '1' || inputStr[i] == '0')
temp[0] = inputStr[i] - '0';
if (inputStr[i + 1] != '\0' || inputStr[i + 1] == '1' || inputStr[i + 1] == '0')
temp[1] = inputStr[i + 1] - '0';
if (inputStr[i + 2] != '\0' || inputStr[i + 2] == '1' || inputStr[i + 2] == '0')
temp[2] = inputStr[i + 2] - '0';
if (inputStr[i + 3] != '\0' || inputStr[i + 3] == '1' || inputStr[i + 3] == '0')
temp[3] = inputStr[i + 3] - '0';
sprintf(str, "%d%d%d%d", temp[0], temp[1], temp[2], temp[3]);
k = str - '0';
//convertation into decimal system
int counter = 1, timeless, decimal = 0;
strcpy(res, "");
while (k != 0) {
timeless = k % 10 * counter;
decimal += timeless;
k /= 10;
counter *= 2;
}
if (decimal > 8) { removeEl(queue->qu[h]);}
else {
char dec; dec = decimal + '0';
strcat(res, dec);
}
strcat(res, '\0');
}
int num = res - '0';
queue->qu[h] = num;
printf("The decimal is: %d", queue->qu[h]);
}
/*
fgets(inputStr, 100, stdin); getchar();
int j = 0;
for (i = 0; inputStr[i]; i++) {
if (inputStr[i] >= '0' && inputStr[i] <= '1' || inputStr[i] == ' ' || inputStr[i] == '\0') {
inputStr[j] = inputStr[i];
j++;
}
}
inputStr[j] = '\0';
printf("String after modification : ");
printf("%s\n", inputStr); getchar();
int len = strlen(inputStr);
enqueue(queue, inputStr);
char num1[100] = "";
int temp[4];
int res = 0;
strcpy(str, "");
for (i = 0; i < len; i += 4) {
if (inputStr[i] != '\0' || inputStr[i] == '1' || inputStr[i] == '0')
temp[0] = inputStr[i] - '0';
if (inputStr[i + 1] != '\0' || inputStr[i + 1] == '1' || inputStr[i + 1] == '0')
temp[1] = inputStr[i + 1] - '0';
if (inputStr[i + 2] != '\0' || inputStr[i + 2] == '1' || inputStr[i + 2] == '0')
temp[2] = inputStr[i + 2] - '0';
if (inputStr[i + 3] != '\0' || inputStr[i + 3] == '1' || inputStr[i + 3] == '0')
temp[3] = inputStr[i + 3] - '0';
sprintf(str, "%d%d%d%d", temp[0], temp[1], temp[2], temp[3]);
strcat(num1, str);
strcat(num1, " ");
sscanf(str, "%d", &res);
printf("\nres is: %d", res);
//RES is converted to number char
//convertation into decimal system
int counter = 1, timeless, decimal = 0;
while (res != 0) {
timeless = res % 10 * counter;
decimal += timeless;
res /= 10;
counter *= 2;
}
printf("\ndecimal is: %d", decimal);
if (decimal > 9) dequeue(queue);
}
for (int i = queue->front; i < queue->size; i++) {
char str1[100] = "";
int len = strlen(&queue->array[i]);
int temp1[4];
int c = 0;
char decimals[32] = "";
char deca[32];
int res = 0;
for (i = 0; i < len; i += 4) {
strcpy(deca, "");
if (queue->array[i] != '\0' || queue->array[i] == '1' || queue->array[i] == '0')
temp1[0] = queue->array[i] - '0';
if (queue->array[i + 1] != '\0' || queue->array[i + 1] == '1' || queue->array[i + 1] == '0')
temp1[1] = queue->array[i + 1] - '0';
if (queue->array[i + 2] != '\0' || queue->array[i + 2] == '1' || queue->array[i + 2] == '0')
temp1[2] = queue->array[i + 2] - '0';
if (queue->array[i + 3] != '\0' || queue->array[i + 2] == '1' || queue->array[i + 2] == '0')
temp1[3] = queue->array[i + 2] - '0';
sprintf(str, "%d%d%d%d", temp1[0], temp1[1], temp1[2], temp1[3]);
strcat(str1, str);
strcat(str1, " ");
sscanf(str, "%d", &res);
printf("\nres is: %d", res);
//RES is converted to number char
//convertation into decimal system
int counter = 1, timeless, decimal = 0;
while (res != 0) {
timeless = res % 10 * counter;
decimal += timeless;
res /= 10;
counter *= 2;
}
char aka = decimal + '0';
strcat(decimals, &aka);
}
//printf("%s --- %s", str1, decimals);
}
*/
getchar();
return 0;
}
int convertBinaryToDecimal(long long n)
{
int decimalNumber = 0, i = 0, remainder;
while (n != 0)
{
remainder = n % 10;
n /= 10;
decimalNumber += remainder * pow(2, i);
++i;
}
return decimalNumber;
}