CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C-Challenge] Algorithme C complexe

rangerprice
rangerprice
Niveau 10
21 avril 2015 à 23:57:05

Hello :-d

Etant moi même passionné par le C++, j'ai eu la fabuleuse idée de vous faire partager mon savoir à travers des screens contenant des algorithmes complexes écrit en C et C++, que vous devrez traduire.
Les algorithmes présenté seront de plus en plus complexe et difficle à traduire au file du temps, le gagnant pourra, si il veut, poster son propre algorithme complexe écrit avec le langage qu'il veut, que nous puissons le décoder.

Pour chaque algo donné, il faudra traduire chaque opération ligne par ligne afin de voir si la personne a bien compris le sens de l'algo.

Commencons avec un facile: http://i.imgur.com/DTQYbpL.png :noel:

Pseudo supprimé
Pseudo supprimé 22 avril 2015 à 01:30:00

J'ai vu "banana" sur un fond noir, j'ai fermé l'onglet :fou:

AzirBanBordel
AzirBanBordel
Niveau 9
22 avril 2015 à 14:20:37

.... :hap:

Pseudo supprimé
Pseudo supprimé 22 avril 2015 à 14:40:56

C'est pas vraiment un algo complexe mais plus du code rédigé de façon pas très courante et difficile à traduire. :(

rangerprice
rangerprice
Niveau 10
22 avril 2015 à 18:52:42

Oui il n'est pas vraiment complexe, mais j'ai dis que je commençais avec du facile :hap:

NICOLOMBIANO
NICOLOMBIANO
Niveau 3
22 avril 2015 à 19:22:41

ca signifie quoi le 1[ptr], cest une particularité du c++ je suppose ?
et la var en () cest une fonction ? :ouch:

NICOLOMBIANO
NICOLOMBIANO
Niveau 3
22 avril 2015 à 19:24:53

Pour ce qui est de la dernière ligne, tu incrementes ptr, puis regarde un caractère ( peut être altéré par l'operation d'au-dessus que je comprends pas ), puis cast ce caractère en char ** , et tu affiches un * char **, je suis perdus lol

DirectX11
DirectX11
Niveau 6
22 avril 2015 à 19:52:13

Tu stock l'adresse de la string dans str puis dans ptr[1]
et ensuite tu affiches en prenant soin de déreferencer ptr + 1 et de le caster dans le bon type :ok:

kernel[]
kernel[]
Niveau 10
22 avril 2015 à 19:58:44

On aura le droit à l'asm ?

rangerprice
rangerprice
Niveau 10
22 avril 2015 à 20:10:15

Nicolambiano :d) Non, tes tes trop loin :hap:

DirectX11 :d) M'oui, cependant je comprend un peu mal la dernière chose, déférencer ptr + 1 ? :question: Tu veux dire quoi par là ?? :hap:
Non parce que on peut pas additioner ptr et 1, ils ont pas le même type. :(
Explique moi plus cette ligne: cout << *((string*)(*(ptr + 1)));

DirectX11
DirectX11
Niveau 6
22 avril 2015 à 20:26:15

Ptr est un tableau donc si tu écrit juste ptr tu as son adresse et si tu fais ptdr + 1 tu as l'adresse de ptr[1]
qui contient un pointeur sur la string

DirectX11
DirectX11
Niveau 6
22 avril 2015 à 20:27:28

Une simpliste
http://www.hapshack.com/images/mYzW.png

rangerprice
rangerprice
Niveau 10
22 avril 2015 à 21:08:45

Heu non, non non, si ptr c'est l'addresse je vois pas pourquoi ajouter + 1 ferait en sorte que j'ai l'addresse de ptr[1].
Et ça ne coïnciderais pas avec le reste de l'expression.*((string*)(*(ptr + 1)))
ça voudrait dire que l'étoile à gauche de ptr sert à déférencer ptr[1].
Donc que l'étoile suivante, accompagné de string le convertit en string.

Mais l'étoile au maximum de la gauche elle servirait à rien :hap:

Message édité le 22 avril 2015 à 21:09:28 par rangerprice
COS[A-B]
COS[A-B]
Niveau 10
22 avril 2015 à 21:27:38

Le 22 avril 2015 à 21:08:45 rangerprice a écrit :
Heu non, non non, si ptr c'est l'addresse je vois pas pourquoi ajouter + 1 ferait en sorte que j'ai l'addresse de ptr[1].
Et ça ne coïnciderais pas avec le reste de l'expression.*((string*)(*(ptr + 1)))
ça voudrait dire que l'étoile à gauche de ptr sert à déférencer ptr[1].
Donc que l'étoile suivante, accompagné de string le convertit en string.

Mais l'étoile au maximum de la gauche elle servirait à rien :hap:

L'étoile de gauche déréférence le String *

Le 22 avril 2015 à 20:27:28 DirectX11 a écrit :
Une simpliste
http://www.hapshack.com/images/mYzW.png

Tu affiches le string en entier (jusqu'au '\0'), mais au lieu d'afficher les lettres telles qu'elles tu fait un or avec 100000 en binaire ce qui revient a ajouter 100000 (32) a une lettre si elle est en majuscule, ce qui la rend minuscule (bref très bien expliqué)

Un marrant si on connait pas :


float Q_MACHIN( float number )
{
	long i;
	float x2, y;
	const float threehalfs = 1.5F;
 
	x2 = number * 0.5F;
	y  = number;
	i  = * ( long * ) &y;
	i  = 0x5f3759df - ( i >> 1 );
	y  = * ( float * ) &i;
	y  = y * ( threehalfs - ( x2 * y * y ) ); 
 
	return y;
}
DirectX11
DirectX11
Niveau 6
22 avril 2015 à 21:31:40

cos[A-B]
http://en.wikipedia.org/w/wiki/Fast_inverse_square_root

une autre :hap: pour toi l'auteur du topic
http://www.hapshack.com/images/4Rf3W.png

Message édité le 22 avril 2015 à 21:34:03 par DirectX11
TheLemoria
TheLemoria
Niveau 6
22 avril 2015 à 21:38:20

Les mecs ! je commence a apprendre le c++ j'en suis au début du POO
ET a je vois ça ;).
Je regarde et tout mais LA JE VOIS TROP de pointeur x).
Vous m'avez paumez ;)

godrik
godrik
Niveau 30
22 avril 2015 à 22:17:22

ca signifie quoi le 1[ptr], cest une particularité du c++ je suppose ?

En C, a[b] est strictement interprete comme *(a+b). Du fait tu peux ecrire a[b] ou b[a] et obtenir le meme resultat. C'est ca qui permet d'ecrire 1[ptr] parceque c'est la meme chose que ptr[1]. en C++ en fonction des types l'histoire est differente.

rangerprice
rangerprice
Niveau 10
22 avril 2015 à 23:04:06

DirectX11 :d) ...Donne moi un indice pour l'utilité de mettre des ~~.~.~....etc dans le printf :hap:

DirectX11
DirectX11
Niveau 6
22 avril 2015 à 23:42:08

C'est juste pour te perdre :ok:
c'est l’opérateur "~" je te laisse te renseigner dessus.
Sinon la réponse c'est que sizeof d'une struct vide est un comportement indéterminé :hap:
mais sous gcc et clang ca donne 0 après c'est du bullshit cast.

Pseudo supprimé
Pseudo supprimé 22 avril 2015 à 23:48:22

https://image.noelshack.com/fichiers/2015/17/1429739255-1407135989526.png

j'avais vu ça une fois sur /g/ pour ceux qui veulent :hap:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment