Commit 805a5853 authored by Eric Bachard's avatar Eric Bachard
Browse files

Add a new and usefull example

parent e537d088
# Makefile pour le projet saisie_nombre
# Auteur : ericb / samedi 26 mars 2016, 23:11:00 (UTC+0100)
# Ce document est sous Licence GPL v2
# voir : http://www.gnu.org/licenses/gpl-2.0.html
CURRENT_DATE = `date "+20%y-%m-%d"`
BUILD_DIR = build
VERSION_MAJOR = 1
VERSION_MINOR = 7
# comment me for exact milestones
#VERSION_MICRO = _devel_${CURRENT_DATE}
VERSION = ${VERSION_MAJOR}.${VERSION_MINOR}${VERSION_MICRO}
SOURCES_DIR = sources
APPLICATION_NAME = combien_nombres_pairs
BINARY_NAME = ${BUILD_DIR}/${APPLICATION_NAME}
CC = gcc
CC_FLAGS = -Wall -ansi -pedantic -O3
CC_STD = -std=c99
OS_FLAGS =
OUTBIN = ${BUILD_DIR}/${APPLICATION_NAME}
OUTBIN_DEBUG = ${BUILD_DIR}/${APPLICATION_NAME}_debug
OUTBIN_ALL = $(OUTBIN) $(OUTBIN_DEBUG)
# needed for SDL applications building only
SDL_INCLUDE_DIR = -I/usr/include/SDL
INCLUDE_DIR = inc
FILES = *.c
DEPS = $^
LD_FLAGS = -lm
GCC_SECURITY_FLAGS = -fstack-protector -pie -fPIE -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fno-builtin-memset
OPTIMZATION_FLAG = -O3
GCC_SECURITY_FLAGS += -Wextra
# pb on Mac OS X, but -Wnon-literal-null-conversion is not available on Linux (tested gcc-5.4 only)
CFLAGS = ${CC_FLAGS} ${CC_STD} ${OS_FLAGS}
CFLAGS_DEBUG = -g -DDEBUG
OBJS = ${SOURCES_DIR}/${FILES}
ARCHIVE_EXT = .tar.gz
TO_BE_ZIPPED = \
inc \
sources \
Makefile \
TO_BE_ZIPPED_BINARIES = \
${BUILD_DIR}
# ici commence la creation des binaires
all : $(OUTBIN_ALL)
$(OUTBIN) : $(OBJS)
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) ${GCC_SECURITY_FLAGS} ${OPTIMIZATION_FLAGS} -o $@ $(DEPS) $(LD_FLAGS)
$(OUTBIN_DEBUG) : $(OBJS)
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) ${GCC_SECURITY_FLAGS} $(CFLAGS_DEBUG) -o $(OUTBIN_DEBUG) $(DEPS) $(LD_FLAGS)
clean :
rm -rf $(OUTBIN) $(OUTBIN_DEBUG) ${EXEC_NAME}_${VERSION} ${EXEC_NAME}_${VERSION}${ARCHIVE_EXT}
rm -rf $(BUILD_DIR)/dbg*.dSYM
# rm -rf ${APPLICATION_NAME}_*
rm -rf ${APPLICATION_NAME}_${VERSION}
echo Fichiers binaires supprimés.
devel: clean
mkdir ${APPLICATION_NAME}_${VERSION}
mkdir -p ${APPLICATION_NAME}_${VERSION}/build
cp -R ${TO_BE_ZIPPED} ${APPLICATION_NAME}_${VERSION}
tar cvzf ${APPLICATION_NAME}_${VERSION}${ARCHIVE_EXT} ${APPLICATION_NAME}_${VERSION}
archive : all
mkdir ${APPLICATION_NAME}_${VERSION}
cp -R ${TO_BE_ZIPPED} ${APPLICATION_NAME}_${VERSION}
cp -R ${TO_BE_ZIPPED_BINARIES} ${APPLICATION_NAME}_${VERSION}
tar cvzf ${APPLICATION_NAME}_${VERSION}${ARCHIVE_EXT} ${APPLICATION_NAME}_${VERSION}
real_clean : clean
rm -rf ${APPLICATION_NAME}_${VERSION}${ARCHIVE_EXT}
#include <stdio.h>
#include <stdlib.h>
//#include <math.h>
#define MIN 10
#define MAX 13
int main (void)
{
int compteur = 0;
int indice = 0;
for ( indice = MIN ; indice <= MAX; indice++ )
{
if ( indice % 2 == 0)
compteur++;
}
fprintf( stdout,
"Il y a %d nombres pairs entre %d et %d \n",
compteur,
MIN,
MAX
);
return EXIT_SUCCESS;
}
Travail à faire
1. étudier le code, et en déduire l'algorithme
Initialisation
valeurs entières :
compteur <-- 0
Constantes entières :
min <-- 10
max <-- 13
Fin initialisation
Début programme principal
POUR l'entier indice allant de min à max
FAIRE
SI indice est multiple de 2
FAIRE : incrémenter compteur
FIN SI
FIN POUR
Écrire "Il y a (compteur) nombres pairs entre min et max"
Fin programme principal
2. modifier l'algorithme pour que l'utilisateur puisse saisir
les valeurs min et max
Initialisation
valeurs variables entières :
compteur <-- 0
min <-- 0
max <-- 0
Fin initialisation
Sous programme saisie
ÉCRIRE "Entrer la valeur de l'entier min"
LIRE min
ÉCRIRE "Entrer la valeur de l'entier max"
LIRE max
Fin sous programme saisie
Début programme principal
sous programme saisie
POUR l'entier indice allant de min à max
FAIRE
SI indice est multiple de 2
FAIRE : incrémenter compteur
FIN SI
FIN POUR
Écrire "Il y a (compteur) nombres pairs entre min et max"
Fin programme principal
3. étudier saisie et réutiliser la saisie de nombre entiers
dans combien_nombres_pairs
4. créer l'arborescence du nouveau projet combien_nombre_pairs_interactif
combien_nbres_pairs_interactif
sous répertoires :
build
inc
sources
+ Makefile générique
On donnera le nom que l'on veut au binaire exécutable final
5. compiler le programme, le tester et le faire exécuter pas à pas
Compléments : présentation rapide de ldd et nm
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment