Browse Source

TP10

master
Geoffrey Frogeye 2 years ago
parent
commit
6da645b05e
5 changed files with 193 additions and 0 deletions
  1. +3
    -0
      TP10/.gitignore
  2. +9
    -0
      TP10/Makefile
  3. +30
    -0
      TP10/exo1.c
  4. +79
    -0
      TP10/exo2.c
  5. +72
    -0
      TP10/exo3.c

+ 3
- 0
TP10/.gitignore View File

@@ -0,0 +1,3 @@
exo1
exo2
exo3

+ 9
- 0
TP10/Makefile View File

@@ -0,0 +1,9 @@
all: $(patsubst %.c,%,$(shell ls *.c))

%: %.c
clang -Wall -Wextra $< -o $@ -g

.PHONY: all clean

clean:
rm *.exe

+ 30
- 0
TP10/exo1.c View File

@@ -0,0 +1,30 @@
#include <stdlib.h>
#include <stdio.h>

// 2.1.1
// Signature : int f(int)
int fois_deux(int a) {
return a*2;
}

// 2.1.2
void appliquer_tableau(int f(int), int t[], int size) {
int i;
for (i = 0; i < size; i++) {
t[i] = f(t[i]);
}
}

// 2.1.3
#define SIZE 5

int main() {
int t[SIZE] = {1, 4, 7, 9, 3};
int i;

appliquer_tableau(fois_deux, t, SIZE);

for (i = 0; i < SIZE; i++) {
printf("t[%d] = %d\n", i, t[i]);
}
}

+ 79
- 0
TP10/exo2.c View File

@@ -0,0 +1,79 @@
#include <stdlib.h>
#include <stdio.h>


// 2.2.1
void triBulleOld(int tab[], int size){
int i, j, tmp;
for(i = size - 1; i > 0; i--){
for(j = 0; j < i; j++){
// 2.2.2
// Il faut modifier le < en > pour faire un tri décroissant
if (tab[j+1] < tab[j]){
tmp = tab[j+1];
tab[j+1] = tab[j];
tab[j] = tmp;
}
}
}
}

// 2.2.3
int superieur(int a, int b) {
if (a > b) {
return 1;
} else if (a == b) {
return 0;
} else {
return -1;
}
}

// 2.2.4
int inferieur(int a, int b) {
if (a < b) {
return 1;
} else if (a == b) {
return 0;
} else {
return -1;
}
}

// 2.2.5
void triBulle(int tab[], int size, int compare(int, int)) {
int i, j, tmp;
for(i = size - 1; i > 0; i--){
for(j = 0; j < i; j++){
// 2.2.2
// Il faut modifier le < en > pour faire un tri décroissant
if (compare(tab[j+1], tab[j]) == 1){
tmp = tab[j+1];
tab[j+1] = tab[j];
tab[j] = tmp;
}
}
}
}

#define SIZE 5

void afficherTableau(int t[], int size) {
int i;
for (i = 0; i < size; i++) {
printf("t[%d] = %d\n", i, t[i]);
}
}

int main() {
int t[SIZE] = {1, 4, 7, 9, 3};

printf("Tri avec inferieur\n");
triBulle(t, SIZE, inferieur);
afficherTableau(t, SIZE);

printf("Tri avec superieur\n");
triBulle(t, SIZE, superieur);
afficherTableau(t, SIZE);

}

+ 72
- 0
TP10/exo3.c View File

@@ -0,0 +1,72 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

// 3.1.1
// À mon avis les void* correspondent à n'importe quel type

// 3.1.2
int superieur(const void* A, const void* B) {
int a = *(int*) A;
int b = *(int*) B;
if (a > b) {
return 1;
} else if (a == b) {
return 0;
} else {
return -1;
}
}

int inferieur(const void* A, const void* B) {
int a = *(int*) A;
int b = *(int*) B;
if (a < b) {
return 1;
} else if (a == b) {
return 0;
} else {
return -1;
}
}

#define SIZE 5
#define STR_SIZE 255

void afficherTableau(int t[], int size) {
int i;
for (i = 0; i < size; i++) {
printf("t[%d] = %d\n", i, t[i]);
}
}

int cmpstr(const void* A, const void* B) {
const char* a = (const char*)A;
const char* b = (const char*)B;
return strcmp(a, b);
}


int main() {
int t[SIZE] = {1, 4, 7, 9, 3};

printf("Tri avec inferieur\n");
qsort(t, SIZE, sizeof(int), inferieur);
afficherTableau(t, SIZE);

printf("Tri avec superieur\n");
qsort(t, SIZE, sizeof(int), superieur);
afficherTableau(t, SIZE);

char c[SIZE][STR_SIZE] = {"Bonjour,\0", "comment\0", "allez\0", "vous\0", "?\0"};

/* int (compare(const void*, const void*)) = strcmp; */
printf("Tri avec strcmp\n");
qsort(c, SIZE, sizeof(char) * STR_SIZE, cmpstr);

int i;
for (i = 0; i < SIZE; i++) {
printf("t[%d] = %s\n", i, c[i]);
}

}