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;
//tworzenie plytki
void utwplytka(int k, int m, int **plytka)
{
int i;
//przydzielenie dla każdego wiersza po m komórek
for(i = 0; i < k; i++)
{
plytka[i] = new int[m];
m += 2;
}
cout << endl;
}
//funkcja wyswietlajaca plytke
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;
}
}
//funkcja zliczajaca liczbe elementow na plytce
int zliczanie(int m, int k)
{
int i, suma = 0;
for(i = 0; i < k; i++)
{
suma = suma + m;
m = m + 2;
}
return suma;
}
//funkcja tworzaca macierz
void utwmacierz(int suma, int **macierz)
{
int i;
for(i = 0; i < suma; i++)
{
macierz[i] = new int[suma];
}
cout << endl;
}
//funkcja zerujaca macierz
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;
}
}
//szukanie w ktorym wierszu jest punkt
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;
//w ktorym wierszu jest ten punkt
}
if(m1%2 == 0);
{
m = m + 2*wi;
}
wi ++;
}
return wi;
}
//funkcja obliczajaca roznice miedzy punktami w kolumnach
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;
}
//funkcja wypelniajaca macierz odpowiednio dla plytki
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;
}
//funkcja wyswietlajaca macierz
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]; //przydzielenie pamięci na k wierszy
cout<<"Podaj liczbe komorek w pierwszym wierszu: ";
cin >> m;
m1 = m;
utwplytka(k,m,plytka);
wysplytka(i,j,k,m,plytka); //wyswietlanie plytki
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); //wyswietlanie macierzy
for(int i = 0; i < k; i++)
{
delete [] plytka[i];
delete [] macierz[i];
}
getch();
return 0;
}