nerdycode

Nerding, thoughts and research about computer science, game, design, art and community.


Poster un commentaire

Les pointeurs en C

#include <stdio.h>
int main(int argc, char *argv[]){
    /*
        RAPPEL
        pointeur > contenu de pointeur
        *pointeur > pointe à l'adresse qu'on lui a donné.
        &pointeur > adresse du pointeur lui-même
    */
    /* INITIALISATION */
    int chiffre=20;
    int *pointeur= chiffre;//en fait ça n'a aucun interet, cela revient à dire int pointeur=chiffre;
    int *pointeur1 = &chiffre;//là si car on donne juste l'adresse
    int *pointeur2 = &pointeur1;//plus complexe car je donne l'adresse du pointeur1
    int *pointeur3 = pointeur1;//valeur de pointeur1 = adresse de chiffre
    /* AFFICHAGE */
    printf("POINTEURS \n");
    printf("Contenu de ma variable \"chiffre\" : %d\n", chiffre);
    printf("Adresse de chiffre : %d \n", &chiffre);
    printf("\n");
    printf("Valeur contenue dans \"pointeur\" : %d\n", pointeur);
    printf("Adresse de \"pointeur\" : %d\n",&pointeur);
    printf("\"*pointeur\" n'existe pas");//printf("%d\n", *pointeur); retourne une erreur monumentale !!
    printf("\n");
    printf("\n");
    printf("Contenu de \"pointeur1\" : %d\n", pointeur1);
    printf("Contenu de l'adresse donnée à \"pointeur1\" : %d\n", *pointeur1);
    printf("Adresse de \"pointeur1\" : %d\n",&pointeur1);
    printf("\n");
    printf("Valeur contenue dans pointeur2 : %d\n", pointeur2);
    printf("Contenu de l'adresse donnée à \"pointeur2\" : %d\n", *pointeur2);
    printf("Adresse de \"pointeur2\" : %d\n",&pointeur2);
    printf("\n");
    printf("Valeur contenue dans  \"pointeur3\" : %d\n", pointeur3);
    printf("Contenu de l'adresse donnée à \"pointeur3\" : %d\n", *pointeur3);
    printf("Adresse de \"pointeur3\" : %d\n",&pointeur);
    getch();
    return 0;
}

RESULAT :

POINTEURS
Contenu de ma variable "chiffre" : 20
Adresse de chiffre : 2293528

Valeur contenue dans "pointeur" : 20
Adresse de "pointeur" : 2293524
"*pointeur" n’existe pas

Contenu de "pointeur1" : 2293528
Contenu de l’adresse donné à "pointeur1" : 20
Adresse de "pointeur1" : 2293520

Valeur contenue dans pointeur2 : 2293520
Contenu de l’adresse donné à "pointeur2" : 2293528
Adresse de "pointeur2" : 2293516

Valeur contenue dans "pointeur3" : 2293528
Contenu de l’adresse donnée à "pointeur3" : 20
Adresse de "pointeur3" : 2293524

P.S : Pour les adresses, si vous ne trouvez pas le même résultat, c’est normal, cela dépend de votre PC, ou plus précisément de votre processeur.


Poster un commentaire

Un peu de maths : Les puissances 1/2

Voyons comment creer un programme de calcul des puissances.
Petit rappel sur les règles de la puissance :

  • x^0 = 1.
  • x^y = x^(y/2)*x^(y/2) si y est pair.
  • x^y=x^(y-1)*x sinon.

Le petit programme qui suit calcule les puissances de 2 :

class puissance{
  static double puissance(double x,int n){
    double reponse;
    if (n==0) {
      reponse=1;
    }else{
      reponse=puissance(x,n/2);
      if(n%2==0){
        reponse=reponse*reponse;//pair
      }else{
        reponse=reponse*reponse*x;//impair
      }
    }
    return reponse;
  }
  public static void main(String[] args) {
    double x;
    for (int i=0; i&lt;=16;i++) {
      x=2;
      System.out.println("2^"+i+" = "+(int)(puissance(x,i)));
    }
  }
}

 
Résultat sur le terminal :

nerdyprog@nerdycode ~ $ javac puissance.java
nerdyprog@nerdycode ~ $ java puissance
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512
2^10 = 1024
2^11 = 2048
2^12 = 4096
2^13 = 8192
2^14 = 16384
2^15 = 32768
2^16 = 65536

Nous pouvons améliorer ce programme de façon à demander à l’utilisateur de taper le chiffre ainsi que la puissance voulue. Nous verrons ça dans la prochaine partie ! :mrgreen:


