commit 8fd96bcccf65d571220097c231729e7f338d510a
parent 4452241c36f65802d39e6a881870b15eb765ea5b
Author: Christos Margiolis <christos@margiolis.net>
Date: Wed, 18 Dec 2019 00:48:31 +0200
deleted assignment-1.5
Diffstat:
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