From 4fe692fe65852c29a81a87e6ea29a8bffa09043a Mon Sep 17 00:00:00 2001 From: Manuel Bucher <manuel.bucher@hu-berlin.de> Date: Mon, 18 Jun 2018 13:13:58 +0200 Subject: [PATCH] ueberlauf vermieden --- loesung.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/loesung.c b/loesung.c index 6ec22b1..32d402e 100644 --- a/loesung.c +++ b/loesung.c @@ -106,17 +106,17 @@ void list_free(List *this) { /** pruefen, ob genausoviele gerade und ungerade Kacheln existieren, * ohne einen Overflow zu erzeugen - * notwendiges Kriterium fuer unzusammenhaengender graph und hinreichendes - * fuer zusammenhaengender + * notwendiges Kriterium fuer */ -bool list_possible(List *this) { +bool list_necessity(List *this) { return this->num_tiles - this->num_odd == this->num_odd; } /** Zurueckgeben, ob graph ein vollstaendiges Rechteck ist */ bool list_rectangle(List *this) { - return (this->max.x - this->min.x) * (this->max.y - this->min.y) - == this->num_tiles; // TODO: check for overflow? + // verwenden von `uint64_t` um einen ueberlauf zu vermeiden + return (uint64_t)(this->max.x - this->min.x) * (uint64_t)(this->max.y - this->min.y) + == (uint64_t)this->num_tiles; } typedef enum ReadResult { @@ -349,6 +349,17 @@ int main (void) list_free(&tile_list); return EXIT_FAILURE; } + + if (!list_necessity(&tile_list)) { + printf("None\n"); + return EXIT_SUCCESS; + } + if (list_rectangle(&tile_list)) { + printf("Rechteck"); + // TODO: Rechteck ausgabefunktion + return EXIT_SUCCESS; + } + Array tile_array; // uebertragen der Liste in ein Array, und uebergeben des ownership der Tiles // an das Array @@ -358,9 +369,6 @@ int main (void) return EXIT_FAILURE; } - // TODO: pruefen, ob notwendiges Kriterium erfuellt, - // TODO: Falls Rechteck, dieses Ausgeben. - //array_print(&tile_array); qsort(tile_array.tiles, tile_array.num_tiles, sizeof(Tile*), tile_compare); -- GitLab