Un commentaire

Calcul binaire, héxadécimal, et plus si affinités…

Bases

Un bit est un chiffre binaire (binary digit), il prend la valeur 1 ou 0. Il ne faut pas confondre avec le terme byte qui signifie en anglais octet ! Soyez rigoureux dans la notation : 1 b = 1 bit et 1 B = 1 octet. Mathématiquement parlant, lorsqu’on compte en binaire, on compte en base de deux. Lorsque nous comptons normalement, nous comptons en base décimale (ou base de dix). Je vous invite à regarder sur Internet pour plus de précision sur les différentes bases.

Nous noterons (1)2 = (1)10.  C’est à dire 1 en base binaire équivaut à 1 en base décimale. Pour être plus efficace, et pour permettre à l’ordinateur de faire des calculs avec tous les nombres, on "forme" des paquets de bits. Ainsi 8 bits forment un octet. 1000 0000 est un octet.

(1000 0000)2 = (200)8 = (128)10 = (80)16.

Voici une autre méthode de notation :

1000 0000 = 200 Q = 128 D = 80 H.

Comment passons nous du binaire au décimal ?

On calcule en puissance de deux.

Exemple : 001 = (0*22) + (0*21) + (1*20)= 1.

Astuce pour les puissances de deux, en sachant que 20 = 1  :  2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096. (2^1 =2, 2^2 = 4, etc.).

Comment passons nous du décimal au binaire ?

Pour convertir du décimal au binaire, il vous suffit de diviser par 2 tant que le reste est égal à 0.

division => quotient, le reste vaut…

128/2 => 64, le reste vaut 0.

64/2 => 32, le reste vaut 0.

32/2 => 16, le reste vaut 0.

16/2 => 8, le reste vaut 0.

8/2 => 4, le reste vaut 0.

4/2 => 2, le reste vaut 0.

2/2 =>1, le reste vaut 0.

1 n’est pas un multiple de deux donc le reste ne vaudra pas 0, inutile d’aller plus loin.

Donc 128 = 1000 0000.

Autre méthode 1 :

Nous avons 128. Dans 128 on a 0 fois 256, par contre on a 1 fois 128. On calcule donc 128-128 qui est égal à 0.

Dans 0 on a 0 fois 64.  0 fois 32, 0 fois 16, 0 vaut 0 fois 8, 0 vaut 0 fois 4, 0 vaut 0 fois 2,  0 vaut 0 fois 0. Donc 128 = 1000 0000.

Essayons avec 167 pour mieux comprendre la méthode. Dans 167 on a 0 fois 256. Dans 167 on a 1 fois 128. On retire donc 128 à la valeur 167. Ce qui donne: 167-128 = 39. Dans 39 on a 0 fois 64 (64 = 26). On passe alors à la puissance inférieur. Dans 39 on a 1 fois 32. On fait comme auparavant, on retire 32 à 39, soit: 39-32 = 7. Dans 7 on a 0 fois 16. Dans 7 on a 0 fois 8. Dans 7 on a 1 fois 4. 7-4 = 3. Dans 3 on a 1 fois. 2.3-2 = 1. Dans 1 on a 1 fois 1 (c’est d’une évidence…! ).

(167)10 = (1010 0111)2

1 : Personnellement, je n’utilise pas trop cette méthode-là.

Comment passons nous du binaire à l’hexadécimal ?

Il faut toujours se dire : "HEXA = Paquets de quatre bits".

1ère étape : faire des paquets de quatre bits 10000000 → 1000 0000

2ème étape : conversion 1000 → 8  et 0000 → 0 donc 1000 0000 = 80 H.

Comment passons nous du binaire à l’octal ?

Il faut toujours se dire : "OCTAL = Paquets de trois bits".

1ère étape : faire des paquets de trois bits : 1000 0000 → 10 00 0 000 (le 10 en fait c’est 010).

2ème étape : on convertit normalement : 200 Q.

Tableau de conversion BIN → HEXA

0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F

Pour mieux comprendre, je vous conseille de lire ce cours.

Passer de l’hexadécimal au décimal, ou de l’octal au décimal ?

Moi personnellement, je passe d’abord par le binaire puis je reconvertit ensuite en décimal. Mais on peut convertir avec la même méthode que pour convertir du binaire en décimal. En binaire, on utilisait des puissances de 2, et bien en hexadécimal, par exemple, on utilisera des puissances de 16. :)

Exemple :

