Filippo9669 Temat założony przez niniejszego użytkownika |
odwzorowanie macierzy » 2015-12-16 03:10:46 cześć. piszę taki oto program: tworzy on "płytkę" trapezową (równoramienną) w oparciu o dane użytkownika - liczbę elementów m w pierwszym wierszu oraz liczbę k wierszy. na tej płytce rozmieszczone są punkty, np dla m = 3 i k = 4. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 i teraz tak. użytkownik wybiera dowolny punkt na tej płytce. następnie tworzona jest macierz kwadratowa o wierszach (tutaj) od 1 do 24. wybrany punkt, powiedzmy 12, "styka się" z punktami: 6, 11, 13, 20 - w kolumnach odpowiadających tym punktom wpisujemy liczby 1 (w wierszu numer 12), natomiast w kolumnie z 12 wartość -4. dla dowolnego punktu zadanego przez użytkownika, dowolnego m i k program ma wyświetlić wiersz macierzy z punktem podanym przez użytkownika. program działa mi połowicznie, wyświetla dla większości, ale np. dla 1, 3, 4, 8, czyli tych będącymi ramionami trapezu - już nie. wklejam kod poniżej. z góry ogromne dzięki za pomoc. #include <iostream> #include <cstdlib> #include <conio.h>
using namespace std;
void utwplytka( int k, int m, int ** plytka ) { int i; for( i = 0; i < k; i++ ) { plytka[ i ] = new int[ m ]; m += 2; } cout << endl; }
void wysplytka( int i, int j, int k, int m, int ** plytka ) { int ile; int poz = 0; for( i = 0; i < k; i++ ) { for( ile = k - i; ile > 0; ile-- ) { cout << " "; } for( j = 0; j < m; j++ ) { poz++; plytka[ i ][ j ] = poz; cout << plytka[ i ][ j ] << " "; } m += 2; cout << endl; } }
int zliczanie( int m, int k ) { int i, suma = 0; for( i = 0; i < k; i++ ) { suma = suma + m; m = m + 2; } return suma; }
void utwmacierz( int suma, int ** macierz ) { int i; for( i = 0; i < suma; i++ ) { macierz[ i ] = new int[ suma ]; } cout << endl; }
void zermacierz( int suma, int ** macierz ) { int i, j; for( i = 0; i < suma; i++ ) { for( j = 0; j < suma; j++ ) { macierz[ i ][ j ] = 0; } cout << endl; } }
int punkt( int nr, int m, int m1, int ** plytka ) { int wi = 0; if( nr <= m ) { wi = 0; } while( nr > m ) { if( m1 % 2 != 0 ); { m = m + 2 * wi - 1; } if( m1 % 2 == 0 ); { m = m + 2 * wi; } wi++; } return wi; }
int oblroznica( int nr, int m1, int wi, int ** plytka ) { int roznica; int sum = 0; sum =( wi - 1 ) * 2 + m1; roznica = sum - 1; return roznica; }
void uzumacierz( int m, int ** macierz, int roznica, int nr ) { macierz[ nr - 1 ][ nr - 2 ] = 1; macierz[ nr - 1 ][ nr - 1 ] = 4; macierz[ nr - 1 ][ nr ] = 1; macierz[ nr - 1 ][ nr - roznica - 1 ] = 1; macierz[ nr - 1 ][ nr + roznica + 1 ] = 1; }
void wysmacierz( int suma, int ** macierz, int nr ) { int i, j; cout << " "; for( i = 0; i < suma; i++ ) { if( i < 8 ) cout << i + 1 << " "; else cout << i + 1 << " "; } cout << endl << endl; cout << nr << " "; for( i = 0; i < suma; i++ ) { cout << macierz[ nr - 1 ][ i ] << " "; } }
int main() { int k, m, i, j, nr, ilew, roznica, m1; int ** plytka; int ** macierz; cout << "Witaj! przedstawiam program przedstawiajacy objecie plytki. " << endl; cout << "Podaj liczbe wierszy: "; cin >> k; plytka = new int *[ k ]; cout << "Podaj liczbe komorek w pierwszym wierszu: "; cin >> m; m1 = m; utwplytka( k, m, plytka ); wysplytka( i, j, k, m, plytka ); int ile = zliczanie( m, k ); macierz = new int *[ ile ]; cout << "Podaj prosze numer punktu: "; cin >> nr; utwmacierz( ile, macierz ); zermacierz( ile, macierz ); punkt( nr, m, m1, plytka ); oblroznica( nr, m, punkt( nr, m, m1, plytka ), plytka ); uzumacierz( m, macierz, oblroznica( nr, m, punkt( nr, m, m1, plytka ), plytka ), nr ); wysmacierz( ile, macierz, nr ); for( int i = 0; i < k; i++ ) { delete[] plytka[ i ]; delete[] macierz[ i ]; } getch(); return 0; }
|