如何将此C ++更改为C. [英] How can I change this C++ to C

查看:88
本文介绍了如何将此C ++更改为C.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include<stdio.h>
#include<string>
#include<iostream>

using namespace std;

const int SIZE = 6;

// parse one equation
void Equation(string line, double coefRow[], double& coefB, string& coefVal){

    int len = int(line.length());
    bool firstItem = true;
    int j=0, m=0;
    coefVal = " ";
    
    string eq = "", item="";
    for (int i = 0; i &lt; len; i++){

        // the case like +x or -x in the start of the line
        if (line[i] == '+' || line[i] == '-'){
            if (isalpha(line[i + 1])){
                coefVal += line[i + 1];
                coefRow[j++] = (line[i] == '+') ? 1. : -1.;

                i++;
                continue;
            }
        }

        // the  last coefficient and the coefficient after the sign "="
        if (line[i] == '='){
                coefRow[j++] = atof(item.c_str()); // the  last coefficient
                item = "";
                for (int l = i + 1; l &lt; len; l++)
                    item += line[l];
                coefB = atof(item.c_str());  // the coefficient after the sign "="
                break;
            }

        if (isalpha(line[i])){
                if (firstItem){ // the case like x  in the start of the line
                firstItem = false;
                coefRow[j++] =  1.;
                }
                else coefRow[j++] = atof(item.c_str()); // the coefficient after the sign "+" or "-"
                item = "";
                m = 0;
                coefVal += line[i];
                firstItem = false;
                continue;
            }
        
        // the case when the  current symbol is not letter or sign (digit and decimal)
        if (m&gt;8)cerr &lt;&lt; "The maximum length of coefficients &gt;8\n";
                item += line[i];
                m++;
                firstItem = false;
        }

    
    
}

//Recursive function for the determinant calculation
double Determinant(double A[SIZE][SIZE], int size){

    double res = 0;
    if (size == 2)return A[1][1];  // real matrix size =1
    if (size == 3)return A[1][1] * A[2][2] - A[2][1] * A[1][2]; // real matrix size=2

    // use the first column and the new matrix with  size=size-1
    int newSize = size - 1;
    double NewA[SIZE][SIZE];
    for (int i = 1; i&lt;size;&gt;      for (int j = 1; j &lt; newSize; j++){
            for (int k = 1; k &lt; newSize; k++)
                if (k &gt;= i) NewA[j][k] = A[j+ 1][k + 1];
                else NewA[j][k] = A[j + 1][k ];
        }
        int p = (i % 2) ? 1:-1;
        res += p * A[1][i] * Determinant(NewA, newSize); //  recursive call function with smaler size
    }
        return res;
}

// Cramer's rule
void Solve(double A[SIZE][SIZE], double b[SIZE], double sol[SIZE], int size){

    double temp[SIZE][SIZE], det;
    

    //call function for the determinant calculation
    det = Determinant(A, size);


    for (int j = 1; j &lt; size; j++){


        //temp = A
        // copy A to temp
        for (int k = 1; k &lt; size; k++)
            for (int l = 1; l &lt; size; l++)
                temp[k][l] = A[k][l];


        // replace column number j to new values (b)
        for (int i = 1; i &lt; size; i++)
            temp[i][j] = b[i];
        
        /* print for the program testing 
        cout &lt;&lt; "\ntemp: \n";
            for (int k = 1; k &lt; size; k++){
                for (int l = 1; l &lt; size; l++)
                    cout &lt;&lt; temp[k][l] &lt;&lt; " ";
                cout &lt;&lt; endl;
            }
            cout &lt;&lt; "det(temp)=" &lt;&lt; Determinant(temp, size) &lt;&lt; endl;
        */  

        //the solution of the system
        sol[j] = Determinant(temp, size) / det;

    }

}