0B 13 H = (0*16^3) + (11*16^2) + (1*16^1)+ (3*16^0) = 0 + 11*32 + 1*16 + 3*1 = 371.

Rappel : B = 11.

Code GRAY

000
001
011
010
110
111
101
100

Association de plusieurs octets.

  msb : Most Significiant Bit (bit de poids fort).

lsb : Least Significant Bit (bit de poids faible).

Little Endian : Méthode d’association de plusieurs octets adoptée par Intel. Il s’agit de   placer d’abord les bits de 7 à 0, puis les bits de 15 à 8.

Big Endian : contraire de Little Endian.

Exemple :

0100000000100001

Le msb est 0, et le lsb est 1.

L’association en Big Endian :

01000000
00100001

L’association en Little Endian :

00100001
01000000

Bonus de fin (parce que vous le valez bien)

Pourquoi les informaticiens confondent toujours Halloween et Noël ? Parce que 31 Oct = 25 Dec.


Poster un commentaire

Codeacademy, ou l’alternative à codeschool

Il n’y a pas très longtemps ma collègue décrivait son amour pour codeschool (c<>deschool). Mais à son plus grand désarroi, très peu de cours y sont gratuits, et les cours restent très chers !! Pour rappel, le concept de codeschool est d’apprendre à programmer en suivant intensivement les cours dispensés sur le site. Sont alors à votre disposition un émulateur d’éditeur de code et des vidéos. Vous apprenez donc pas à pas en tapant du code sur l’ "émulateur" et en regardant les vidéos. Après quelques recherches, j’ai pu constater que ce n’est pas la seule solution viable. Eh oui mes chers amis, il existe d’autres solutions et j’aimerai vous parler d’une d’entre elles qui me plaît beaucoup  car gratuite et simple. :)

Il faut cependant noter que contrairement à codeschool, code academy (ou codecacademy, ou codeacademy selon les envies des uns et des autres) ne propose aucun cours vidéos mais uniquement l’interaction avec un "émulateur" d’éditeur de texte. D’ailleurs, le site propose aux gens sur sa page principale de tester cet "émulateur". :) Ainsi vous serez à quoi vous attendre ! :)

codecademy-courses

Les cours dispensés sont les suivants :

  • Python
  • Ruby
  • JavaScript
  • HTML/CSS

Cela peut paraître peu voire dérisoire comparé à la liste de cours proposés par codeschool, mais tout d’abord il faut bien se mettre en tête que rien que ces cours là vous en avez pour un moment, d’autre part ils sont gratuits (ce n’est pas rien de le dire) et pour finir, l’équipe code academy travaille actuellement d’autres cours, ne vous leurrez pas, ils ne s’arrêteront pas en si bon chemin.En théorie, 12 semaines sont nécessaires pour apprendre un langage sur ce site, je dis bien en théorie. Il est certain que pour s’abandonner à ce genre de sites, il faut avoir du temps pour soi, mais cela vaut le coup, et je vous conseille Code Year. Ce dernier est un programme intensif (entendre par là : planning) conçu par code academy : Vous vous engagez à aller sur le site une fois par semaine (par exemple) et faire les exercices proposés.

badges

Code academy fonctionne sur un principe qui devient commun à tous ces sites de e-learning, principe même très fortement sponsorisé par Mozilla : les badges !
Quand on fait une avancée dans notre apprentissage nous gagnons un badge. :) Il faut savoir que Mozilla œuvre pour la conception de badges universels qui seraient reconnu sur le web mais aussi en entreprise et sur le CV [1].  Moi je ne suis pas contre leur principe, tantôt il faudrait préciser que la valeur attribuée au badge sera moindre vis à vis d’un diplôme !

Dernière petite chose avant de vous laisser, les éditeurs utilisés par et sur code academy sont disponibles à cette adresse : http://labs.codecademy.com/#.

Prochainement, nous verrons un autre site de e-learning, je vous laisse dans l’ignorance le temps de fomenter un bel article ! :D

P.S : J’ai volontairement mis le mot émulateur entre guillemets car ce ne sont pas des émulateurs, cependant, ce ne sont pas non plus de vrais éditeurs, tel qu’un éditeur de code installé sur votre PC/Macintosh/je-ne-sais-trop-quoi. :)

VOUS AVEZ ADORÉ ? VOUS ALLEZ RIRE MAIS CET ARTICLE VOUS INTÉRESSERA.


Poster un commentaire

Une calculatrice en Java, ça vous va ?


