| 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;
 }
 
 |