Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Program który zamienia miejscami wiersze i kolumny

Ostatnio zmodyfikowano 2012-04-09 22:43
Autor Wiadomość
cmilak43
Temat założony przez niniejszego użytkownika
[C++] Program który zamienia miejscami wiersze i kolumny
» 2012-04-09 18:19:33
Witam
Jestem nowy więc przed wszystkim witam wszystkich kolegów (koleżanki też :D) programistów.

Zadanie: Program, który dla podanych danych z tablicy dwuwymiarowej zamienia miejscami wiersze i kolumny

Moje rozwiązanie:
C/C++
#include <iostream>
using namespace std;
void czytaj( int a[][ 10 ], int & m, int & n )
{
   
    cout << "Podaj ilosc kolumn: ";
    cin >> m;
    cout << "Podaj ilosc wierszy: ";
    cin >> n;
    cout << "Podaj liczby: ";
    for( int i = 0; i < m; i++ )
    {
        for( int j = 0; j < n; j++ )
             cin >> a[ i ][ j ];
       
    }
   
}
void zamien( int a[][ 10 ], int m, int n )
{
    int c;
    for( int i = 0; i < m; i++ )
    {
        for( int j = 0; j < n; j++ )
             c = a[ i ][ j ], a[ i ][ j ] = a[ j ][ i ], a[ j ][ i ] = c;
       
    }
    c = m;
    m = n;
    n = c;
}
void wyswietl( int a[][ 10 ], int m, int n )
{
    for( int i = 0; i < m; i++ )
    {
        for( int j = 0; j < n; j++ )
             cout << a[ i ][ j ] << " ";
       
        cout << "\n";
    }
}
int main()
{
    int m, n, a[ 10 ][ 10 ];
    czytaj( a, m, n );
    zamien( a, m, n );
    wyswietl( a, m, n );
}
Problem: zła kolejnosc liczb.Przy 3 kolumnach i 2 wierszach (wpisane liczby 1,2,3,4,5,6) wyswietla cos takiego
1 3
2 4
5 6
a powinno
1 2
3 4
5 6
Błąd na pewno jest banalny, dlatego prosiłbym o jakąś radę

                                                                                 Pozdrawiam
P-54182
Admixior
» 2012-04-09 18:38:39
Po uno Kolorowanie składni języka C++ jak umieszcza się kod.

Po drugie nie podoba mi się linijka w funkcji zamien()
C/C++
void zamien( int a[][ 10 ], int & m, int & n )
{
    int c;
    for( int i = 0; i < m; i++ )
    {
        for( int j = 0; j < n; j++ )
             c = a[ j ], a[ j ] = a[ j ], a[ j ] = c; //<--- czy tutaj nie powinno byc c=a[i],a[i]=a[j],a[i]=c;
       
    }
    c = m;
    m = n;
    n = c;
}
P-54183
akwes
» 2012-04-09 18:40:39
A ja mam pytanie, co tam w ogóle robią przecinki, zamiast średników?
P-54184
Admixior
» 2012-04-09 18:43:17
Co do przecinków nie ma problemu, wtedy 3 instrukcje zostaną wykonane w 1 pętli.
Sam tak nie raz piszę :)
P-54185
cmilak43
Temat założony przez niniejszego użytkownika
» 2012-04-09 18:56:28
noo teraz poprawiłem kod na forum...proszę zobaczcie jeszcze raz
P-54186
Admixior
» 2012-04-09 19:40:14
Napisałeś tak
Problem: zła kolejnosc liczb.Przy 3 kolumnach i 2 wierszach (wpisane liczby 1,2,3,4,5,6) wyswietla cos takiego

1 3
2 4
5 6

a powinno

1 2
3 4
5 6

Wg. mnie jak się wprowadzi coś takiego
1 2 3
4 5 6

To zamieniając powinno być
1 4
2 5
3 6

więc problemy są następujące:
funkcja czytaj()
C/C++
cout << "Podaj ilosc kolumn: ";
cin >> n;
cout << "Podaj ilosc wierszy: ";
cin >> m;

funkcja zmien()
powinna mieć w środkowej pętli
for(int j=i  ....

funkcja zmien()
powinna przyjmować referencję m oraz n.
Bo inaczej
C/C++
c = m;
m = n;
n = c;
nie ma sensu
P-54187
cmilak43
Temat założony przez niniejszego użytkownika
» 2012-04-09 20:04:52
z tymi liczbami to trafna uwaga.....zmieniłem wg. twoich wskazówek to w miejsce liczb 6 i 3 wstawiło jakieś ogromne liczby i dalej są nie po kolei....natomiast przy 2 kolumnach i 3 wierszach przestawia dobrze ale liczby są nie po kolei 
P-54191
Admixior
» 2012-04-09 20:07:46
nie za bardzo rozumiem o co chodzi.
Ja przerobiłem trochę kod.
W pętlach x - to kolumny , a y - to wiersze
C/C++
#include <iostream>
using namespace std;
void czytaj( int a[][ 10 ], int & m, int & n )
{
   
    cout << "Podaj ilosc kolumn: ";
    cin >> n;
    cout << "Podaj ilosc wierszy: ";
    cin >> m;
    cout << "Podaj liczby: ";
    for( int y = 0; y < m; y++ )
    {
        for( int x = 0; x < n; x++ )
             cin >> a[ y ][ x ];
       
    }
   
}
void zamien( int a[][ 10 ], int & m, int & n )
{
    int c;
    for( int y = 0; y < m; y++ )
    {
        for( int x = y; x < n; x++ )
             c = a[ x ][ y ], a[ x ][ y ] = a[ y ][ x ], a[ y ][ x ] = c;
       
    }
    c = m;
    m = n;
    n = c;
}
void wyswietl( int a[][ 10 ], int m, int n )
{
    for( int y = 0; y < m; y++ )
    {
        for( int x = 0; x < n; x++ )
             cout << a[ y ][ x ] << " ";
       
        cout << "\n";
    }
}
int main()
{
    int m, n, a[ 10 ][ 10 ];
    czytaj( a, m, n );
    zamien( a, m, n );
    wyswietl( a, m, n );
    cin.get();
    cin.get();
}


Zobacz czy ten kod działa jeśli nie to podaj na jakich przykładach

//PS o czymś jeszcze musiałem zapomnieć
P-54194
« 1 » 2 3
  Strona 1 z 3 Następna strona