#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
const int MAX = 100;
struct monom
{
bool sign;
char incl[10];
};
bool plusminus(char a[])
{
int i;
for ( i = 0; i < strlen(a); i++)
{
if (a[i] = '-') return true;
else return false;
}
}
int analys1(char a[])//анализирует моном и выдает номер в итоговом массиве коэфицентов
{
bool x = false;
int i, answ, c;
for (i = 0; i < strlen(a); i++) if (a[i] == 'x')
{
x = true;
c = i;
}
if (x = false)//если нет х, т.е свободный член
answ = 0;
else
{
if ((c == strlen(a)) || (a[c + 1] != '^') || (a[c + 1] != 'x')) answ = 1;
if ((a[c + 1] == 'x') ||
((a[c + 1] == '^')&& (a[c + 1] == '2'))) answ = 2;
if (((a[c + 1] == 'x') && (a[c + 2] == 'x')) ||
((a[c + 1] == '^') && (a[c + 2] == '3')) ||
((a[c + 1] == '^') && (a[c + 2] == '2') && (a[c + 3] == 'x')) ||
((a[c + 1] == 'x') && (a[c + 2] == '^') && (a[c + 3] == 'x'))) answ = 3;
}
}
int analys2(char a[])//анализирует моном и выдает коэффицент в итоговом массиве коэфицентов
{
bool x = false;
int i, answ;
char c[]="/////";
for (i = 0; i < strlen(a); i++) if (a[i] == 'x') x = true;
if (x = false)//если нет х, т.е свободный член
answ = atoi(a);
else
{
while (a[i + 1] != 'x')
{
c[i] = a[i];
}
answ = atoi(c);
}
}
int main()
{
int COEF[5], i, j,k; //коэфициенты при соотв степенях х
monom A_plus[6], A_minus[6];
char str[] = "45+x4-sss+4";
printf("razdelenie stroki \"%s\" na lexemy.", str);
char *pch_plus = strtok(str, "+"); //во втором параметре указаны разделители (пробел, запятая, точка)
printf("\nlexemy:");
for (i = 0; i < 6; i++)
{
A_plus[i].sign = true;
A_minus[i].sign = true;
for (j = 0; j < 6; j++)
{
A_plus[i].incl[j] = 0; A_minus[i].incl[j] = 0;
}
}
for (i = 0; i < 6; i++) COEF[i] = 0;
i = 0;
while (pch_plus != NULL) //пока есть лексемы
{
printf("\n%s", pch_plus);
for (j = 0; j < strlen(pch_plus); j++)
{
A_plus[i].incl[j] = pch_plus[j];
}
pch_plus = strtok(NULL, "+");
i++;
}
printf("\n");
i = 0;
for (i = 0; i < 6; i++)
{
if (plusminus(A_plus[i].incl))//если в отделенном мономе есть минус
{
char *pch_minus = strtok(A_plus[i].incl, "-");
while (pch_minus != NULL) //пока есть лексемы
{
printf("\n%s", pch_minus);
for (k = 0; k < strlen(pch_minus); k++)
{
A_minus[j].incl[k] = pch_minus[k];
}
pch_minus = strtok(NULL, "-");
j++;
}
}
}
//отделение мономов с минусами
for (i = 0; i < 6; i++)
{
char *pch_minus = strtok(A_plus[i].incl, "-");
while (pch_minus != NULL) //пока есть лексемы
{
printf("\n%s", pch_minus);
for (k = 0; k < strlen(pch_minus); k++)
{
A_minus[j].incl[k] = pch_minus[k];
}
pch_minus = strtok(NULL, "-");
j++;
}
}
for (i = 0; i < 6; i++)//заполнение массивов коэфицентов
{
COEF[analys1(A_plus[i].incl)] = COEF[analys1(A_plus[i].incl)]+ analys2(A_plus[i].incl);
COEF[analys1(A_minus[i].incl)] = COEF[analys1(A_minus[i].incl)] + analys2(A_minus[i].incl);
}
for (i = 0; i < 6; i++)//печать массива мономов
{
for (j = 0; j < 6; j++)
{
printf("%c", A_minus[i].incl[j]);
}
printf("\n");
}
for (i = 0; i < 5; i++) //печать приведенного полинома
{
printf("%ix^3%ix^2%ix%i", COEF[3], COEF[2], COEF[1], COEF[0]);
}
getchar();
return 0;
}
/*
strncpy(m3, m1, 6); // не добавляет '\0' в конце строки
strcpy(m3, m1);
strncat(m3, m2, 5);
strcat(m3, m2);
strnset(m3, 'f', 7);
strset(m3, 'k');
*/
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.