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