Prośba o sprawdzenie kodu sortowania macierzy 10x10 metodą wybierania

0

Witajcie. Doszedłem już do tego jak posortować macierz 10x10 metodą wybierania. Napisałem kod. Code::Blocks nie pokazuje żadnych błędów w kodzie, lecz podczas kompilowania wyskakują na konsoli wartości iloczynu elementów każdej kolumny a później od razu program się sypie. Po prostu wyskakuje że program przestał działać prawidłowo i trzeba go zamknąć. Wiem, że jest to jakiś malutki błąd w kodzie dzięki któremu program się sypie, ale za chiny ludowe nie umiem dojść co jest nie tak. Proszę o pomoc :)

#include<fstream>
#include<iostream>
#include<iomanip>
#include<conio.h>
using namespace std;

int main()
{
const int n=10, m=10; //wymiary macierzy
int M[n][m]; //deklaracja macierzy
int tablica[10];
fstream file;
//------------------------------------------------------------------
//odczytanie macierzy z pliku tekstowego
file.open("macierz_do_sortowania.txt",ios_base:: in);
for (int i=0;i<n;i++)
  for (int j=0; j<m; j++)
        file>>M[i][j];
file.close();
//------------------------------------------------------------------
//Przejście z tablicy dwuwymiarowej do jednowymiarowej
int t = 0;
for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            tablica[t] = M[i][j];
            t++;
        }
    }
//------------------------------------------------------------------
//sortowanie macierzy metoda wybierania
 int max;
 for (int i = 0; i < 100; i++)
{
    max = i;
    for (int j = i + 1; j < 100; j++)
        {
            if (tablica[j] > tablica[max])
                {
                    max = j;
                }
        }
        swap(tablica[max], tablica[i]); //zamiana maksymalnego elementu tablicy z elementem i
}
//------------------------------------------------------------------
//zamiana tablicy jednowymiarowej spowrotem na dwuwymiarową
 int x=0;
 for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
        {
            M[i][j] = tablica[x];
            x++;
        }
}
//------------------------------------------------------------------
//iloczyn elementów ka¿dej kolumny
long long int iloczyn[10];

for(int i = 0; i < m; i++)
    iloczyn[i] = 1;

for (int i=0; i<m; i++)
{
    for (int j=0; j<n; j++)
        {
            iloczyn[i] *= M[j][i];
        }
}

for (int i=0; i<m; i++)
    cout << iloczyn[i] << endl;
//------------------------------------------------------------------
//zapisywanie do pliku
file.open("wynik_sortowania.txt",ios_base::out | ios_base::trunc);

for (int i=0;i<n;i++)
{
  for (int j=0; j<m; j++)
        file<<left<<setw(10)<<M[i][j]<<" ";
        file<<endl;
}
cout<<endl;
for (int k=0; k<m; k++)
{
  file<<left<<setw(10)<<iloczyn[k]<<"   ";
  file<<endl;
}
cout<<endl;
file.close();
//------------------------------------------------------------------
//szukanie elementu z krotnoœci¹ 8
file.open("elementy_z_8.txt",ios_base::out | ios_base::trunc);

for(int i = 0; i<m;i++)
{
    for(int j = 0; j<m; j++)
    {
        if((int)M[i][j]%8 == 0)
        {
            cout<<i<<" "<<j<<" "<<M[i][j]<<endl;
            file<<left<<setw(10)<<i<<" "<<j<<" "<<M[i][j]<<" ";
            file<<endl;
        }
    }
}
cout<<endl;
file.close();
//------------------------------------------------------------------
//wyswietlanie na konsoli
for (int i=0;i<n;i++)
{
  for (int j=0; j<m; j++)
       cout<<M[i][j]<<"   ";
  cout<<endl;
}
getch();
return (0);
}
 
0

Ten plik ''"wynik_sortowania.txt"' na pewno jest tam gdzie powinien byc?;p

0

debugger do reki i jazda

Nikt tego za Ciebie nie zrobi ;)

0

FAŁSZYWY ALARM xd po prostu tablica była źle zaimplementowana :p zamiast int tablica[10]; miało byc int tablica[100]; :p

2
int tablica[10];
...
int t = 0;
for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        tablica[t] = M[i][j];         // t osiąga wartości [0,81)
...
for (int i = 0; i < 100; i++)
{
    max = i;
    for (int j = i + 1; j < 100; j++)
    {
        if (tablica[j] > tablica[max])

To ta tablica ma 10 czy 100 elementów?

3

Tak na marginesie to masz pomieszanie z poplątaniem. Raz używasz w forach m,n raz m,m innym razem na sztywno 10 czy 100. Raz odwołujesz się M[i][j] a raz M[j][i].

1 użytkowników online, w tym zalogowanych: 0, gości: 1