Odwrotne wskaźniki

0

Cześć, ostatnio przerabiałem zadanie "Prostokąty" ze spoj'a. Zadanie polega na wczytaniu z wejścia:

1 linia - ilość prostokąta

n linia - A B C D ; A,B - długości boków prostokąta nr 1 C,D - długość boków prostokąta nr 2.

Natknąłem się na pewien problem a mianowicie licząc pole używając funkcji i zapisując wynik do zmiennej po odczytaniu okazuje się ze wyniki są podane w odwrotnej kolejności.

Np przy danych wejściowych 1|20 20 30 30 otrzymuje wynik 900 400 a powinienem 400 900. Wygląda to jakby czytało tablicę od tyłu.

Jakie błędy popełniłem? Z góry dzięki za pomoc :)

#include <cstdlib>
#include <iostream>
using namespace std;
int pole( int a, int b )
{
	return a * b;
}
int main()
{
	int MAX;
	cin >> MAX;
	int* t = (int*)calloc( MAX * 4, sizeof( int ) );
	int* pf = t;
	for (int i = 0; i < MAX; i++)
	{
		cin >> *t++ >> *t++ >> *t++ >> *t++;
	}
	for (int i = 0; i < MAX; i++)
	{
		int x = pole( *pf++, *pf++ );
		int y = pole( *pf++, *pf++ );
		printf( "%d,%d", x, y );
	}
}

3

Jakie błędy popełniłem?

Używasz wskaźników i calloc. https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

cin >> *t++ >> *t++ >> *t++ >> *t++;

To jest w C++14 i starszych UB, kolejność wywołania działań jest niezdefiniowana.

int x = pole( *pf++, *pf++ );

Kolejność wywołania działań jest niezdefiniowana.

Zamiast próbować brylować nadmiernym sprytem użyj po prostu zmiennych pomocniczych i std::vector tam gdzie jest to potrzebne (w tym zadaniu zdaje się nie być, bo nie ma potrzeby zapamiętywania danych poprzednich prostokątów).

0

Dzięki wielkie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1