Après le premier article intitulé "Une calculatrice en Java, ça vous va ?" qui dévoilait aux internautes mon tout premier programme en tant que débutant, je décide de revoir un peu ce code très lourd et horrible. A l’époque mon but avait été d’utiliser pas mal de techniques complexes telle que le fameux try{}catch, but débile pour un débutant. En effet, mieux vaut commencer simple avec une syntaxe simple mais des algorithmes du plus simple au plus compliqué que d’essayer dès le début d’apprivoiser une syntaxes "haut niveau". Bon voilà j’ai revisité un peu le code, le voici un peu plus allégé. Il n’est certes pas parfait, mais au moins ça fait du bien aux yeux !! :)


 

import java.util.*;
public class calculatrice{
	public static void main(String [] args){
		String calculAFaire,temp;
		int chiffre1,chiffre2,somme;
		System.out.println("*********************************************");
		System.out.println("***************SIMPLE CALCULATOR*************");
		System.out.println("*********************************************");
		Scanner in = new Scanner(System.in);
		System.out.print("Tapez votre calcul : ");
		calculAFaire=in.next();
		chiffre1=Character.getNumericValue(calculAFaire.charAt(0));
		chiffre2=Character.getNumericValue(calculAFaire.charAt(2));
		if(calculAFaire.charAt(1)=='+'){
			somme=chiffre1+chiffre2;
		}else if(calculAFaire.charAt(1)=='-'){
			somme=chiffre1-chiffre2;
		}else if(calculAFaire.charAt(1)=='*'){
			somme=chiffre1*chiffre2;
		}else if (calculAFaire.charAt(1)=='/') {
			somme=chiffre1/chiffre2;

		}else{
			System.out.println("Unknown operator");
			somme=0;
		}
		System.out.println("Résultat "+somme);

	}
}


Poster un commentaire

Les brèves de nerdycode


Mashant

Mashant est un réseau social pour développeurs. Voilà. Pourquoi est-ce que je parle de mashant et non pas de [nom d'un autre réseau social pour développeur autre que Mashant] ? Parce qu’il est français, parce que j’ai tout de suite aimé le concept, parce que c’est super sympa de partager des ressources et aussi parce que c’est gratuit. :D

Mashant permet aux gens de partager des liens URL utiles, sympathiques mais aussi de montrer l’avancé de ses projets. Mashant propose également un liste de ebooks (pour l’instant restreintes certes, mais trouver et proposer des ebooks gratuits LÉGALEMENT, bon courage ! ).

Ce site n’est pas le seul réseau social existant sur le web, nous avons également coderwall ou encore geekli. Personnellement, je n’ai pas testé ces sites, mais pour ma part n’étant que développeur débutant, mashant me suffira pour le moment ! :)

mashant : www.mashant.com

Koding

Ce site est énorme ! Pour l’instant en version béta (il faut obtenir une invitation, invitation que j’ai reçu grâce à un assez sympathique membre de mashant :D ), ce site est très prometteur ! :) Il propose un panel d’outils en ligne (un terminal bash et un éditeur maison entre autres), chaque utilisateur possède un répertoire pour coder, etc. Oui, vous l’avez deviné il s’agit de développer dans le cloud ! :D Cela a été bien la première fois que j’ai reconnu l’utilité du cloud ! :D

Koding propose notamment une communauté et un réseau social assez sympathique d’emblée. Bien évidemment, le site est en béta donc il faudra attendre l’avancée de la plateforme pour en déguster chaque pixel.

Koding : https://koding.com/

Security Day Lille1 – 24/01/13

L’université de Lille 1 proposait une journée assez spéciale le 24 Janvier 2013 qui tournait autour de la sécurité. La journée, organisée par des étudiants en Master 2 informatique à Lille1, était divisée en deux parties :

  • des conférences ouvertes à tous le matin
  • des challenges ouvertes exclusivement aux étudiants de tout horizon (plus particulièrement de Lille1)

Les conférences

Les conférences étaient très intéressantes. Vous pouvez visiter le site de l’événement : http://security-day-lille1.fr/, sur celui-ci vous aurez aussi l’occasion de voir les différentes conférences en vidéo.

Les challenges

Je suis venu, j’ai vu et j’ai perdu ! (groupe N3RD H3RD) :D

Mais avec humeur et joie. Le niveau était trop élevé pour moi, je suis encore trop jeune et pas encore assez instruit pour gagner à ce genre de challenges mais ce fut tout de même intéressant.

A bientôt !

nerdyprog.

Suivre

Recevez les nouvelles publications par mail.