New C projects

This commit is contained in:
F. Y. H. 2023-01-07 16:20:12 +01:00
parent 8461050310
commit f1660b1be3
5 changed files with 559 additions and 0 deletions

164
csvfc.c Normal file
View file

@ -0,0 +1,164 @@
/*****************************************\
|* Code C pour lire un fichier CSV. *|
|* *|
|* Auteur : Frederic Henry. *|
|* Note : On peut surement faire mieux ! *|
\*****************************************/
/*g++ -Wall -Wextra -c csvfc.c && g++ -Wall -Wextra csvfc.o -o csvfc && ./csvfc;*/
/* Bibliotheques standards de C 90. */
/* Entree/sortie & fichiers. */
#include <stdio.h>
/* Caracteres. */
#include <string.h>
/* Controles de procedures. */
#include <stdlib.h>
/* Lignes. */
#define LINES 8
/* Colonnes. */
#define ROWS 6
/* Fonction secondaire. */
/* Un texte d'aide pour connaître les commandes. */
/* Une seule commande ici : '-h' pour l'aide. X-) */
void helper(void)/* Que du texte... :-| */
{
printf("/*********************************************\\\n");
printf("|* Section d'aide pour le programme 'csvfc'. *|\n");
printf("|* *|\n");
printf("|* csvfc [-h|--help] *|\n");
printf("|* *|\n");
printf("\\*********************************************/\n");
printf("Pour manipuler ce programme, il suffit d'avoir");
printf(" le fichier 'csvin.csv' dans le meme repertoire.\n\n");
printf(" Contenu de 'csvin.csv' :\n");
printf("\"X\",\"Y\",\"Z\",\"U\",\"V\",\"P\"\n");
printf("1,1,1,1,1,1\n");
printf("2,2,2,2,2,2\n");
printf("3,3,3,3,3,3\n");
printf("4,4,4,4,4,4\n");
printf("5,5,5,5,5,5\n");
printf("6,6,6,6,6,6\n");
printf("7,7,7,7,7,7\n");
printf("8,8,8,8,8,8\n\n");
printf("Apres ca, on execute 'csvf'.\n");
}
/* Fonction principale. */
int main(int argc, char** argv)
{
/* Avant de commencer, a-t-on ajoute une option ? */
if (argc == 2)/* Si une option... */
{
/* En cas d'option '-h' ou '--help'... */
if (strcmp(argv[1],"--help")==0 || strcmp(argv[1],"-h")==0)
{
/* Page d'aide invoquee. */
helper();
/* Fin du programme avec succes. */
exit(EXIT_SUCCESS);
}
}
/* Texte memorise. */
char text[LINES+1][5*ROWS-1];
/* Indices ligne/colonne. */
char i,j;
/* Matrice d'entiers. */
int matrix[LINES][ROWS];
/* Pour s'assurer la fin de chaque ligne.
* Une ligne = une sous-chaine.
*/
for (i=1; i<ROWS; i=i+1)
{
text[i][5*ROWS-1-1]='\0';
}
/* Pour la deco. car j'aime ca. :-D */
printf("/*****************************************\\\n");
printf("|* Code C++ pour lire un fichier CSV. *|\n");
printf("|* *|\n");
printf("|* Auteur : Frederic Henry. *|\n");
printf("|* Note : On peut surement faire mieux ! *|\n");
printf("\\*****************************************/\n\n");
printf("Lecture de \"./csvin.csv\"...\n");
/* Lecture de fichier texte avec "FILE*". */
FILE* entree;
entree = fopen("./csvin.csv","r");
printf("Table CSV (en-tete) :\n");
/* Ligne 0 lue. */
fscanf(entree,"%s",text[0]);
printf("%s\n",text[0]);
/* Les autres lignes. */
printf("Table CSV (corps) :\n");
for (i=1; i<LINES+1; i=i+1)
{
fscanf(entree,"%s",text[i]);
printf("%s\n",text[i]);
}
/* Lecture integrale. */
printf("Table CSV (tout) :\n");
for (i=0; i<LINES+1; i=i+1)
{
printf("%s\n",text[i]);
}
printf("\n");
/* Fermeture du fichier. */
fclose(entree);
/* Affichage du tableau de caracteres. */
printf("Version tableau de caracteres :\n");
/* En-tete. */
for (j=0; j<ROWS; j=j+1)
{
printf("%c ",text[0][4*j+1]);
}
/* Corps. */
printf("\n");
for (i=1; i<LINES+1; i=i+1)
{
for (j=0; j<ROWS; j=j+1)
{
printf("%c ",text[i][2*j]);
}
printf("\n");
}
printf("\n");
/* Pareil, facon nombres entiers. */
printf("Version tableau d'entiers :\n");
/* Conversion du texte a la matrice entiere. */
for (i=0; i<LINES; i=i+1)
{
for (j=0; j<ROWS; j=j+1)
{
matrix[i][j]=(int)text[i+1][2*j]-48;
}
}
/* Affichage de la matrice. */
for (i=0; i<LINES; i=i+1)
{
for (j=0; j<ROWS; j=j+1)
{
printf("%d ",matrix[i][j]);
}
printf("\n");
}
printf("\n");
/* Ce coup-ci, ecriture de tableau dans un fichier. */
printf("Ecriture d'un tableau CSV \"./csvout.csv\"...\n");
FILE* sortie;
sortie = fopen("csvout.csv","w");
/* Dabord l'en-tete. */
fprintf(sortie,"\"X\",\"Y\",\"Z\",\"U\",\"V\",\"P\"\n");
/* En suite le corps. */
for (i=0; i<LINES; i=i+1)
{
for (j=0; j<ROWS-1; j=j+1)
{
fprintf(sortie,"%d,",matrix[i][j]);
}
fprintf(sortie,"%d\n",matrix[i][ROWS-1]);
}
/* Fichier ferme. */
fclose(sortie);
printf("\n");
/* Fini. */
printf("Fin\n");
/* Pour dire que tout a bien marche. */
return EXIT_SUCCESS;
}

