Solving a Matrix with Elimination: Inputting the Right Number of Values

In summary, a user is seeking help with their code for elimination on a matrix. The code uses scanf() to input numbers on a matrix, but the user is having a problem where they need to input 4 times at the first row even though they only put 3 scanf calls. They are looking for a way to make it only require 3 inputs. Suggestions are made to remove the "\n" in the scanf calls and use looping features instead of multiple repeated statements.
  • #1
darwinharianto
42
0

Homework Statement


Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    int i,j,k,n;
    float A[3][4];
    float x[3],c,sum=0;
    n=2;
    printf("first row\n");
    scanf("%f",&A[0][0]);
    scanf("%f",&A[0][1]);
    scanf("%f\n",&A[0][2]);
    printf("second row\n");
    scanf("%f",&A[1][0]);
    scanf("%f",&A[1][1]);
    scanf("%f\n",&A[1][2]);
    printf("third row\n");
    scanf("%f",&A[2][0]);
    scanf("%f",&A[2][1]);
    scanf("%f\n",&A[2][2]);
    printf("designated value\n");
    scanf("%f",&A[0][3]);
    scanf("%f",&A[1][3]);
    scanf("%f\n",&A[2][3]);
    for(j=0; j<=n; j++)
    {
        for(i=0; i<=n; i++)
        {
            if(i>j)
            {
                c=A[i][j]/A[j][j];
                for(k=0; k<=n+1; k++)
                {
                    A[i][k]=A[i][k]-c*A[j][k];
                }
            }
        }
    }
    x[n]=A[n][n+1]/A[n][n];
    for(i=n-1; i>=0; i--)
        {
               sum=0;
               for(j=i+1; j<=n; j++)
                 {
                 sum=sum+A[i][j]*x[j];
                  }
              x[i]=(A[i][n+1]-sum)/A[i][i];
         }

    printf("\n X = %f",x[0]);
    printf("\n Y = %f",x[1]);
    printf("\n Z = %f",x[2]);
   
      return(0);
}
i use this code for elimination on matrix, but i need to input 4 times at the first row even though i only put 3 scanf
what should i do to make it only need 3 input
thanks for replying
 
Physics news on Phys.org
  • #2