int  main(){
// Tests for the program
// string line[] = { "1578x+2345y+8452z=467", "6543x+2348y+9873z=7654", "4230x+6740y+5433z=4546" }; // size = 3
// string line[] = {"78x-45y+52z=7", "43x+48y-73z=54", "30x+40y+33z=46"}; // size = 3
// string line[] = {"50a+37b+c=-44.39", "43a+39b+c=-45.31", "52a+41b+c=-44.96"}; //size = 3
// string line[] = { "a+0b+0c=-44.39", "0a+b+0c=-45.31", "0a+0b+c=-44.96" }; //size = 3
// string line[] = {"2.25x+2.5y+4z+3t=0.5", "0.25x+42y+3.1z+0t=1.33", "4.2x+11y+0z+3t=1.5", "10x+3.2y+0z+2t=1"};  //size = 4
    string row, coefVals;
    double coefRow[SIZE], coefB;
    int i, j, size;
    double det;
    double A[SIZE][SIZE],  b[SIZE], sol[SIZE];

        do{
            cout &lt;&lt; "Number of Input equations (minimum 1 ~ maximum 5): ";
            cin &gt;&gt; size;
        } while (size &lt; 1 || size &gt; 5);
        
    cout &lt;&lt; "Please, enter the " &lt;&lt; size++ &lt;&lt; " equations \n"
         &lt;&lt; "(Equations to be entered as strings, without spaces)\n";


    for (i = 1; i &lt; size; i++){
    cin &gt;&gt; row; //
    //row=line[i - 1]; // for tests(instead input lines)
    Equation(row, coefRow, coefB, coefVals);
    for (j = 1; j &lt; size; j++)
                A[i][j] = coefRow[j - 1];
        b[i] = coefB;
    }



    cout &lt;&lt; "\nA: \n";
    for (i = 1; i &lt; size; i++){
        for (j = 1; j &lt; size; j++)
            cout &lt;&lt; A[i][j] &lt;&lt; " ";
        cout &lt;&lt; endl;
        }

    cout &lt;&lt; "\nb: \n";
    for (i = 1; i &lt; size; i++)
        cout &lt;&lt; b[i] &lt;&lt; endl;



    cout &lt;&lt; "\nVariables: \n";
    for (i = 1; i &lt; size; i++)
        cout &lt;&lt; coefVals[i] &lt;&lt; endl;



    cout &lt;&lt; "\nDeterminant= ";


    det = Determinant(A, size);
    cout &lt;&lt; det;
    if (det != 0){
        Solve(A, b, sol, size);
        cout &lt;&lt; "\nSolution: \n";
        for (i = 1; i &lt; size; i++)
            cout &lt;&lt; sol[i] &lt;&lt; endl;
    }

    else
        cout &lt;&lt; "\nSystem has not solution ";


    cin.get();
    cin.get();
    
return 0;
}





我的尝试:



这是我的最后一个项目,我无法将其改为c如此困难所以如果任何人可以帮助



What I have tried:

Its my final project and i couldn't change it to c its so difficult so if any one can help

推荐答案

delete
using namespace std;



用printf替换cout


replace "cout" with "printf"


在维基百科中读取兼容性的C和C ++ 文章来理解这个问题。



编译代码并修复编译器错误。最多的是不允许的对象的排序和使用。所以你需要使用char数组......
Read in the wikipedia the Compatibility of C and C++ article to understand that issue.

Compile the code and repair the compiler bugs. The most will be the ordering and the use of objects which arent allowed. So you need to work with char arrays...


看起来像是回到C / C ++基础知识的瓦片。

C编程语言 - 维基百科,免费的百科全书 [ ^ ]

https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf [ ^ ]

http://www.ime.usp.br/~pf/Kernighan-Ritchie/C-Programming-Ebook.pdf [ ^ ]
Looks like it is tile to go back to C/C++ basics.
The C Programming Language - Wikipedia, the free encyclopedia[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~pf/Kernighan-Ritchie/C-Programming-Ebook.pdf[^]


这篇关于如何将此C ++更改为C.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