66
invNb.c Normal file
View file

@ -0,0 +1,66 @@
/*********************\
|**Frédéric Henry*****|
|**SETSIS 2020********|
\*********************/
/* gcc -Wall -Wextra -o invNb invNb.c */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* Opérateur puissance. */
int puis(int nb, int i)
{
/* Base. */
int b=nb;
/* Multiplications. */
if(i!=0)
{
for(long int j=0; j<i-1; j=j+1)
{
nb=nb*b;
}
return nb;
}
/* Extension nulle. */
else
{
return 1;
}
}
/* Fonction principale. */
int main(int argc, char* argv[])
{
/* Aide. */
if(!strcmp(argv[1],"-h")||!strcmp(argv[1],"--help"))
{
printf("Usage : %s -h|--help|NUMBER\n",argv[0]);
printf("Litteral inverse of NUMBER is returned.\n");
return EXIT_SUCCESS;
}
/* Le nombre entier non signé en entrée. */
else
{
/* Nombre de chiffres. */
const long int taille = strlen(argv[1]);
/* Vraiment un nombre entier non signé?
* Dans ce cas, les caractères sont dans
* [48;57].
*/
for(long int i=0; i<taille; i=i+1)
{
if(argv[1][i]<48||argv[1][i]>57)
{
/* Si non, erreur! */
return EXIT_FAILURE;
}
}
/* Nombre littéralement inversé. */
int nb=0;
for(long int i=0; i<taille; i=i+1)
{
nb=nb+(int)(argv[1][taille-i-1]-48)*puis(10,taille-i-1);
}
/* Nombre inversé en sortie. */
printf("%d\n", nb);
return EXIT_SUCCESS;
}
}

95
random.c Normal file
View file

