eMatematikas Prisijunk Forumas Užduotys Testai Pradžia

C++ nelygines eilutes radimas dvimaciame masyve


Reikia pagalbos rasti didziausia ir maziausia reiksme kiekvienoje matricos nelygineje eiluteje:
#include <iomanip>
#include <iostream>
#include <conio.h>
#include <fstream>

using namespace std;

void skaitymas(int B[][30], int &x, int &y);
void radimas(int B[][30], int &x, int&y);
const int rib = 30;

int main()
{
    int B[rib][rib], x, y;
    skaitymas(B, x, y);
    radimas(B, x, y);
    _getch();
    return 0;
}

void skaitymas(int B[][30], int &x, int &y)
{
    ifstream data("dat.txt");
    data >> x >> y;
    cout  <<"\nPradinis, faile esantis, masyvas B[" << x << "," <<  y << "]\n" << endl;
    for (int i = 0; i < x; i++){
        for (int j = 1; j <= y; j++){
            data >> B[i][j];
            cout << setw(4) << B[i][j] << " ";
        }
        cout << endl;
    }
    data.close();
}

void radimas(int B[][30], int &x, int&y)
{
    ifstream data("dat.txt");
    data >> x >> y;
    for (int i = 0; (i < x) && (i%2 != 0); i++){  // rasti nelygines masyvo eilutes
        for (int j = 1; j <= y; j++){
            data >> B[i][j];
            cout << setw(4) << B[i][j] << " ";
        }
        cout << endl;
    }
    data.close();
}


Failo pavyzdys
3 5
  9    8 -55 7 981
1000 -1000  9 0 303
-100    0  0 0 500


for (int i = 0; (i < x) && (i%2 != 0); i++) - zinoma neveikia, bet kitaip neisgalvoju..

Turbūt norėjai parašyti kažką panašaus į:
for (int i = 0; i < rowNumber; i++) {
  if(i % 2 == 0){
    //nelyginė eilutė
  }
}


Bet geriau toks kodas:
for (int i = 0; i < rowNumber; i = i + 2) {...}
Šitas ciklas praeis pro 1, 3, 5, ... , 2n-1 matricos eilutes, t.y. pro visas nelygines (nepamiršk, kad masyvo nulinė eilutė yra matricos pirmoji eilutė).

void radimas(int B[][30], int &x, int&y)
{
    ifstream data("dat.txt");
    data >> x >> y;
    for(int i = 0; i < x; i=i+2){
        for (int j = 1; j <= y; j++){
            data >> B[i][j];
            cout << setw(4) << B[i][j] << " ";
        }
        cout << endl;
    }
    data.close();
}

bet
3 5
  9    8 -55 7 981
1000 -1000  9 0 303
-100    0  0 0 500

^ nuskaito tik pirmas dvi matricos eilutes :?

pakeista prieš 11 m

Na tai tau reikia nuskaityti visą matricą.

O tai ar for(int i = 0; i < x; i=i+2) ne visa faila ir skaito ?

Ciklas sukasi apie x/2 kartus, tad nuskaitai apie pusė failo.
Pakeisk
for(int i = 0; i < x; i=i+2)
į
for(int i = 0; i < x; i++)
Jei nesupranti ką daro programą, tai pabandyk ja paleisti savo galvoje ar ant popieriaus lapo su kokiais paprastais duomenimis ir atlik visus žingsnius pats :D .

Supratau, aciu :)

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »