Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2012-10-24 09:45:09 perplexe

sophus63
membre
Date d'inscription: 2012-08-28
Messages: 11

perplexe



Bonjour à tous

Question newbie

Pourquoi ce code " fonctionne" t il

int a, b, v_a, v_b, r;
a=12345; b=56789;


et pas celui ci



int a, b, v_a, v_b, r;
a=12345; b=56789;

void essai(){} ;


Certes aucun des 2 "ne fait" rien, mais le second  renvoie un "expected EOF, found a" inattendu
la différence entre les deux étant l'innocente fonction essai()

Hors ligne

 

#2 2012-10-24 12:34:10 Re : perplexe

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: perplexe



Bonjour,

Ton premier sketch est en mode static, c'est une liste d'instructions.
Dans le deuxième, tu introduis une fonction, donc Processing s'attend à trouver les deux fonctions de base :
void setup() {}
void draw(){}

C'est pour cela qu'il t'indique une erreur.
Va voir ici :
http://processing.org/learning/overview/

Bon apprentissage.

Hors ligne

 

#3 2012-10-24 13:45:18 Re : perplexe

sophus63
membre
Date d'inscription: 2012-08-28
Messages: 11

Re: perplexe



Salut Mushussu !

Pas vu overview -mais je vais le faire.

Par contre j'ai mis du setup et du draw et ... bernique . Perplexité inchangée (même message d'erreur)

(P5 version 2.03b id a la 1.5)

Hors ligne

 

#4 2012-10-24 14:34:16 Re : perplexe

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: perplexe



int a, b, v_a, v_b, r;

void setup() {
  a=12345;
  b=56789;
}

void draw() {}

void essai(){}

Cela devrait te satisfaire.

Dernière modification par Mushussu (2012-10-24 14:35:46)

Hors ligne

 

#5 2012-10-24 17:02:26 Re : perplexe

sophus63
membre
Date d'inscription: 2012-08-28
Messages: 11

Re: perplexe



Merci Mushussu

ça marche. l'initialisation dans le setup() est logique.
quand même bizarre qu'on puisse pas mettre un calcul -genre
int a, b, v_a, v_b, r;

void setup() {
  a=12345;
  b=56789;
}

;

void draw() {}

void essai(){}

et que le calcul, a =2*a, dusse prendre place dans la fonction par exemple.
m'enfin!

Hors ligne

 

#6 2012-10-24 20:05:24 Re : perplexe

oyster_twiter
membre
Lieu: saint-herblain
Date d'inscription: 2008-04-01
Messages: 444
Site web

Re: perplexe



comme ça ? :

int a, b, v_a, v_b, r;

void setup() {
  a=12345;
  b=56789;
 int machin = essai(a);
println(machin);
}

;

void draw() {}

int essai(int x){
int truc = 2 * x;
return truc;

}

Hors ligne

 

#7 2012-10-25 08:45:15 Re : perplexe

sophus63
membre
Date d'inscription: 2012-08-28
Messages: 11

Re: perplexe



euh !!! je me rends compte que le message précédent n'est pas ''passé" comme je le voulais.
Bien sûr que la fonction essai() fait son boulot.
Ce que je ne comprends pas c'est pourquoi le programme

int a=1;
a=2*a ;

void setup() {
  println(a);
}

void draw() {}
ne tourne pas, alors que

int a=1;

void setup() {
   a=2*a ;
  println(a);
}

void draw() {}
fonctionne et que a est connu dans et hors du setup()

merci à tous

Hors ligne

 

#8 2012-10-25 12:39:08 Re : perplexe

oyster_twiter
membre
Lieu: saint-herblain
Date d'inscription: 2008-04-01
Messages: 444
Site web

Re: perplexe



dans le mode dynamique (avec setup et draw) tu ne peux pas faire ce genre de calcul en dehors de méthodes tel que setup() draw() ou essai() truc() ...
C'est une des différences entre mode static, dynamic et puis plus tard OOP (orienté objet).
prends toi un bon bouquin sur processing pour bien intégrer ces aspects.
++

Dernière modification par oyster_twiter (2012-10-25 15:53:49)

Hors ligne

 

#9 2012-10-25 12:44:18 Re : perplexe

sophus63
membre
Date d'inscription: 2012-08-28
Messages: 11

Re: perplexe



'perçu !!

-sans doute un effet du rodage, mais faut s'y faire

Hors ligne

 

#10 2012-10-26 14:37:43 Re : perplexe

Makio135
membre
Lieu: Lyon
Date d'inscription: 2010-11-11
Messages: 89
Site web

Re: perplexe



a est connu et a la bonne valeur en dehors de setup car il est initialisé en global: en dehors d'une fonction et donc accessible partout dans le programme. contrairement à une variable locale définit dans une fonction ou dans une boucle comme :

for(int i=0; i<10; i++){
  println(i);
}

la variable i n'existe que dans la boucle for.

cf: http://processing.org/learning/basics/v … scope.html

tu peux faire:

int a=1;
int b=2*a;

void setup(){
  println(a);
  println(b);
}

void draw(){
}

car ce sont 2  initialisation de variables, pas des calculs

Dernière modification par Makio135 (2012-10-26 14:38:28)

Hors ligne

 

#11 2012-10-26 15:59:57 Re : perplexe

sophus63
membre
Date d'inscription: 2012-08-28
Messages: 11

Re: perplexe



OK on avance.

mais ma perplexité demeure.
Ne parlons plus  de POO, de portée de variable. Il semble après une nuit et un bon chocapic matinal que notre P5 ne supporte pas le mode static tricoté avec le fonctionnnel.
Voici deux "prog" , dont le moins qu'on puisse dire est qu'ils sont clairs autant que sans intérêt, autre que pour le sujet

1

// version avec fonction
int a=1;

int doubler ( int x )
{
return 2*x ;}


a=doubler (a);
println(a);


2

//sans fonction, mais avec calcul quand même
int a =1;
a =2*a ;

println(a);


l'un fonctionne l'autre pas

(qui plus est, pas facile de trouver de la doc sur le static, livre ou net)

merci makio135 (et beau site)

Hors ligne

 

#12 2012-10-26 19:21:52 Re : perplexe

cgiles
membre
Lieu: Est de la France
Date d'inscription: 2005-05-25
Messages: 329

Re: perplexe



Tu as deux mode de fonctionnement, static et fonctionnel, c'est comme tu as deux type de courant, continu et alternatif.
Quand tu alimentes un appareil en continu avec de l'alternatif , ça marche pas, comme quand tu codes en static et que tu mets du fonctionnel avec.

Coder en static est peu documenter car si tu veux faire tourner du code une seule fois, tu as recours a la fonction noLoop(); au sein de ton Draw

Hors ligne

 

#13 2012-10-27 00:10:51 Re : perplexe

oyster_twiter
membre
Lieu: saint-herblain
Date d'inscription: 2008-04-01
Messages: 444
Site web

Re: perplexe



Salut à vous tous.

@Sophus63

Quand tu utilises le mode statique, ton programme est exécuté de haut en bas, ligne après ligne.
Dans ton code:

int a =1; 
a =2*a ;

println(a);

lorsque tu lances le programme, processing va lire la première ligne, puis la seconde...jusqu'à la dernière. Si je me trompe pas il me semble que l'on appelle ce type de programmation, programmation procédurale.

Pour le mode dynamique, dès que setup est écrit dans ton programme, processing lira les premières instructions comme précédemment puis s'engagera dans la méthode setup() et pourra y trouver d'autres méthodes qui l'amèneront peut-être 30 lignes plus bas et le ferons remonter 15 plus haut.
Comme on peut le voir dans ce magnifique projet de visualisation de Ben Fry, ou les ces allers et venus sont représentés:
http://www.benfry.com/deprocess/

Tout ça pour dire que dès que tu écris une méthode dans Processing (que ce soit setup(){}, draw(){} ou essai(){}, doubler(){} etc), tu rentres en mode actif.
À la différence, tu peux utiliser des méthodes tel que rect() sans quitter le mode statique:

int truc=3;
int chose=5;
rect(3*10, 5*5, 3, 5);
rect(3*20, 5*5, 3, 5);
ellipse(3*10, 5*5, 13, 5);

et non processing ne supporte pas le mode statique mêlé au mode fonctionnel, car tout simplement je ne crois pas que ce soit bien utile. Ou peut être il ne faut pas appréhender les choses comme ça, mais ce dire que le mode dynamique, c'est un peu comme du statique ... mais en mieux. Car tout ce que tu peux faire avec le statique tu peux le faire avec le dynamique, l'inverse reste à prouver.
mais d'ailleurs tu veux faire quoi ? smile

quelques bases en fr : http://fr.flossmanuals.net/processing/

Hors ligne

 

#14 2012-10-27 09:04:22 Re : perplexe

sophus63
membre
Date d'inscription: 2012-08-28
Messages: 11

Re: perplexe



voilà qui clôt le sujet.

merci à tous pour votre patience.

@ oyster_twiter

Je me doutais bien que le "pour faire quoi" allait se poser. Le pb est que j'écrivais un p'tit bout de code et que le compilateur me renvoyait un message qui me rendait ...perplexe puisque j'étais absolument sûr de ce que j'écrivais.

Je trouve d'ailleurs bizarre que cette question ne se soit pas posée avant.


@ oyster_twiter  et @cgiles

Ok pour le courant. Cependant j'ai quand même intérêt à connaitre ce que je fais car ma lampe de vélo branchée sur le 220  va avoir une vie curieuse
j'ai aussi -par taquinerie- écrit une version objet de doubler().

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024