#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define tailleMax 100000
double PGCD(double nb1,double nb2);
double PPCM(double nb1, double nb2);
int main()
{
double nb1, nb2;
int nb3;
int l,choix;
double encore =0;
int tab[tailleMax] = {0};
int tab2[tailleMax] = {0};
printf("Ce programme permet de :\n\n");
do
{
printf("1-calculer le PGCD de deux nombres.\n");
printf("2-calculer le PPCM de deux nombres .\n");
printf("3-trouver tous les diviseurs d'un nombre (jusqu'a 2.147.483.647).\n");
printf("4-decomposer un nombre en produit de facteurs premiers (jusqu'a 2.147.483.647).\n");
printf("5-rechercher les nombres premiers entre 2 valeurs (jusqu'a 2*10^6 en gros).\n\n");
printf("Votre choix : ");
for (l=0; l<=tailleMax; l++)
{
tab[l]=0;
tab2[l]=0;
}
scanf("%d",&choix);
switch (choix)
{
case 1 :
{
printf("\nEntrez le 1er nombre : ");
scanf("%lf",&nb1);
printf("Entrez le 2e nombre : ");
scanf("%lf",&nb2);
printf("\nLe PGCD de %.0lf et %.0lf est %.0lf\n", nb1,nb2,PGCD(nb1,nb2));
if (PGCD(nb1,nb2)==1)
printf("%.0lf et %.0lf sont premiers entre eux.",nb1,nb2);
break;
}
case 2 :
{
printf("\nEntrez le 1er nombre : ");
scanf("%lf",&nb1);
printf("Entrez le 2e nombre : ");
scanf("%lf",&nb2);
printf("\nLe PPCM de %.0lf et %.0lf est %.0lf", nb1,nb2,PPCM(nb1,nb2));
break;
}
case 3 :
{
int i,k;
printf("\nEntrez le nombre : ");
scanf("%d",&nb3);
printf("\nLes diviseurs de %d sont ",nb3);
for ( i=1 ; i<= sqrt(nb3); i++)
{
if ((nb3%i)==0)
{
tab[i-1]=i;
if (i*i != nb3)
tab[tailleMax-i]=nb3/i;
}
}
k=0;
printf("%d",tab[0]);
for (i=1; i<tailleMax; i++)
if(tab[i]!=0)
{
tab2[k]=tab[i];
printf(" - %d",tab[i]);
k++;
}
printf("\nIl y a %d diviseurs",k+1);
if (k==1)
printf(" : -----> %d est un nombre premier.",nb3);
break;
}
case 4 :
{
int i,j,k,x;
printf("\nEntrez le nombre : ");
scanf("%d",&nb3);
for ( i=1 ; i<= sqrt(nb3); i++)
{
if ((nb3%i)==0)
{
tab[i-1]=i;
if (i*i != nb3)
tab[tailleMax-i]=nb3/i;
}
}
k=0;
for (i=1; i<tailleMax; i++)
if(tab[i]!=0)
{
tab2[k]=tab[i];
k++;
}
printf("\n");
if (k==1)
printf("-----> %d est un nombre premier.",nb3);
else
{
j=0;
printf("%d = %d",nb3, tab2[0]);
x=nb3/tab2[0];
for (j=0; j<k; j++)
while ((x%tab2[j])==0)
{
printf(" x %d",tab2[j]);
x=x/tab2[j];
}
}
break;
}
case 5 :
{
int i,k,max,min,x;
int *entier=NULL;
printf("\nEntrez le plus petit nombre : ");
scanf("%d",&min);
do
{
printf("Entrez le plus grand nombre (il doit etre superieur ou egal a %d) : " ,min+2);
scanf("%d",&max);
}
while (max<=min+1);
entier = malloc(max*sizeof(int)); // allocation dynamique d'un tableau ; il aura max cases de int.
if (entier==NULL)
exit(0);
for (i=0; i<max; i++)
entier[i]=i;
i=1;
do
{
i++;
if (entier[i]!=0)
{
k=2;
while (k*i<=max-max%entier[i])
{
entier[k*i]=0;
k++;
}
}
}
while (i*i<max);
printf("\nLes nombres premiers compris entre %d et %d sont : ",min,max);
k=0;
for (i=min; i<=max; i++)
if ((entier[i]!=0)&&(i>1))
{
printf("%d ",entier[i]);
k++;
}
if (k==0)
printf("\n\nIl n'y a aucun nombre premier.\n");
else
printf("\n\nIl y a %d nombre(s) premier(s).\n",k);
if (min<=0)
min=2;
FILE *fichier=NULL;
fichier=fopen("nombrespremiers.txt","w+");
if(fichier!=NULL)
{
for(i=min; i<max; i++)
if (entier[i]!=0)
fprintf(fichier,"%d ",entier[i]);
rewind(fichier);
for(i=0; i<10; i++)
{
fscanf(fichier,"%d",&x);
printf("%d ",x);
}
}
else
printf("Impossible d'ouvrir le fichier Nombres.txt");
free(entier);
break;
}
default :
exit (0);
}
printf("\n\nVoulez-vous recommencer ? (oui = 1 , non = autre touche) : ");
scanf("%d",&choix);
if (choix==1)
encore = 1;
else
encore = 0;
printf("\n--------------------------------------------------------------------------------\n");
printf("--------------------------------------------------------------------------------\n");
printf("\n");
}
while (encore==1);
return 0;
}
double PGCD(double nb1,double nb2)
{
double dividende, diviseur, reste;
dividende = nb1;
diviseur = nb2;
do
{
reste = dividende - diviseur*floor(dividende/diviseur);
dividende = diviseur ;
diviseur = reste;
}
while (reste != 0);
return dividende;
}
double PPCM(double nb1, double nb2)
{
return nb1*nb2/PGCD(nb1,nb2);
}
||=== Générer: Release in Diviseurs (compiler: GNU GCC Compiler) ===|
obj/Release/main.o:main.c|| référence indéfinie vers « _floor »|
obj/Release/main.o:main.c|| référence indéfinie vers « ___chkstk »|
obj/Release/main.o:main.c|| référence indéfinie vers « ___main »|
obj/Release/main.o:main.c|| référence indéfinie vers « _puts »|
obj/Release/main.o:main.c|| référence indéfinie vers « _puts »|
obj/Release/main.o:main.c|| référence indéfinie vers « _puts »|
obj/Release/main.o:main.c|| référence indéfinie vers « _puts »|
obj/Release/main.o:main.c|| référence indéfinie vers « _puts »|
obj/Release/main.o:main.c|| encore plus de références indéfinies suivent vers « _puts »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _scanf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _scanf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _scanf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _malloc »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _fopen »|
obj/Release/main.o:main.c|| référence indéfinie vers « _fprintf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _rewind »|
obj/Release/main.o:main.c|| référence indéfinie vers « _fscanf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _free »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _scanf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _sqrt »|
obj/Release/main.o:main.c|| référence indéfinie vers « _putchar »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _scanf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _sqrt »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _scanf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _scanf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _scanf »|
obj/Release/main.o:main.c|| référence indéfinie vers « _puts »|
obj/Release/main.o:main.c|| référence indéfinie vers « _puts »|
obj/Release/main.o:main.c|| référence indéfinie vers « _putchar »|
obj/Release/main.o:main.c|| référence indéfinie vers « _printf »|
||Plus d'erreurs suivent mais ne sont pas montrées.|
||Editer la limite maximale du nombre d'erreurs dans les options du compilateur ...|
||=== Build échoué: 50 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
-------------- Générer: Release in Diviseurs (compiler: GNU GCC Compiler)---------------
g++ -o bin/Release/Diviseurs obj/Release/main.o -s
/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crt1.o: dans la fonction « _start »:
(.text+0x18): référence indéfinie vers « main »
obj/Release/main.o:main.c:(.text+0x22): référence indéfinie vers « _floor »
obj/Release/main.o:main.c:(.text+0x8b): référence indéfinie vers « ___chkstk »
obj/Release/main.o:main.c:(.text+0x90): référence indéfinie vers « ___main »
obj/Release/main.o:main.c:(.text+0xbf): référence indéfinie vers « _puts »
obj/Release/main.o:main.c:(.text+0xcb): référence indéfinie vers « _puts »
obj/Release/main.o:main.c:(.text+0xd7): référence indéfinie vers « _puts »
obj/Release/main.o:main.c:(.text+0xe3): référence indéfinie vers « _puts »
obj/Release/main.o:main.c:(.text+0xef): référence indéfinie vers « _puts »
obj/Release/main.o:main.c:(.text+0xfb): encore plus de références indéfinies suivent vers « _puts »
obj/Release/main.o:main.c:(.text+0x107): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x13a): référence indéfinie vers « _scanf »
obj/Release/main.o:main.c:(.text+0x16a): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x181): référence indéfinie vers « _scanf »
obj/Release/main.o:main.c:(.text+0x19b): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x1b2): référence indéfinie vers « _scanf »
obj/Release/main.o:main.c:(.text+0x1d2): référence indéfinie vers « _malloc »
obj/Release/main.o:main.c:(.text+0x28c): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x2cb): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x2f9): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x31c): référence indéfinie vers « _fopen »
obj/Release/main.o:main.c:(.text+0x36e): référence indéfinie vers « _fprintf »
obj/Release/main.o:main.c:(.text+0x38b): référence indéfinie vers « _rewind »
obj/Release/main.o:main.c:(.text+0x3b3): référence indéfinie vers « _fscanf »
obj/Release/main.o:main.c:(.text+0x3ca): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x3dc): référence indéfinie vers « _free »
obj/Release/main.o:main.c:(.text+0x3ed): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x404): référence indéfinie vers « _scanf »
obj/Release/main.o:main.c:(.text+0x465): référence indéfinie vers « _sqrt »
obj/Release/main.o:main.c:(.text+0x4b0): référence indéfinie vers « _putchar »
obj/Release/main.o:main.c:(.text+0x4da): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x518): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x54e): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x565): référence indéfinie vers « _scanf »
obj/Release/main.o:main.c:(.text+0x57c): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x5dd): référence indéfinie vers « _sqrt »
obj/Release/main.o:main.c:(.text+0x60c): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x63c): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x659): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x677): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x688): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x69f): référence indéfinie vers « _scanf »
obj/Release/main.o:main.c:(.text+0x6ab): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x6c2): référence indéfinie vers « _scanf »
obj/Release/main.o:main.c:(.text+0x72e): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x73a): référence indéfinie vers « _printf »
obj/Release/main.o:main.c:(.text+0x751): référence indéfinie vers « _scanf »
obj/Release/main.o:main.c:(.text+0x76b): référence indéfinie vers « _puts »
obj/Release/main.o:main.c:(.text+0x777): référence indéfinie vers « _puts »
obj/Release/main.o:main.c:(.text+0x783): référence indéfinie vers « _putchar »
obj/Release/main.o:main.c:(.text+0x79c): référence indéfinie vers « _printf »
Process terminated with status 1 (0 minute(s), 0 second(s))
50 error(s), 0 warning(s) (0 minute(s), 0 second(s))
référence indéfinie vers « main »
-------------- Nettoyer: Release in Diviseurs (compiler: GNU GCC Compiler)---------------
Cleaned "Diviseurs - Release"
-------------- Générer: Release in Diviseurs (compiler: GNU GCC Compiler)---------------
gcc -Wall -O2 -c "/media/jp/450Go/Programmation C/Console/Diviseurs/main.c" -o obj/Release/main.o
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c: In function ‘main’:
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:33:14: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&choix);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:39:18: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%lf",&nb1);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:41:18: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%lf",&nb2);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:50:18: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%lf",&nb1);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:52:18: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%lf",&nb2);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:60:18: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&nb3);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:90:18: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&nb3);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:130:18: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&min);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:134:26: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&max);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:182:27: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result [-Wunused-result]
fscanf(fichier,"%d",&x);
^
/media/jp/450Go/Programmation C/Console/Diviseurs/main.c:196:14: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&choix);
^
g++ -o bin/Release/Diviseurs obj/Release/main.o -lm -s
Output file is bin/Release/Diviseurs with size 9,49 KB
Process terminated with status 0 (0 minute(s), 0 second(s))
0 error(s), 11 warning(s) (0 minute(s), 0 second(s))
-------------- Générer: Release in Diviseurs (compiler: GNU GCC Compiler)---------------
La cible est à jour.
Nothing to be done (all items are up-to-date).
-------------- Lancer: Release in Diviseurs (compiler: GNU GCC Compiler)---------------
Checking for existence: /media/jp/450Go/Programmation C/Console/Diviseurs/bin/Release/Diviseurs
Exécution de: xterm -T Diviseurs -e /usr/bin/cb_console_runner LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. /media/jp/450Go/Programmation\ C/Console/Diviseurs/bin/Release/Diviseurs ( dans /media/jp/450Go/Programmation C/Console/Diviseurs/.)
Process terminated with status 255 (0 minute(s), 0 second(s))
gcc -c /home/jp/Documents/Mandelbrot.c -o /home/jp/Documents/Mandelbrot.o
/home/jp/Documents/Mandelbrot.c:4:21: fatal error: SDL/SDL.h: Aucun fichier ou dossier de ce type <- no such file or directory (I translate)
^
compilation terminated.
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))
4) then in Project->Build Options->Search directories->Compiler , I put this : /home/jp/Documents/Mandelbrot linux/ (correct ?)no, there should be the path to the sdl include directory
5) then in Project->Build Options->Search directories->Linker, ... I don't know where is my compiled library !!!probably somewhere in /usr/lib....
2) I searched where in the computer is the SDL library. I founded this : /usr/lib/i386-linux-gnu/libSDL-1.2.so.0.11.4 Is it the library I need ? It's not a .a or .so or .libprobably there is somewhere a symlink to a libSDL.... (you can google that to)
`sdl-config --libs`
`sdl-config --cflags`
*** Error in `/home/jp/Documents/Mandel/bin/Debug/Mandel': double free or corruption (!prev): 0x08341f98 ***
Aborted
Process returned 134 (0x86) execution time : 12.095 s
Press ENTER to continue.
Thank you Jens and BlueHazzard. :D :D
I installed the libsdl dev package and suddenly the compilation is OK ! :)
In the Project->Build options->Linker settings-> Other Linker options , `sdl-config --libs` appears.
In the Project->Build options-> Compiler Settings-> Other options, `sdl-config --cflags` appears.
So this part is a success and the SDL library is recognised.
So I ran the Mandelbrot program I made with c::b under windows (worked good).
It begins well, the Mandelbrot set appears, and suddenly when I use the mouse ( left-clic and right-clic ), the program stops :o