uni

University stuff
git clone git://git.christosmarg.xyz/uni-assignments.git
Log | Files | Refs | README | LICENSE

commit 8fd96bcccf65d571220097c231729e7f338d510a
parent 4452241c36f65802d39e6a881870b15eb765ea5b
Author: Christos Margiolis <christos@margiolis.net>
Date:   Wed, 18 Dec 2019 00:48:31 +0200

deleted assignment-1.5

Diffstat:
Dassignment-1.5-arrays-pointers-files/combinations/src/combinations.c | 112-------------------------------------------------------------------------------
Dassignment-1.5-arrays-pointers-files/examples/1DDynamic.c | 223-------------------------------------------------------------------------------
Dassignment-1.5-arrays-pointers-files/examples/Lexico.c | 149-------------------------------------------------------------------------------
Dassignment-1.5-arrays-pointers-files/examples/mystring.c | 103-------------------------------------------------------------------------------
Dassignment-1.5-arrays-pointers-files/minesweeper/src/minesweeper.c | 9---------
5 files changed, 0 insertions(+), 596 deletions(-)

diff --git a/assignment-1.5-arrays-pointers-files/combinations/src/combinations.c b/assignment-1.5-arrays-pointers-files/combinations/src/combinations.c @@ -1,111 +0,0 @@ -#include <stdio.h> - - -int define_size(); -void fill_array(int); -int exists_in_array(int*, int, int); -void pairs(); - - -int main(int argc, char *argv[]) -{ - int N = define_size(); - - fill_array(N); - pairs(); - - return 0; -} - - - -int define_size() -{ - int N; - - do - { - printf("N: "); - scanf("%d", &N); - } while (N <= 6 || N > 49); - - return N; -} - - - -void fill_array(int N) -{ - int i = 0, num, arr[N]; - - do - { - printf("arr[%d]: ", i); - scanf("%d", &num); - - if (num >= 1 && num <= 49) - { - if (i == 0) - { - arr[i] = num; - i++; - } - else - { - if (!exists_in_array(arr, N, num)) - { - arr[i] = num; - i++; - } - else - printf("Give a different number.\n"); - } - } - else - printf("Give a number in [1, 49].\n"); - - } while (i < N); -} - - - -int exists_in_array(int *arr, int N, int num) -{ - int *arrEnd = arr + N - 1; - - while (arr <= arrEnd && *arr != num) - arr++; - - if (arr <= arrEnd) - return 1; - else - return 0; -} - - - -void pairs() -{ - int x1, x2, y1, y2; - - do - { - printf("x1: "); - scanf("%d", &x1); - - printf("x2: "); - scanf("%d", &x2); - - } while (x1 < 0 || x1 > x2 || x2 > 6); - - do - { - printf("y1: "); - scanf("%d", &y1); - - printf("y2: "); - scanf("%d", &y2); - - } while (y1 < 21 || y1 > y2 || y2 > 279); - -}- \ No newline at end of file diff --git a/assignment-1.5-arrays-pointers-files/examples/1DDynamic.c b/assignment-1.5-arrays-pointers-files/examples/1DDynamic.c @@ -1,223 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> - -int GetIntWithinLimits (int, int); -int *ReadMatrix (int); -int ReadMatrix1 (int **M, int S); -void PrintMatrix (int *, int); -int CompareMatrices (int *M1, int M2[], int S); -int GetRandom (int, int); -void RandomFill (int *, int, int, int); -int IsSorted (int *, int); -int LudicrousSort (int *, int); -void Strange1 (int *, int); - -int main (int argc, char **argv) -{ - int *Mat1; - int *Mat2; - int *Mat3; - int NoN; - - srand (time (NULL)); - - NoN = GetIntWithinLimits (1, 100000); - printf ("\n\n"); - Mat1 = ReadMatrix (NoN); - PrintMatrix (Mat1, NoN); - printf ("\n\n"); - if (ReadMatrix1 (&Mat2, NoN)) - PrintMatrix (Mat2, NoN); - else - printf ("Not enough memory...\n"); - printf ("\n\n"); - if (CompareMatrices (Mat1, Mat2, NoN)) - printf ("Matrices are Equal\n"); - else - printf ("Matrices are not Equal\n"); - printf ("\n\n"); - // Δοκιμάστε το παρακάτω για λίγο μεγαλύτερους πίνακες, π.χ. με 15 στοιχεία. - Mat3 = (int *) malloc (5 * sizeof (int)); - RandomFill (Mat3, 5, -5, 300); - PrintMatrix (Mat3, 5); - printf ("Matrix 3 Sorted. Steps: %d\n", LudicrousSort (Mat3, 5)); - PrintMatrix (Mat3, 5); - printf ("\n\n"); - Strange1 (Mat1, NoN); - PrintMatrix (Mat1, NoN); - - -} - -/** - * Διαβάζει από το πληκτρολόγιο και επιστρέφει ένα ακέραιο αριθμό μέσα σε συγκεκριμένο διάστημα. - * Παρόμοια τεχνική πρέπει να χρησιμοποιείται κάθε φορά που πρέπει να εισαχθούν τιμές και να γίνει έλεγχος ορθότητάς τους - */ -int GetIntWithinLimits (int L1, int L2) -{ - int R; - do - { - printf ("Enter an Integer Between %d and %d : ", L1, L2); - scanf ("%d", &R); - } - while (R < L1 || R > L2); - return R; -} - -/* - * Δημιουργεί έναν δυναμικά δεσμευμένο πίνακα ακεραίων συγκεκριμένου μεγέθους, τον γεμίζει με τιμές από την standard είσοδο - * και τον επιστρέφει. Σε περίπτωση προβλήματος δέσμευσης μνήμης η εκτέλεση του προγράμματος διακόπτεται. - * Πώς θα μπορούσε να επιστρέφεται η πληροφορία ότι δεν έγινε η δέσμευση μνήμης (αν αποτύχει η malloc) και να μην χρειαστεί να τερματιστεί το πρόγραμμα; - */ -int *ReadMatrix (int S) -{ - int *T, i; - T = (int *) malloc (S * sizeof (int)); - if (T == NULL) - { - //Ενημέρωση χρήστη για μοιραίο πρόβλημα... - exit (1); - } - for (i = 0; i < S; i++) - { - printf ("Enter Value for Position %d: ", i + 1); - scanf ("%d", T + i); //Γιατί T + i και όχι &T[i]; - } - return T; -} - -/* - * Δημιουργεί έναν δυναμικά δεσμευμένο πίνακα ακεραίων συγκεκριμένου μεγέθους, τον γεμίζει με τιμές από την standard είσοδο - * και επιστρέφει true αν η δέσμευση έγινε κανονικά, false διαφορετικά. - * Η διαφορά με την προηγούμενη συνάρτηση είναι ότι η διεύθυνση του πίνακα δεν επιστρέφεται με return αλλά τοποθετείται - * στον pointer που δίδεται ως είσοδος. Η τεχνική αυτή χρησιμοποιείται αν η συνάρτηση πρέπει να δημιουργήσει περισότερους - * του ενός πίνακες ή αν πρέπει να επιστρέψει και κάποια άλλη πληροφορία, όπως σε αυτή την περίπτωση. - * Είναι κατανοητό γιατί ο pointer είναι διπλός; - */ -int ReadMatrix1 (int **M, int S) -{ - int i; - *M = (int *) malloc (S * sizeof (int)); - if (*M == NULL) - return 0; - for (i = 0; i < S; i++) - { - printf ("Enter Value for Position %d: ", i + 1); - scanf ("%d", *M + i); - } - return 1; -} - -/* - * Τυπώνει τα στοιχεία ενός πίνακα ακεραίων. - * Τροποποιείστε την συνάρτηση ώστε κάθε ένα συγκεκριμένο αριθμό γραμμών να σταματά το - * τύπωμα και να περιμένει να πατηθεί <Enter> από τον χρήστη. - */ -void PrintMatrix (int *Mat, int N) -{ - int i; - for (i = 0; i < N; i++) - printf ("Element %4d Value: %5d\n", i + 1, Mat[i]); -} - -/** - * Συγκρίνει τα περιεχόμενα 2 πινάκων και επιστρέφει true αν όλα τα στοιχεία τους είναι ίσα ένα προς ένα. - * Δοκιμάστε την με και χωρίς το else. - */ -int CompareMatrices (int *M1, int M2[], int S) -{ - int i; - for (i = 0; i < S; i++) - if (M1[i] != *(M2 + i)) - return 0; - //else - return 1; -} - -/** - * Επιστρέφει ένα τυχαίο αριθμό στο διάστημα [L1...L2]. - * Το L2 πρέπει να είναι μεγαλύτερο ή ίσο του L1 με ευθύνη του προγραμματιστή - */ -int GetRandom (int L1, int L2) -{ - return random () % (L2 - L1 + 1) + L1; -} - -/** - * Γεμίζει έναν πίνακα ακεραίων με τυχαίες τιμές σε συγκεκριμένα όρια - */ -void RandomFill (int *P, int N, int O1, int O2) -{ - int i; - for (i = 0; i < N; P[i++] = GetRandom (O1, O2)); -} - -/** - * Ελέγχει αν είνας πίνακας είναι ταξινομημένος. - * Δουλεύει αν ο πίνακας έχει ένα μόνο ή κανένα στοιχείο; - */ -int IsSorted (int *P, int S) -{ - int i; - for (i = 1; i < S; i++) - if (P[i] < P[i - 1]) - return 0; - return 1; -} - -/** - * Ταξινομεί έναν πίνακα με ένα καθόλου έξυπνο αλγόριθμο και επιστρέφει το πλήθος των επαναλήψεων που πραγματοποιήθηκαν. - * Ο αριθμός που θα επιστρέφεται θα είναι πάντα σωστός; Αν όχι σε ποια περίπτωση και τι μπορεί να γίνει για αυτό; - * Βελτιώστε την απόδοση της συνάρτησης διατηρώντας την βασική ιδέα. - */ -int LudicrousSort (int *Mat, int N) -{ - int C = 0; - int tmp; - int i, j; - while (!IsSorted (Mat, N)) - { - C++; - i = GetRandom (0, N - 1); - j = GetRandom (0, N - 1); - tmp = Mat[i]; - Mat[i] = Mat[j]; - Mat[j] = tmp; - } - return C; -} - -/** - * Τι κάνει αυτή η συνάρτηση; - * Υλοποιείστε την με διαφορετικό τρόπο - */ -void Strange1 (int *P, int S) -{ - int i; - char *p; - p = (char *)P; - for (i = 0; i < S; i++) - { - *p = *p & (unsigned char ) 254; - p += sizeof (int); - } -} - -/* -================================================================================================= -Γράψτε μία συνάρτηση η οποία θα επιστρέφει τους δύο μεγαλύτερους αριθμούς ενός πίνακα σαρώνοντάς -τον μόνο μία φορά. - -Υλοποιείστε μία δική σας συνάρτηση η οποία θα λειτουργεί όπως η "realloc" - -Υλοποιείστε σειριακή και δυαδική αναζήτηση -*/ - - - - - - - - diff --git a/assignment-1.5-arrays-pointers-files/examples/Lexico.c b/assignment-1.5-arrays-pointers-files/examples/Lexico.c @@ -1,149 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -int GetSize (void); -void ClearBuf (void); -void RemoveEnter (char *); -char **ReadWords (int); -void PrintWords (char **, int); -void FreeMem (char **, int); -void SortWords (char **, int); -void SortWordsByLength (char **, short int *, int); -short int *CreateLexeisSize (char **, int); -void ShowMemory (char **, int); - -int main (int argc, char **argv) -{ - char **Lexeis; - short int *LexeisSize; - int N; - N = GetSize (); - Lexeis = ReadWords (N); - PrintWords (Lexeis, N); - SortWords (Lexeis, N); - PrintWords (Lexeis, N); - LexeisSize = CreateLexeisSize (Lexeis, N); - SortWordsByLength (Lexeis, LexeisSize, N); - PrintWords (Lexeis, N); - ShowMemory (Lexeis, N); - FreeMem (Lexeis, N); - -} - -int GetSize () -{ - int S; - do - { - printf ("Enter Number of Words: "); - scanf ("%d", &S); - } - while (S < 1); - ClearBuf (); - return S; -} - -void ClearBuf () -{ - char ch; - while (( ch = getc (stdin)) != '\n' && ch != EOF); -} - -void RemoveEnter (char *W) -{ - int i; - for (i = 0; W[i] != 10 && W[i] != 13; i++); - W[i] = 0; -} - -char **ReadWords (int S) -{ - char **Words; - char *Buf; - int i; - Buf = (char *) malloc (201); - Words = (char **) malloc (S * sizeof (char *)); - for (i = 0; i < S; i++) - { - printf ("Enter word %d: ", i + 1); - fgets (Buf, 201, stdin); - RemoveEnter (Buf); - Words[i] = (char *) malloc (strlen (Buf) + 1); - strcpy (Words[i], Buf); - } - free (Buf); - return Words; -} - -void PrintWords (char **Words, int NoW) -{ - int i; - printf (" AA Word Length\n"); - for (i = 0; i < NoW; i++) - printf ("[%3d] %-30s (%2d)\n", i + 1, Words[i], strlen (Words[i])); - printf ("----------------------------------------------------------------------------------\n\n"); -} - -void FreeMem (char **L, int N) -{ - int i; - for (i = 0; i < N; i++) - free (*(L + i)); - free (L); -} - -void SortWords (char **Words, int S) -{ - char *tmp; - int i, j; - for (i = 0; i < S - 1; i++) - for (j = i + 1; j < S; j++) - if (strcmp (Words[i], Words[j]) > 0) - { - tmp = Words[i]; - Words[i] = Words[j]; - Words[j] = tmp; - } -} - -void SortWordsByLength (char **Words, short int *WL, int S) -{ - short int tmp; - char *tmp1; - int i, j; - for (i = 0; i < S - 1; i++) - for (j = i + 1; j < S; j++) - if (WL[i] > WL[j]) - { - tmp = WL[i]; - WL[i] = WL[j]; - WL[j] = tmp; - tmp1 = Words[i]; - Words[i] = Words[j]; - Words[j] = tmp1; - } -} - -short int *CreateLexeisSize (char **Words, int S) -{ - short int *Mat; - int i; - Mat = (short int *) malloc (S * sizeof (short int)); - for (i = 0; i < S; i++) - *(Mat + i) = strlen (*(Words + i)); - return Mat; -} - -void ShowMemory (char **W, int P) -{ - int i; - printf ("The Lexeis pointer Contains: %p\n", W); - printf (" Lexeis+i Lexeis[i] Word\n"); - printf (" --------------\n"); - for (i = 0; i < P; i++) - { - printf (" %10p | %10p | ---> %s\n", W + i, *(W + i), *(W + i)); - printf (" --------------\n"); - } -} diff --git a/assignment-1.5-arrays-pointers-files/examples/mystring.c b/assignment-1.5-arrays-pointers-files/examples/mystring.c @@ -1,103 +0,0 @@ -#include <stdio.h> -#include <string.h> - -int mystrcmp (char *, char *); -int mystrlen (char *); -void mystrcpy (char *, char *); -char *mystrcat (char *, char *); - -int main (int argc, char **argv) -{ - char Str1[50] = "Thanasis"; - char Str2[50] = "Maria"; - char Str3[50] = "MariaP"; - char Str4[50] = ""; - - printf ("Name 1 : %s\n", Str1); - printf ("Name 2 : %s\n", Str2); - printf ("Name 3 : %s\n", Str3); - printf ("Name 4 : %s\n", Str4); - - printf ("\n"); - printf ("Compare Name 1 with Name 2: %d \n", mystrcmp (Str1, Str2)); - printf ("Compare Name 2 with Name 1: %d \n", mystrcmp (Str2, Str1)); - printf ("Compare Name 1 with Name 1: %d \n", mystrcmp (Str1, Str1)); - printf ("Compare Name 2 with Name 3: %d \n", mystrcmp (Str2, Str3)); - printf ("Compare Name 3 with Name 2: %d \n", mystrcmp (Str3, Str2)); - - printf ("\n"); - printf ("Length of Name 1 : %d\n", mystrlen (Str1)); - printf ("Length of Name 2 : %d\n", mystrlen (Str2)); - printf ("Length of Null String : %d\n", mystrlen ("")); - - printf ("\n"); - mystrcpy (Str4, Str1); - printf ("Name 4: %s is copy of Name 1: %s\n", Str4, Str1); - - printf ("\n"); - mystrcat (Str4, Str2); - printf ("New Name 4: %s\n", Str4); - - -} - -/* - * Υλοποίηση της "strcmp" - * Αυτό που επιστρέφει είναι το ίδιο / συμβατό με αυτό που επιστρέφει η έτοιμη συνάρτηση; - * Υλοποιείστε την strncmp - */ - -int mystrcmp (char *s1, char *s2) -{ - int i; - for (i = 0; s1[i] == s2[i] && s1[i] != 0; i++); - return s1[i] - s2[i]; -} - -/* - * Υλοποίηση της "strlen". - * Ξεκαθαρείστε το νόημα της συνθήκης, συντακτικά και λογικά - */ -int mystrlen (char *s) -{ - int i; - for (i = 0; s[i]; i++); - return i; -} - -/* - * Υλοποίηση της "strcpy" - * Είναι κατανοητό πως δουλεύει; - * Σε τι διαφέρει από την έτοιμη συνάρτηση; Διορθώστε την ώστε να πληροί τις προδιαγραφές της έτοιμης συνάρτησης. - * Υλοποιείστε την με έναν... πιο αλγοριθμικό τρόπο. - * Υλοποιείστε την strncpy - */ -void mystrcpy (char *d, char *s) -{ - int i = 0; - while (d[i]=s[i++]); -} - -/* - * Υλοποίηση της "strcat" - * Υλοποιείστε την χωρίς την κλήση άλλης συνάρτησης. - * Υλοποιείστε την strncat - */ -char *mystrcat (char *d, char *s) -{ - char *tmp; - tmp = d; - while (*tmp) - tmp++; - // while (*(tmp++)); // Γιατί όχι μόνο αυτό; - mystrcpy (tmp, s); - return d; -} - -/* - * Υλοποιείστε τις παρακάτω συναρτήσεις: - * -strdup - * -strlwr - * -strupr - */ - diff --git a/assignment-1.5-arrays-pointers-files/minesweeper/src/minesweeper.c b/assignment-1.5-arrays-pointers-files/minesweeper/src/minesweeper.c @@ -1,8 +0,0 @@ -#include <stdio.h> - -int main(int argc, char *argv[]) -{ - - - return 0; -}- \ No newline at end of file