Вычитание мин из двумерного массива - PullRequest
1 голос
/ 17 марта 2020

Итак, я пытаюсь прочитать двумерный массив из файла, найти наименьшее число в этом массиве и затем вычесть это число из каждого элемента в массиве. мой файл "ola4.dat" содержит: 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Я сделал файл, чтобы было легко заметить, что он работает, потому что он должен печатать 0 и все 1. По какой-то причине мой вывод: 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Может кто-нибудь сказать мне, где я иду не так?

Спасибо

#include <iostream>
#include <iomanip> 
#include <fstream>

using namespace std; 

int main ()
{

   int numbers[5][10]; //array
   int count 0; 
   ifstream myIn; //file name for ola4.dat
   int lowest; 

   myIn.open("ola4.dat"); 

//loop to read in 2D array
   for(int i = 0; i < 5; i++){
      for(int j = 0; j < 10; j++){

           myIn >> numbers[i][j]; 
         }
    }

    lowest = numbers[0][0]; //setting lowest to first element in array 

//loop to find lowest 
    for (int i = 0; i <5; i++){

       for (int j = 0; j < 10; j++){

           if(numbers[i][j] < lowest)
            lowest = numbers[i][j]; 
          }
     }

//loop to subtract lowest from each element in the array
    for (int i = 0; i <5; i++){

        for (int j = 0; j < 10; j++){

           numbers[i][j] - lowest; 
          }
     }

//loop to print each element in the array
    for (int i = 0; i <5; i++){

       for (int j = 0; j <10; j++){

           cout << numbers[i][j] <<' '; 
          }
       cout << endl; 
    } 

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Линия

numbers[i][j] - lowest; 

не делает то, что вы хотите сделать. Он просто оценивает термин и отбрасывает его.

Вам нужно

numbers[i][j] -= lowest; 

или

numbers[i][j] = numbers[i][j] - lowest; 

Я бы предложил использовать первую форму. Это проще и менее подвержено ошибкам.


Мне не понятно, почему вы получите только 5 чисел на строку в выходных данных. Вы должны получить 10 номеров в строке.

0 голосов
/ 17 марта 2020

Попробуйте это ниже:

#include <iostream>
#include <iomanip> 
#include <fstream>

using namespace std; 

int main ()
{

   int numbers[5][10]; //array
   int count 0; 
   ifstream myIn; //file name for ola4.dat
   int lowest; 

   myIn.open("ola4.dat"); 

//loop to read in 2D array
   for(int i = 0; i < 5; i++){
      for(int j = 0; j < 10; j++){

           myIn >> numbers[i][j]; 
         }
    }

    lowest = numbers[0][0]; //setting lowest to first element in array 

//loop to find lowest 
    for (int i = 0; i <5; i++){

       for (int j = 0; j < 10; j++){

           if(numbers[i][j] < lowest)
            lowest = numbers[i][j]; 
          }
     }

//loop to subtract lowest from each element in array
    for (int i = 0; i <5; i++){

        for (int j = 0; j < 10; j++){

           numbers[i][j] -= lowest; 
          }
     }

//loop to print each element in array
    for (int i = 0; i <5; i++){

       for (int j = 0; j <10; j++){

           cout << numbers[i][j] <<' '; 
          }
       cout << endl; 
    } 
...