SIT152pp/sort_lib/data.cpp

208 lines
8.7 KiB
C++
Raw Normal View History

2024-09-18 10:42:02 +02:00
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <unistd.h>
#include <string.h>
#include "data.h"
/* -------------------------------------------------------------------------- */
/* f_lire_data */
/* int * f_lire_data(char *fichier, int *n); */
/* */
/* Cr<43>er un tableau [t] contenant les entiers lus dans le fichier texte */
/* dans le fichier texte de nom [fichier] */
/* */
/* Entr<74>es : */
/* - [fichier] : nom du fichier texte contenant les donn<6E>es entieres */
/* premi<6D>re ligne : nombre [n] d'<27>l<EFBFBD>ments <20> lire */
/* lignes suivantes : les [n] entiers <20> lire */
/* */
/* Modifications : */
/* - [n] : nombre entier d'<27>l<EFBFBD>ments lus */
/* */
/* Sorties : */
/* - [t] : tableau de type int o<> sont stock<63>s les entiers lus */
/* -------------------------------------------------------------------------- */
int *f_lire_data(char *fichier, int *n)
{
int i;
FILE *f;
int *tab;
/* Ouverture du fichier en lecture */
f = fopen(fichier, "rt");
if (f == NULL)
{
printf("\n\nLecture <f_lire_data> :\nOuverture du fichier %s impossible\n\n", fichier);
exit(1);
}
/* Lecture du nombre d'<27>l<EFBFBD>ments <20> lire */
fscanf (f, "%d\n", n);
/* Allocation de la m<>moire n<>cessaire */
tab = (int *) calloc(*n, sizeof(int));
/* Lecture des n <20>l<EFBFBD>ments */
for (i = 0; i < *n; i++)
fscanf (f, "%d\n", &tab[i]);
fclose(f);
return(tab);
}
/* -------------------------------------------------------------------------- */
/* f_ecrire_data */
/* void f_ecrire_data(char *fichier, int *t, int n) */
/* */
/* Ecrire les [n] <20>l<EFBFBD>ments de type entier du tableau [t] dans un fichier de */
/* type texte de nom [fichier] */
/* premi<6D>re ligne : nombre [n] d'<27>l<EFBFBD>ments <20> lire */
/* lignes suivantes : les [n] entiers de [t] */
/* */
/* Entr<74>es : */
/* - [fichier] : nom du fichier */
/* - [t] : tableau d'entiers */
/* - [n] : nombre d'entiers du tableau */
/* */
/* -------------------------------------------------------------------------- */
void f_ecrire_data(char * fichier, int *t, int n)
{
FILE *f;
int i;
/* Ouverture du fichier en <20>criture*/
f = fopen(fichier, "wt");
if (f == NULL)
{
printf("\n\nEcriture <f_ecrire_data> :\nOuverture du fichier %s impossible\n\n", fichier);
exit(1);
}
fprintf(f, "%d\n", n);
for (i = 0; i < n; i++)
fprintf(f, "%d\n", t[i]);
fclose(f);
}
/* -------------------------------------------------------------------------- */
/* ecrire_data */
/* void ecrire_data(int *t, int n) */
/* */
/* Ecrire les [n] <20>l<EFBFBD>ments de type entier du tableau [t] sur stdout */
/* */
/* Entr<74>es : */
/* - [t] : tableau d'entiers */
/* - [n] : nombre d'entiers du tableau */
/* */
/* -------------------------------------------------------------------------- */
void ecrire_data(int *t, int n)
{
int i;
printf("\n");
for (i = 0; i < n; i++)
printf("%d\n", t[i]);
printf("\n");
}
/* -------------------------------------------------------------------------- */
/* data_triee */
/* int *data_triee(int n) */
/* */
/* Cr<43>er un tableau [t] contenant les [n] premiers entiers dans l'ordre */
/* et sans ex-aequo */
/* */
/* */
/* Entr<74>es : */
/* - [n] : nombre d'entiers du tableau <20> cr<63>er */
/* */
/* Sorties : */
/* - [t] : tableau d'entiers */
/* -------------------------------------------------------------------------- */
int *data_triee(int n)
{
int i;
int *t;
t = (int *) calloc(n, sizeof(int));
for (i = 0; i < n; i++)
t[i] = i;
return t;
}
/* -------------------------------------------------------------------------- */
/* data_triee_inverse */
/* int *data_triee_inverse(int n) */
/* */
/* Cr<43>er un tableau [t] contenant les [n] premiers entiers dans l'ordre */
/* inverse et sans ex-aequo */
/* */
/* */
/* Entr<74>es : */
/* - [n] : nombre d'entiers du tableau <20> cr<63>er */
/* */
/* Sorties : */
/* - [t] : tableau d'entiers */
/* -------------------------------------------------------------------------- */
int *data_triee_inverse(int n)
{
int i;
int *t;
t = (int *) calloc(n, sizeof(int));
for (i = 0; i < n; i++)
t[n-1-i] = i;
return t;
}
/* -------------------------------------------------------------------------- */
/* random_data */
/* int *random_data(int n) */
/* */
/* Cr<43>er un tableau [t] contenant [n] nombres entiers al<61>atoires */
/* */
/* */
/* Entr<74>es : */
/* - [n] : nombre d'entiers du tableau <20> cr<63>er */
/* */
/* Sorties : */
/* - [t] : tableau d'entiers */
/* -------------------------------------------------------------------------- */
int *random_data(int n)
{
int i;
int pid;
int *t;
pid = getpid ();
srand(pid);
t = (int *) calloc(n, sizeof(int));
for (i = 0; i < n; i++)
t[i] = 1+(int) ((double) n *rand()/(RAND_MAX+1.0));
return t;
}