在这个程序中,我需要得到 线性系统 的 解 并且这个系统有 n 变量和 n 方程。我需要在文本文件 (.txt) 中提取方程的系数并将它们放在矩阵上。文本文件的第一行有一个数字,即系统中方程的数量。其他行,有方程。
例如,如果我有以下文本文件:
3
2x - 3y = 0
4x + z = 12
5y - 6z = 10
具有系数的矩阵将是:|2 -3 0 0|
|4 0 1 12|
|0 5 -6 10|
我知道如何得到线性系统的解,但我怎样才能得到系统的系数(没有库)?我尝试了只从字符串(字符 vector )读取数字的函数,但如果系数是字母(返回 0)或不存在,它们将不起作用。规则:
代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAXCHAR 1000
#include "LinkedList.c"
//in the future use STRTOK e SSCANF (SPRINTF maybe)
int main() {
FILE *fp;
char str[MAXCHAR];
int character;
int c = 0;
char fileaddress[50];
char *cp;
char *variaveis;
char *p;
int quant = 0;
int numDeEquacoes = 0;
printf("Enter the address of the file you want to open: ");
gets(fileaddress);
printf(fileaddress);
//int coeficientes[3][3];
fp = fopen(fileaddress, "r");
if (fp == NULL){
printf("\n");
printf("Cannot open file %s",fileaddress);
return 1;
}
printf("\n");
while (fgets(str, MAXCHAR, fp) != NULL)
{
quant++;
if(quant==1)
{
numDeEquacoes = (str[0] - '0');
}
printf("%s", str);
//gets(str, sizeof(str), stdin);
printf("Variables of equation: ");
for(cp=str; *cp; ++cp)
if(isalpha(*cp))
{
printf("%c", *cp, "\n");
//scanf("%c", )
}
//THE CODE THAT RESULTS IN ONLY NUMBERS
while (*p)
{
if ( isdigit(*p) || ( (*p=='-'||*p=='+') && isdigit(*(p+1))) )
{
long val = strtol(p, &p, 10);
printf("%ld\n Coefficients:", val, "\n");
}
else
{
p++;
}
}//ENDS HERE
//printf("Variaveis: ", variaveis);
//printf("\n");
//variaveis = strstr(str);
//printf(variaveis);
}
fclose(fp);
if(quant-1!=numDeEquacoes)
{
printf("The number of equations is wrong!\n");
printf("The number of equations is: %i", numDeEquacoes,"\n");
printf("The variable quant is: %i", quant,"\n");
return 0;
}
//int coeficientes[numDeEquacoes][numDeEquacoes];
//printf("coef:",coeficientes);
return 0;
}
最佳答案
您应该读取信号(+ 或 -)并乘以系数。如果信号为+,则乘以+1,否则乘以-1。如果没有变量(或字母),则系数为 0。
关于c - 如何获得线性方程的系数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52664490/