Does your problem statement require the use of scanf() ? You may know that scanf returns an int - you have to compare the int returned against EOF (# a define in stdio.h). This checks for a matching failure. Also note that what is already in the keyboard buffer carries over to the next scanf call, e.g., the return key.

Decent programs try to avoid having multiples of the same statement over and over again. Why? Because it is harder to make changes in 20 lines of code than to change (and understand) 5 lines that do the same. Think loop.
 
  • #3
Try removing the "\n" in the scanf calls, for example scanf("%f",&A[0][2]); without the "\n". scanf() is supposed to skip past whitespace on each call.
 
  • Like
Likes darwinharianto
  • #4
jim mcnamara said:
Does your problem statement require the use of scanf() ? You may know that scanf returns an int - you have to compare the int returned against EOF (# a define in stdio.h). This checks for a matching failure. Also note that what is already in the keyboard buffer carries over to the next scanf call, e.g., the return key.

Decent programs try to avoid having multiples of the same statement over and over again. Why? Because it is harder to make changes in 20 lines of code than to change (and understand) 5 lines that do the same. Think loop.
yes i need the scanf because i have to input numbers on the matrix

rcgldr said:
Try removing the "\n" in the scanf calls, for example scanf("%f",&A[0][2]); without the "\n". scanf() is supposed to skip past whitespace on each call.
thank you
when i removed the "/n" it does solve the problem
 
  • #5
C has looping features.

scanf("%f",&A[0][0]);
scanf("%f",&A[0][1]);
scanf("%f\n",&A[0][2]);
// through magic, increase a number by 1.
scanf("%f",&A[1][0]);
scanf("%f",&A[1][1]);
scanf("%f\n",&A[1][2]);
// through magic, increase a number by 1.
scanf("%f",&A[2][0]);
scanf("%f",&A[2][1]);

Is really ugly. What if you had a 4 x 4 ? 6 x 6 ?
 
  • Like
Likes darwinharianto
  • #6
mafagafo said:
C has looping features.

scanf("%f",&A[0][0]);
scanf("%f",&A[0][1]);
scanf("%f\n",&A[0][2]);
// through magic, increase a number by 1.
scanf("%f",&A[1][0]);
scanf("%f",&A[1][1]);
scanf("%f\n",&A[1][2]);
// through magic, increase a number by 1.
scanf("%f",&A[2][0]);
scanf("%f",&A[2][1]);

Is really ugly. What if you had a 4 x 4 ? 6 x 6 ?
so it is better if i scanf the "n" and put it into a loop
if

so my loop will be like this?
Code:
for (i=0; i<=n; i++)
          for (j=0; j<=n; j++)
          scanf("%f";&A[i][j][I]);
for my input?[/I]
 
  • #7
Supposing you code works (not going to compile and check for you), yes, this is the way to go. See how simpler and easier to refactor it got?

Note that if n is the dimension of the square matrix (3, for instance), you want i < n as 3 would refer to the fourth row or column.

Good luck.
 
  • #8
mafagafo said:
Supposing you code works (not going to compile and check for you), yes, this is the way to go. See how simpler and easier to refactor it got?

Note that if n is the dimension of the square matrix (3, for instance), you want i < n as 3 would refer to the fourth row or column.

Good luck.
yes
sorry about that
i forgot it go n-1
thanks
 
  • #9
mafagafo said:
Supposing you code works (not going to compile and check for you), yes, this is the way to go. See how simpler and easier to refactor it got?

Note that if n is the dimension of the square matrix (3, for instance), you want i < n as 3 would refer to the fourth row or column.

Good luck.
okay i have done it all, but i can't display them at the end of the code
i use this
Code:
    for(i=0; i<n+1; i++)
    printf("\n X[i] = %f",x[i]);
how can i make it display x1, x2 ... xn ?
 
  • #10
Supposing that from a bidimensinoal array you want something like:
[tex]\begin{array}{cc} a_{1, 1} & a_{1, 2} \\ a_{2, 1} & a_{2, 2} \end{array}[/tex]

You should iterate i and j and get
Code:
a[j][i]

Placing ", " between terms on the same row (same value of j) and "\n" after the last term of a row.
 
  • #11
mafagafo said:
Supposing that from a bidimensinoal array you want something like:
[tex]\begin{array}{cc} a_{1, 1} & a_{1, 2} \\ a_{2, 1} & a_{2, 2} \end{array}[/tex]

You should iterate i and j and get
Code:
a[j][i]

Placing ", " between terms on the same row (same value of j) and "\n" after the last term of a row.
maybe you get me wrong,
i mean i want to display X1 X2, ... Xn
not the full matrix
so the results will be like
X1 = ...
X2 = ...
X3 = ...
X4 = ...
for 4x4 matrix
 
  • #12
Yes, I got you wrong. So why are you having trouble with that?

C:
for (int i = 0; i < 4; i++) {
  printf("X%d = %d\n", i + 1, a[row_index - 1][I]);
}

Is this what you want?
 
  • Like
Likes darwinharianto
  • #13
mafagafo said:
Yes, I got you wrong. So why are you having trouble with that?

C:
for (int i = 0; i < 4; i++) {
  printf("X%d = %d\n", i + 1, a[row_index - 1][I]);
}

Is this what you want?
ahh, yes
thank you so much
 
  • #14
No problem. Are you new to programming? Why are you using C?
 
  • #15
mafagafo said:
No problem. Are you new to programming? Why are you using C?
yeah i am new to C
just a project for my test
 

1. What is the purpose of solving a matrix with elimination?

The purpose of solving a matrix with elimination is to simplify a system of linear equations by using elimination operations to reduce the matrix to a triangular form. This makes it easier to find the solution to the system of equations.

2. How do I input the right number of values into a matrix for elimination?

To input the right number of values into a matrix for elimination, you must first identify the number of variables in the system of equations. This will determine the size of the matrix. Then, you must arrange the coefficients of each variable in each equation into rows and columns of the matrix, making sure to include any constants as well.

3. Can I solve a matrix with elimination if it has more than two unknown variables?

Yes, you can solve a matrix with elimination even if it has more than two unknown variables. However, the process becomes more complex as the number of unknowns increases, and it may require more elimination steps to reach the solution.

4. What is the difference between forward and backward elimination in matrix solving?

Forward elimination is the process of using elimination operations to reduce the matrix to a triangular form from top to bottom. Backward elimination, on the other hand, is the process of using elimination operations to further reduce the triangular form and solve for the values of the unknown variables.

5. Are there any common mistakes to avoid when solving a matrix with elimination?

One common mistake to avoid when solving a matrix with elimination is not performing the same elimination operations on each equation in the matrix. It is important to keep track of which operations have been performed on each equation to avoid errors in the final solution.

Similar threads

  • Engineering and Comp Sci Homework Help
Replies
3
Views
888
  • Engineering and Comp Sci Homework Help
Replies
17
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
3
Views
670
  • Engineering and Comp Sci Homework Help
Replies
12
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
19
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
4
Views
928
  • Engineering and Comp Sci Homework Help
Replies
1
Views
8K
  • Engineering and Comp Sci Homework Help
Replies
9
Views
3K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
3K
  • Engineering and Comp Sci Homework Help
Replies
7
Views
1K
Back
Top