Задания:
Дана строка, содержащая выражение вида “(3 3) 5=30”, где вместо каждого пробела стоит одна из операций +, – или *. Необходимо подставить вместо пробелов нужные операции, что бы выполнялось равенство.
В коде используются файлы, нужно решить задачу без использования файла
Код:
https://pastebin.com/TZT05J5V
C/C++
Помогите переделать код на Си
#include <stdio.h>
#include <stdlib.h> /* atoi */
#include <string.h> /* strlen */
#include <ctype.h> /* isdigit */
int main()
{
char s[] = "(3 3) 5=30";
const char znak[] = "+-*";
char nashi_znaki[3];
const int numSize = 4;
int num[numSize];
int sum = 0;
/* считываем числовые значения */
for(int x = 0, y = 0; x < strlen(s), y < numSize; x++)
{
if(isdigit(s[x]))
{
char tmp[3];
int i = 0;
while(isdigit(s[x]))
{
tmp[i] = s[x];
i++;
x++;
}
tmp[i] = '\0';
num[y] = atoi(tmp);
/* #define TEST */
#ifdef TEST
printf("%d ", num[y]);
#endif /* TEST */
y++;
}
}
#ifdef TEST
putchar('\n');
#endif /* TEST */
/* подбираем знаки для уравнения */
for(int x = 0; x < strlen(znak); x++)
{
int i = 0;
nashi_znaki[i] = znak[x];
i++;
for(int y = 0; y < strlen(znak); y++)
{
nashi_znaki[i] = znak[y];
nashi_znaki[i+1] = '\0';
#ifdef TEST
printf("%s\n", nashi_znaki);
#endif /* TEST */
switch(nashi_znaki[0])
{
case '+':
sum = num[0] + num[1];
break;
case '-':
sum = num[0] - num[1];
break;
case '*':
sum = num[0] * num[1];
break;
default:
perror("Неверный знак! \n");
return 1;
}
switch(nashi_znaki[1])
{
case '+':
sum += num[2];
break;
case '-':
sum -= num[2];
break;
case '*':
sum *= num[2];
break;
default:
perror("Неверный знак! \n");
return 1;
}
if(sum == num[3])
{
x = strlen(znak); /* чтобы не возобновлялся внешний цикл */
break; /* выходим из внутреннего цикла */
}
}
}
/* пишим знаки в уравнение */
for(int x = 0, y = 0; x < strlen(s), y < 2; x++)
{
if(s[x] == ' ')
{
s[x] = nashi_znaki[y];
y++;
}
}
/* выводи уравнение на экран */
printf("%s\n", s);
return 0;
}
#include <stdlib.h> /* atoi */
#include <string.h> /* strlen */
#include <ctype.h> /* isdigit */
int main()
{
char s[] = "(3 3) 5=30";
const char znak[] = "+-*";
char nashi_znaki[3];
const int numSize = 4;
int num[numSize];
int sum = 0;
/* считываем числовые значения */
for(int x = 0, y = 0; x < strlen(s), y < numSize; x++)
{
if(isdigit(s[x]))
{
char tmp[3];
int i = 0;
while(isdigit(s[x]))
{
tmp[i] = s[x];
i++;
x++;
}
tmp[i] = '\0';
num[y] = atoi(tmp);
/* #define TEST */
#ifdef TEST
printf("%d ", num[y]);
#endif /* TEST */
y++;
}
}
#ifdef TEST
putchar('\n');
#endif /* TEST */
/* подбираем знаки для уравнения */
for(int x = 0; x < strlen(znak); x++)
{
int i = 0;
nashi_znaki[i] = znak[x];
i++;
for(int y = 0; y < strlen(znak); y++)
{
nashi_znaki[i] = znak[y];
nashi_znaki[i+1] = '\0';
#ifdef TEST
printf("%s\n", nashi_znaki);
#endif /* TEST */
switch(nashi_znaki[0])
{
case '+':
sum = num[0] + num[1];
break;
case '-':
sum = num[0] - num[1];
break;
case '*':
sum = num[0] * num[1];
break;
default:
perror("Неверный знак! \n");
return 1;
}
switch(nashi_znaki[1])
{
case '+':
sum += num[2];
break;
case '-':
sum -= num[2];
break;
case '*':
sum *= num[2];
break;
default:
perror("Неверный знак! \n");
return 1;
}
if(sum == num[3])
{
x = strlen(znak); /* чтобы не возобновлялся внешний цикл */
break; /* выходим из внутреннего цикла */
}
}
}
/* пишим знаки в уравнение */
for(int x = 0, y = 0; x < strlen(s), y < 2; x++)
{
if(s[x] == ' ')
{
s[x] = nashi_znaki[y];
y++;
}
}
/* выводи уравнение на экран */
printf("%s\n", s);
return 0;
}
Владимир Владимиров
Наверное лучше был использовать if вместо switch, чтобы использовать значение znak[0]...znak[2]
переделать с какого языка?
Похожие вопросы
- Помогите доработать код на СИ по теме строки
- Помогите написать код на Си, по теме "строки".
- Помогите, пожалуйста, срочно. Прокомментировать код на Си
- Помогите дополнить код СИ, пж.
- Переделайте код для задачи в С++
- Помогите перевести код с С++ на Си
- Нужен код на Си помогите пж
- Нужен код на Си помогите пожалуйста
- Нужен код на Си помогите пж
- Помогите с написанием кода на Си для микроконтроллера