Skip to content

Commit 433202c

Browse files
committed
map_example -> pair_sum
1 parent e3c28c9 commit 433202c

File tree

5 files changed

+71
-89
lines changed

5 files changed

+71
-89
lines changed

programs/map_example/tests.c

-88
This file was deleted.

programs/map_example/Makefile renamed to programs/pair_sum/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# Για το ADTMap χρησιμοποιούμε την υλοποίηση του k08.a library.
44
#
5-
map_example_OBJS = tests.o $(LIB)/k08.a
5+
pair_sum.test_OBJS = pair_sum.test.o pair_sum.o $(LIB)/k08.a
66

77
# Ο βασικός κορμός του Makefile
88
include ../../common.mk

programs/pair_sum/pair_sum.c

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <stdlib.h>
2+
3+
#include "ADTMap.h"
4+
#include "pair_sum.h"
5+
6+
7+
int compare_ints(int* a, int* b) {
8+
return *a - *b;
9+
}
10+
11+
bool pair_sum(int target, Vector numbers, int* res_a, int* res_b) {
12+
// Στο map θα αποθηκεύουμε τα στοιχεία του vector. Δεν κάνουμε malloc
13+
// οπότε δε θέλουμε και free, εμείς αποθηκεύουμε στοιχεία που έχουν δημιουργηθεί αλλού!
14+
Map seen = map_create((CompareFunc)compare_ints, NULL, NULL);
15+
bool result = false;
16+
17+
int size = vector_size(numbers);
18+
for(int i = 0; i < size; i++) {
19+
int* a = vector_get_at(numbers, i);
20+
int b = target - *a;
21+
22+
if(map_find(seen, &b) != NULL) {
23+
*res_a = *a;
24+
*res_b = b;
25+
result = true;
26+
break;
27+
}
28+
29+
map_insert(seen, a, a); // Για value θέλουμε μια οποιαδήποτε μη-NULL τιμή, οπότε το θέτουμε και αυτό ίσο με a
30+
}
31+
32+
map_destroy(seen);
33+
return result;
34+
}

programs/pair_sum/pair_sum.h

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#include "ADTVector.h"
2+
3+
4+
// Βρίσκει αν υπάρχουν ακέραιοι a,b στο Vector numbers τέτοιοι ώστε a + b = target.
5+
// Επιστρέφει true αν βρεθούν, και τους αποθηκεύει στα a,b, και false διαφορετικά.
6+
7+
bool pair_sum(int target, Vector numbers, int* a, int* b);

programs/pair_sum/pair_sum.test.c

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include "acutest.h" // Απλή βιβλιοθήκη για unit testing
2+
3+
#include "pair_sum.h"
4+
5+
6+
// Δεσμεύει μνήμη για έναν ακέραιο, αντιγράφει το value εκεί και επιστρέφει pointer
7+
int* create_int(int value) {
8+
int* pointer = malloc(sizeof(int)); // δέσμευση μνήμης
9+
*pointer = value; // αντιγραφή του value στον νέο ακέραιο
10+
return pointer;
11+
}
12+
13+
void test_pair_sum() {
14+
Vector numbers = vector_create(0, free);
15+
for(int i = 0; i < 10; i++)
16+
vector_insert(numbers, create_int(i));
17+
18+
int a, b;
19+
TEST_ASSERT(!pair_sum(90, numbers, &a, &b));
20+
TEST_ASSERT( pair_sum(15, numbers, &a, &b));
21+
TEST_ASSERT(a + b == 15);
22+
}
23+
24+
25+
// Λίστα με όλα τα tests προς εκτέλεση
26+
TEST_LIST = {
27+
{ "pair_sum", test_pair_sum },
28+
{ NULL, NULL } // τερματίζουμε τη λίστα με NULL
29+
};

0 commit comments

Comments
 (0)