@ -0,0 +1,95 @@
/*
* Fichier : random.c
* Auteur : Frédéric Henry
* Diplôme : Lpro Vision robotique
* Date : 23/10/2018
* Version : 0.1
*/
/* En-tête : Bibliothèque standard pour I/O. */
#include <stdio.h>
/* En-tête : Bibliothèque standard pour "rand()" et "random()". */
#include <stdlib.h>
/* Taille du tableau. */
#define N 128
/* Valeur aléatoire maximale. */
#define MAXI 2147483648
/* Fonction principale.
* Un programme pour étudier la fonction "random()",
* la distribution uniforme et celle normale.
*/
int main(void)
{
unsigned i ;
unsigned j ;
short int flag0 = 0 ;
short int flag1 = 1 ;
long int maximum = 0 ;
long int minimum = MAXI ;
long int alea ;
unsigned table[N] ;
/* Remplissage de zéros. */
for (i=0;i<N;i=i+1)
{
table[i] = 0 ;
}
printf("Randomness values :\n") ;
for(i=0;i<10000;i=i+1)
{
/* Création de valeur aléatoire. */
alea = 0 ;
for (j=0;j<16;j=j+1)
{
/* diviser atténue l'amplitude. */
alea = random()/16 + alea ;
}
/* Classement croissant des valeurs. */
for (j=0;j<N;j=j+1)
{
/* Multiplier élargit les intervalles. */
if (alea > MAXI / N * j && alea < MAXI / N * (j+1))
{
table[j] = table[j] + 1 ;
j = N ;
}
}
/* Recherche des extremums. */
if (maximum < alea)
{
maximum = alea ;
}
if (minimum > alea)
{
minimum = alea ;
}
/* printf("N%02u = %010ld\n", i, alea) ; */
}
printf("Highest number : %ld\n", minimum) ;
printf("Highest number : %ld\n", maximum) ;
/* Multiples binaires. */
alea = 1 ;
i = 0 ;
while (alea < maximum)
{
alea = alea * 2 ;
i = i + 1 ;
if (alea > minimum && flag1 == 1)
{
printf("2^%2u = %ld\n", i, alea) ;
flag1 = 0 ;
}
}
printf("2^%2u = %ld\n", i, alea) ;
/* Graphe */
printf("Graph :\n\n") ;
for (i=0;i<N;i=i+1)
{
printf("[ %03u / %03d ]\t", i+1, N) ;
/* Sauter des valeurs atténue l'amplitude. */
for (j=0;j<table[i];j=j+2)
{
printf("|") ;
}
printf("\n") ;
}
return 0 ;
}

120
sapin.c Normal file
View file

@ -0,0 +1,120 @@
/**************************************\
| Alnotz |
| Le générateur de sapin |
\**************************************/
/* gcc -Wall -Wextra -o sapin sapin.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Une entrée numérique? */
int estNumerique(char chaine[])
{
size_t taille = strlen(chaine);
for(size_t i=0; i<taille; i=i+1)
{
switch(chaine[i])
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
break;
default:
return 0;
}
}
return 1;
}
/* Bloc d'espaces ou traits */
void multibloc(unsigned long int compteur,unsigned int no)
{
if(no==0)
{
for(unsigned long int i=compteur; i>0; i=i-1)
{
printf(" ");
}
}
if(no==1)
{
for(unsigned long int i=compteur; i>0; i=i-1)
{
printf("____");
}
}
}
/* Fonction principale */
int main(int argc, char* argv[])
{
if(argc<2)
{
printf("Pas d'argument? Ça sent le sapin!\n");
return EXIT_FAILURE;
}
/* Aide */
if(!strcmp(argv[1],"-h")||!strcmp(argv[1],"--help"))
{
printf("Commande : ");
printf("%s",argv[0]);
printf(" -h | --help | NOMBRE\n");
printf("-h | --help\t\tDonne l\'aide.\n");
printf("NOMBRE\t\tConstruit l\'arbre sur NOMBRE étages.\n");
return EXIT_SUCCESS;
}
if(!estNumerique(argv[1]))
{
printf("Tape un nombre!\n");
return EXIT_FAILURE;
}
/* Texte => Nombre */
unsigned long int hauteur = strtoul(argv[1],argv,10);
/* Étoile du soir */
multibloc(hauteur-1,0);
printf(" __/\\__\n");
multibloc(hauteur-1,0);
printf(" \\ /\n");
multibloc(hauteur-1,0);
printf(" \\/\\/\n");
multibloc(hauteur-1,0);
printf("____/ \\____\n");
/* Étages */
for(unsigned long int i=hauteur-1; i>0; i=i-1)
{
/* Ligne 0 */
multibloc(i,0);
printf("\\ ");
multibloc(2*(hauteur-i),0);
printf(" /\n");
/* Ligne 1 */
multibloc(i-1,0);
multibloc(1,1);
printf("_\\");
multibloc(2*(hauteur-i),0);
printf("/_");
multibloc(1,1);
printf("\n");
}
/* Dernier étage. */
printf("\\ ");
multibloc(2*hauteur,0);
printf(" /\n \\");
multibloc(2*hauteur,1);
printf("/ \n");
/* Tronc */
for(unsigned long int i=0; i<hauteur; i=i+1)
{
multibloc(hauteur,0);
printf("| |\n");
}
/* Sol */
multibloc(hauteur,0);
printf("|__|\n");
/* FINI! */
return EXIT_SUCCESS;
}

