Тема: bool повертає 204 ?
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream>
char priclad[200];
struct MyStruct
{
//bukva tip
char bi;
char bc;
}Tsyfra[20];
int Scan()
{
//Зчитувння
char bukvi[50];
printf("1 - ^, 2 - v, 3 - <->, 4 - ->, 5 - ");
printf("%c", (char)191);
printf("\n");
scanf("%s", &priclad);
scanf("%s", &bukvi);
strcpy(priclad, strupr(priclad));
//Розпізнання
char bukva;
int j = 0;
strcpy(bukvi, strupr(bukvi));
for (int i = 0; i < strlen(bukvi); i++)
{
if (bukvi[i] == ',' || bukvi[i] == '.')
continue;
if (bukvi[i] != ' ' && bukvi[i] != '1' && bukvi[i] != '0' && bukvi[i] != '=')
bukva = bukvi[i];
else
if (bukvi[i] == ' ' && bukvi[i] != '1' && bukvi[i] != '0')
continue;
else
if (bukvi[i] == '1')
{
Tsyfra[j].bc = bukva;
Tsyfra[j++].bi = '1';
}
else
if (bukvi[i] == '0')
{
Tsyfra[j].bc = bukva;
Tsyfra[j++].bi = '0';
}
}
return j;
}
void ScanModernizator()
{
char *priclad_cpy = new char[strlen(priclad) + 40];
for (int i = 0; i < strlen(priclad);i++)
switch ((int)priclad[i])
{
case 49:priclad[i] = '^'; break;
case 50:priclad[i] = 'v'; break;
case 51:
strcpy(priclad_cpy, priclad);
priclad_cpy[i] = '<';
priclad_cpy[i + 1] = '-';
priclad_cpy[i + 2] = '>';
priclad_cpy[i + 3] = '\0';
strcat(priclad_cpy, &priclad[i + 1]);
strcpy(priclad, priclad_cpy);
break;
case 52:
strcpy(priclad_cpy, priclad);
priclad_cpy[i] = '-';
priclad_cpy[i + 1] = '>';
priclad_cpy[i + 2] = '\0';
strcat(priclad_cpy, &priclad[i + 1]);
strcpy(priclad, priclad_cpy);
break;
case 53:priclad[i] = (char)191; break;
//47 i 92 ne vivod
}
delete[]priclad_cpy;
printf("%s", priclad);
printf(" = ");
}
void Prysvoyennya_znachennya(int k_s)
{
for (int i = 0; i < strlen(priclad); i++)
for (int j = 0; j < k_s; j++)
if (priclad[i] == Tsyfra[j].bc)
priclad[i] = Tsyfra[j].bi;
printf("%s", priclad);
}
//Логічні операції Begin
void zaperechena(char *v_duzhkakh)
{
for (int i = 0; i < strlen(v_duzhkakh); i++)
if (v_duzhkakh[i] == (char)191)
if (v_duzhkakh[i + 1] == '1')
v_duzhkakh[i + 1] = '0';
else
if (v_duzhkakh[i + 1] == '0')
v_duzhkakh[i + 1] = '1';
}
bool log_i(bool A,bool B)
{
if (A == 0 && B == 0)
return 0;
else
if (A == 0 && B == 1)
return 0;
else
if (A == 1 && B == 0)
return 0;
else
if (A == 1 && B == 1)
return 1;
}
bool log_abo(bool A, bool B)
{
if (A == 0 && B == 0)
return 0;
else
if (A == 0 && B == 1)
return 1;
else
if (A == 1 && B == 0)
return 1;
else
if (A == 1 && B == 1)
return 1;
}
bool log_ekvivalentnist(bool A, bool B)
{
if (A == 0 && B == 0)
return 1;
else
if (A == 0 && B == 1)
return 0;
else
if (A == 1 && B == 0)
return 0;
else
if (A == 1 && B == 1)
return 1;
}
bool log_implikatsiya(bool A, bool B)
{
if (A == 0 && B == 0)
return 1;
else
if (A == 0 && B == 1)
return 1;
else
if (A == 1 && B == 0)
return 0;
else
if (A == 1 && B == 1)
return 1;
}
//Логічні операції End
bool arykhmetyka(char *v_duzhkakh)
{
bool sifra[4];//1,2 - для значення 3,4 - для розгалуження
int lo = -1;//l - logichna o - operasiya
zaperechena(v_duzhkakh);
for (int i = 0; i < strlen(v_duzhkakh); i++)
{
switch (v_duzhkakh[i])
{
case '^':lo = 1; break;
case 'v':lo = 2; break;
case '<':
if (v_duzhkakh[i + 1] == '-' && v_duzhkakh[i + 2] == '>')
lo = 3;
case '-':
if (v_duzhkakh[i + 1] == '>')
lo = 4;
case (char)191:lo = 5; break;
case 49:
sifra[0] = 0,
sifra[3] = true; break;
case 50:
sifra[1] = 1,
sifra[4] = true; break;
}
if (sifra[3] == 1 && sifra[4] == 1)
{
switch (lo)
{
case 1:sifra[0] = log_i(sifra[0], sifra[1]); break;
case 2:sifra[0] = log_abo(sifra[0], sifra[1]); break;
case 3:sifra[0] = log_ekvivalentnist(sifra[0], sifra[1]); break;
case 4:sifra[0] = log_implikatsiya(sifra[0], sifra[1]); break;
}
lo = -1;
sifra[3] == true;
sifra[4] == false;
}
}
return sifra[3];
}
bool Diyi()
{
char pochatok = -1, kinets = -1;
for (int i = 0; i < strlen(priclad); i++)
{
if (priclad[i] == '(')
pochatok = i;
}
for (int i = 0; i < strlen(priclad); i++)
{
if (priclad[i] == ')')
{
kinets = i;
break;
}
}
char *v_duzhkakh = new char[(kinets - pochatok) + 2];
strcpy(v_duzhkakh, &priclad[pochatok + 1]);
v_duzhkakh[kinets - 1 - pochatok] = '\0';
bool znachena = arykhmetyka(v_duzhkakh);
char *priclad_cpy = new char[strlen(priclad)+1];
strcpy(priclad_cpy, priclad);
if (pochatok>0 && kinets > 0)
{
if (znachena == 1)
priclad[pochatok] = '1';
else
priclad[pochatok] = '0';
priclad[pochatok + 1] = '\0';
strcat(priclad, &priclad_cpy[kinets+1]);//tobto \ (\ - znk diy, \ - znk)
pochatok = -1;
kinets = -1;
return true;
}
}
int main()
{
int kilkict_struct = Scan();
ScanModernizator();
Prysvoyennya_znachennya(kilkict_struct);
while (Diyi() == true);
printf(" = %s", priclad);
std::cout<<" = "<< arykhmetyka(priclad);//?
getch();
return 0;
}
В мене сталось щось не зрозуміле bool arykhmetyka повертає 204 коли я пишу такій приклад q25(r4(p25q3r)) <enter> p=0,q=0,r=1 <enter> . Хіба може bool повертати 204 ?
Дальше НЕ важлива інформація Програму я пишу для себе "Математична логіка - чи є вірне висловлювання" тому там присутні пояснення які зрозумію напевне тільки я і одночасно printf i cout тому що я цю програму хочу запустити на планшеті я найшов спеціальний компілятор а в ньому немає iostream.