114
wcplus.c Normal file
View file

@ -0,0 +1,114 @@
/*********************\
| WCPlus |
| By Alnotz |
\*********************/
/*
gcc -fPIC -Wall -Wextra -o wcplus.o `/usr/bin/pkg-config --libs --cflags weechat` -c wcplus.c
gcc -shared -fPIC -Wall -Wextra -o wcplus.so wcplus.o
*/
#include <stdlib.h>
#include <weechat-plugin.h>
#define VERBOSE_MASKS_SIZE 3
#define HELP_MASKS_SIZE 3
struct t_weechat_plugin *weechat_plugin = NULL;
WEECHAT_PLUGIN_NAME("WCPlus");
WEECHAT_PLUGIN_DESCRIPTION("Juste une autre extension");
WEECHAT_PLUGIN_AUTHOR("Alnotz <alnotz@protonmail.com>");
WEECHAT_PLUGIN_VERSION("0.2");
WEECHAT_PLUGIN_LICENSE("GNU GPLv3");
WEECHAT_PLUGIN_PRIORITY(999);
void arg_test(int argc,
char **argv)
{
weechat_printf(NULL, "%s###########%s", weechat_color("*green"), weechat_color("reset"));
weechat_printf(NULL, "%sTotal darguments: %s%d%s", weechat_color("red"), weechat_color("*blue"), argc, weechat_color("reset"));
for(int i=0; i<argc; i=i+1)
{
weechat_printf(NULL, "%sArgument n°%d: %s%s%s", weechat_color("red"), i, weechat_color("*blue"), argv[i], weechat_color("reset"));
}
weechat_printf(NULL, "%s###########%s", weechat_color("*green"), weechat_color("reset"));
}
int command_truc(const void *pointer,
void *data,
struct t_gui_buffer *buffer,
int argc,
char **argv,
char **argv_eol)
{
(void) pointer;
(void) data;
(void) buffer;
(void) argv_eol;
if(argc == 1)
{
weechat_printf(NULL, "Tu peux taper `%s/truc -help%s`.", weechat_color("*white"), weechat_color("reset"));
}
else
{
unsigned char verbose_flag = 0;
unsigned char help_flag = 0;
for(int i=1; i<argc; i=i+1)
{
const char *verbose_masks[VERBOSE_MASKS_SIZE] = {"-v", "-verbose", NULL};
const char *help_masks[HELP_MASKS_SIZE] = {"-h", "-help", NULL};
if(weechat_string_match_list(argv[i], verbose_masks, 1) && verbose_flag == 0)
{
verbose_flag = 1;
}
if(weechat_string_match_list(argv[i], help_masks, 1) && help_flag == 0)
{
help_flag = 1;
}
}
if(verbose_flag == 1)
{
arg_test(argc, argv);
}
if(help_flag == 1)
{
weechat_printf(NULL, "Maintenant tu peux taper `%s/help truc%s`.\n:-P", weechat_color("*white"), weechat_color("reset"));
}
}
return WEECHAT_RC_OK;
}
int command_truc_options(const void *pointer,
void *data,
const char *completion_item,
struct t_gui_buffer *buffer,
struct t_gui_completion *completion)
{
(void) pointer;
(void) data;
(void) completion_item;
(void) buffer;
weechat_completion_list_add (completion, "-verbose", 0, WEECHAT_LIST_POS_END);
weechat_completion_list_add (completion, "-help", 0, WEECHAT_LIST_POS_END);
return WEECHAT_RC_OK;
}
int weechat_plugin_init (struct t_weechat_plugin *plugin,
int argc, char *argv[])
{
weechat_plugin = plugin;
weechat_hook_completion("truc_options",
"Complétion des options de `truc`",
&command_truc_options,
NULL,
NULL);
weechat_hook_command("truc",
"Cest une commande d'essai.",
"[-v|-verbose] [-h|-help]",
"-h|-help : Aide\n"
"-v|-verbose : Débogage",
"%(truc_options) %(truc_options)",
&command_truc,
NULL,
NULL);
weechat_printf(NULL, "%sExtension chargée!%s", weechat_color("*red"), weechat_color("reset"));
return WEECHAT_RC_OK;
}
int weechat_plugin_end (struct t_weechat_plugin *plugin)
{
(void) plugin;
weechat_printf(NULL, "%sExtension dé-chargée!%s", weechat_color("*red"), weechat_color("reset"));
return WEECHAT_RC_OK;
}