Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: z3nth10n en 22 Julio 2013, 19:48 pm



Título: Librería de Snippets en C/C++
Publicado por: z3nth10n en 22 Julio 2013, 19:48 pm
Hola amigos, pues Elektro ya abrió un post para VB.NET y lo raro es que nadie lo haya abierto uno para C++,

así que, que tal si dejamos aquí nuestros Snippets?

Un saludo.
PD: Para quién no sepa lo que es un Snippet: http://es.wikipedia.org/wiki/Snippet
Tradución simple: Códigos que sirven para los recién llegados para hacer c&p tremendos, como por ejemplo yo. xD

¿Que es un Snippet?

Es un bloque de código que contiene una o varias Subrutinas (http://en.wikipedia.org/wiki/Subroutine) con el propósito de realizar una tarea específica, cuyo código es reusable por otras personas y fácil de integrar en cualquier otro código ajeno (Copy&Paste).
Definición escrita por Elektro. ;)

Aportes:

[Recurso Online] Hawkee (http://www.hawkee.com/cpp/snippets/) - Compartido por AnonymousCS - No es un Snippet pero por lo menos te salvará la vida más de una vez xD
[Texto] Leer string y calcular espacios y letras (https://foro.elhacker.net/programacion_cc/empty-t395311.0.html;msg1872901#msg1872901) - Compartido por OmarHack
[Criptografía] Rot 13 y 47 (http://foro.elhacker.net/programacion_cc/empty-t395311.0.html;msg1873933#msg1873933) - Compartido por SkateWinner00
[Matemáticas] Saber si un número es primo (http://foro.elhacker.net/programacion_cc/empty-t395311.0.html;msg1873966#msg1873966) - Compartido por Ivancea96
[Criptografía] Cifrado de Polybios (http://foro.elhacker.net/programacion_cc/empty-t395311.0.html;msg1873979#msg1873979) - Compartido por SkateWinner00
[Criptografía] Cifrado AtBash (http://foro.elhacker.net/programacion_cc/libreria_de_snippets_en_cc-t395311.0.html;msg1874011#msg1874011) - Compartido por SkateWinner00
[Texto] Copiar al portapapeles (http://foro.elhacker.net/programacion_cc/libreria_de_snippets_en_cc-t395311.0.html;msg1874295#msg1874295) - Compartido por X3R4CK3R
[Criptografía] Cifrado MD5 (http://foro.elhacker.net/programacion_cc/libreria_de_snippets_en_cc-t395311.0.html;msg1874295#msg1874295) - Compartido por X3R4CK3R
[Criptografía] Cifrado Playfair (http://foro.elhacker.net/programacion_cc/libreria_de_snippets_en_cc-t395311.0.html;msg1874389#msg1874389) - Compartido por SkateWinner00
[Matemáticas] Combinaciones, permutaciones y variaciones (http://foro.elhacker.net/programacion_cc/libreria_de_snippets_en_cc-t395311.0.html;msg1874807#msg1874807) - Compartido por do-while
[Criptografía] Cifrado SHA-1 (http://foro.elhacker.net/programacion_cc/libreria_de_snippets_en_cc-t395311.0.html;msg1874879#msg1874879) - Compartido por do-while
[?] Comparar procesos en C++11 (http://foro.elhacker.net/programacion_cc/libreria_de_snippets_en_cc-t395311.0.html;msg1875917#msg1875917) - Compartido por 0xDani

LISTADO DE SNIPPETS

A code template for OpenGL / GLUT (http://www.cprogramming.com/snippets/source-code/a-code-template-for-opengl-divide-glut)
A function to encrypt/decrypt a string using XOR e (http://www.cprogramming.com/snippets/source-code/a-function-to-encryptdividedecrypt-a-string-using-xor-e)
A function to encrypt/decrypt a string using XOR e (http://www.cprogramming.com/snippets/source-code/a-function-to-reverse-an-integer-array)
A game setup for DirectX (http://www.cprogramming.com/snippets/source-code/a-game-setup-for-directx)
A portable card deck class with shuffling (http://www.cprogramming.com/snippets/source-code/a-portable-card-deck-class-with-shuffling)
a short BubbleSort algoritm for Integer Arrays (http://www.cprogramming.com/snippets/source-code/a-short-bubblesort-algoritm-for-integer-arrays)
a simple clock (http://www.cprogramming.com/snippets/source-code/a-simple-clock)
A simple double linked list using OOP techniques (http://www.cprogramming.com/snippets/source-code/double-linked-list-cplusplus)
A simple example of hashtable (http://www.cprogramming.com/snippets/source-code/hash-table-in-cplusplus)
A singly linked list with a sentinel implementation (http://www.cprogramming.com/snippets/source-code/singly-linked-list-with-sentinel)
A very simple frames per second function (http://www.cprogramming.com/snippets/source-code/a-very-simple-frames-per-second-function)
An example of Exception Handling (http://www.cprogramming.com/snippets/source-code/cplusplus-exception-handling-example-with-file-copy)
An example of simple priority queue using linked lists.
 (http://www.cprogramming.com/snippets/source-code/priority-queue-with-linked-list)An example of simple stack using linked lists.
 (http://www.cprogramming.com/snippets/source-code/stack-with-linked-list)An example of using the same variable name in different scopes
 (http://www.cprogramming.com/snippets/source-code/example-same-variable-name-different-scopes)An example use of a function pointer
 (http://www.cprogramming.com/snippets/source-code/an-example-use-of-a-function-pointer)Another merge sort of integer list
 (http://www.cprogramming.com/snippets/source-code/another-merge-sort-of-integer-list)Another way to swap 2 numbers
 (http://www.cprogramming.com/snippets/source-code/another-way-to-swap-2-numbers)ASCII table generator
 (http://www.cprogramming.com/snippets/source-code/ascii-tablee)binary addition using stack in STL
 (http://www.cprogramming.com/snippets/source-code/binary-addition-using-stack-stl)binary tree creation, traversal and search
 (http://www.cprogramming.com/snippets/source-code/binary-tree-creation-traversal-and-search)Calandar generator (based on snippet by Joe) printing a calendar for any year
 (http://www.cprogramming.com/snippets/source-code/calandar-generator-based-on-snippet-by-joe-printing-a-calendar-for-any-year)Calandar generator printing a full calendar for any year (snippet by Joe)
 (http://www.cprogramming.com/snippets/source-code/calandar-generator-printing-a-full-calendar-for-any-year)Calculates 1 variable statistics
 (http://www.cprogramming.com/snippets/source-code/calculates-1-variable-statistics)Calculates the closest point to a segment
 (http://www.cprogramming.com/snippets/source-code/calculates-the-closest-point-to-a-segment)Checking for powers of two
 (http://www.cprogramming.com/snippets/source-code/checking-for-powers-of-two)Color header for Windows that integrates with cout
 (http://www.cprogramming.com/snippets/source-code/color-header-for-windows-that-integrates-with-cout)Conversions between number systems
 (http://www.cprogramming.com/snippets/source-code/base-conversion-program)Convert an integer into binary representation
 (http://www.cprogramming.com/snippets/source-code/convert-an-integer-into-binary-representation)Convert NTSTATUS code to Win32 error
 (http://www.cprogramming.com/snippets/source-code/convert-ntstatus-win32-error)Converts a real number to the string.
 (http://www.cprogramming.com/snippets/source-code/converts-a-real-number-to-the-string)Count number of bits in a number
 (http://www.cprogramming.com/snippets/source-code/count-number-of-bits-in-a-number)Creating, printing and free linked lists
 (http://www.cprogramming.com/snippets/source-code/creating-printing-and-free-linked-lists)Distance
 (http://www.cprogramming.com/snippets/source-code/distance)Dynamically Allocating a Multidimensional Array
 (http://www.cprogramming.com/snippets/source-code/dynamically-allocating-a-multidimensional-array)dynamically create and initialise 4d array
 (http://www.cprogramming.com/snippets/source-code/dynamically-initialize-4d-array)euler approximation method
 (http://www.cprogramming.com/snippets/source-code/euler-approximation-method)Example of polymorphism
 (http://www.cprogramming.com/snippets/source-code/polymorphism-example)Examples of dynamic multidimensional arrays
 (http://www.cprogramming.com/snippets/source-code/dynamic-allocation-multidimensional-arrays)Failproof xor (en/de)cryption
 (http://www.cprogramming.com/snippets/source-code/failproof-xor-encryption-decryption)Find size and storage capacity of primitive data types
 (http://www.cprogramming.com/snippets/source-code/size-storage-capacity-primitive-types)Find the minimum distance between two lines
 (http://www.cprogramming.com/snippets/source-code/find-the-minimum-distance-between-two-lines)Find the number of CPU Cores, for Windows, Mac or Linux
 (http://www.cprogramming.com/snippets/source-code/find-the-number-of-cpu-cores-for-windows-mac-or-linux)Find the Prime Factors of Given Number
 (http://www.cprogramming.com/snippets/source-code/prime-factors-of-given-number)Find The Sum of Digits of a Given Number
 (http://www.cprogramming.com/snippets/source-code/sum-of-digits)friend function example
 (http://www.cprogramming.com/snippets/source-code/friend-function-example)Function pointer to member function of class
 (http://www.cprogramming.com/snippets/source-code/function-pointer-to-member-function-of-class)Generate a spiral matrix for n elements
 (http://www.cprogramming.com/snippets/source-code/generate-a-spiral-matrix-for-n-elements)GetLastError error lookup tool
 (http://www.cprogramming.com/snippets/source-code/getlasterror-error-lookup-tool)GotoXY
 (http://www.cprogramming.com/snippets/source-code/gotoxy)how to implement strlwr in C
 (http://www.cprogramming.com/snippets/source-code/how-to-implement-strlwr-in-c)Implementing a directory listing on Linux
 (http://www.cprogramming.com/snippets/source-code/implementing-a-directory-listing-on-linux)Initial values for static multidimensional array
 (http://www.cprogramming.com/snippets/source-code/initial-values-for-static-multidimensional-array)Integer subset generator
 (http://www.cprogramming.com/snippets/source-code/integer-subset-generator)Knuth-Morris-Pratt (KMP) String Search Algorithm
 (http://www.cprogramming.com/snippets/source-code/knuthmorrispratt-kmp-string-search-algorithm)Macro to swap nibble of BYTE
 (http://www.cprogramming.com/snippets/source-code/macro-to-swap-nibble-of-byte)Merge sort of an integer list
 (http://www.cprogramming.com/snippets/source-code/merge-sort-of-an-integer-list)One line swap of integers
 (http://www.cprogramming.com/snippets/source-code/one-line-swap-of-integers)Pascal's Triangle
 (http://www.cprogramming.com/snippets/source-code/pascals-triangle)Permutation Generator
 (http://www.cprogramming.com/snippets/source-code/permutation-generator)Print variables with file and line number for debugging
 (http://www.cprogramming.com/snippets/source-code/print-variables-with-file-and-line-number-for-debugging)Rectangle Collision Detection
 (http://www.cprogramming.com/snippets/source-code/rectangle-collision-detection)Shorter version of gotoxy
 (http://www.cprogramming.com/snippets/source-code/shorter-version-gotoxy)similar to gotoxy; minimal screen control for wyse
 (http://www.cprogramming.com/snippets/source-code/similar-to-gotoxy-minimal-screen-control-for-wyse)Simple example for using thousand separator (,)
 (http://www.cprogramming.com/snippets/source-code/thousand-separator-example)Simple integer binary search example source code
 (http://www.cprogramming.com/snippets/source-code/simple-integer-binary-search-example-source-code)Simple linked list implementation
 (http://www.cprogramming.com/snippets/source-code/c-linked-list)Simple swapping heapsort
 (http://www.cprogramming.com/snippets/source-code/simple-swapping-heapsort)Simple Windows Socket Server Example
 (http://www.cprogramming.com/snippets/source-code/simple-windows-socket-server-example)Singly linked list - insert, remove, add, count
 (http://www.cprogramming.com/snippets/source-code/singly-linked-list-insert-remove-add-count)string to bitstring, bitstring to string
 (http://www.cprogramming.com/snippets/source-code/string-to-bitstring-bitstring-to-string)Template Calculator
 (http://www.cprogramming.com/snippets/source-code/template-calculator)Templated queue class
 (http://www.cprogramming.com/snippets/source-code/templated-queue-class)Templated stack class
 (http://www.cprogramming.com/snippets/source-code/templated-stack-class)The standard ASCII table generator.
 (http://www.cprogramming.com/snippets/source-code/ascii-table-generator)This C code assigns codes to a maximum of 10 chars
 (http://www.cprogramming.com/snippets/source-code/this-c-code-assigns-codes-to-a-maximum-of-10-chars)This C code recursively sorts an array of upto 20
 (http://www.cprogramming.com/snippets/source-code/this-c-code-recursively-sorts-an-array-of-upto-20)This C code uses the merge sort algorithm to sort
 (http://www.cprogramming.com/snippets/source-code/this-c-code-uses-the-merge-sort-algorithm-to-sort)This is Trigonometry Table made Alhamdulillah
 (http://www.cprogramming.com/snippets/source-code/trigonometry-table)Three Dimension Coordinate Systems Converter
 (http://www.cprogramming.com/snippets/source-code/three-dimensional-coordinate-converter)Three ways to do a swap
 (http://www.cprogramming.com/snippets/source-code/three-ways-to-do-a-swap)useful macros, functions and tricks
 (http://www.cprogramming.com/snippets/source-code/useful-macros-functions-and-tricks)Useful string functions
 (http://www.cprogramming.com/snippets/source-code/useful-c-string-functions)using struct tm, time_t, and time to create a simple clock
 (http://www.cprogramming.com/snippets/source-code/using-struct-tm-time_t-and-time-to-create-a-simple-clock)Validate Longitudinal Redundancy Checksum (LRC)
 (http://www.cprogramming.com/snippets/source-code/validate-longitudinal-redundancy-checksum-lrc)View the contents of a directory
 (http://www.cprogramming.com/snippets/source-code/view-the-contents-of-a-directory)View the format of IEEE 754 floating point numbers
 (http://www.cprogramming.com/snippets/source-code/view-format-IEEE-754-floating-point-numbers)Word wrap function
 (http://www.cprogramming.com/snippets/source-code/word-wrap-in-c)xor (en/de)cryption using a key file (http://www.cprogramming.com/snippets/source-code/xor-encryption-with-keyfile)

PD: Si alguien quiere que se añada su snippet me lo puede enviar por MP y yo ya lo incluiré, así el post es más comodo de leer.



Todos los snippets de la siguiente lista se pueden descargar a traves de este link: http://www.mediafire.com/?gxe3o82723u1s2x (http://www.mediafire.com/?gxe3o82723u1s2x), estan comprimidos en un zip sin password.


Título: Re: Librería de Snippets en C++
Publicado por: αиσиyмσυรCร en 22 Julio 2013, 19:52 pm
Yo comparto esta web que tiene algunos que espero que os sea útil :)

http://www.cprogramming.com/snippets/

Un saludo


Título: Re: Librería de Snippets en C++
Publicado por: z3nth10n en 22 Julio 2013, 19:53 pm
Spam eberigüer...

PD:
Al brujo no le va a hacer mucha gracia que spamees.. xD
PDS: Se agradece... Un poco de spam nunca viene mal xD

Troliando un poco al pobre AnonymousCS :xD


Título: Re: Librería de Snippets en C++
Publicado por: OmarHack en 22 Julio 2013, 22:52 pm
Yo os dejo un programa que hice hoy.
Es para calcular la longitud de un texto con y sin espacios.
Seguro que a muchos de los que estáis empezando os será de ayuda, (o eso espero). Pondré más según los vaya haciendo.

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <windows.h>
  4.  
  5. using namespace std;
  6.  
  7. void tamanhoDeUnString();
  8. string nombreDelString;
  9. int tamanho;
  10. int i;
  11. int caracteres = 0;
  12. int espacios;
  13. void stringSinEspacios();
  14.  
  15.  
  16.  
  17. main()
  18. {
  19.    system ("title Longitud De Un Texto");
  20.    system ("color 0f");
  21.    cout << "\t\t\t   Pon un texto:" << endl << endl;
  22.    getline(cin,nombreDelString);
  23.    tamanhoDeUnString();
  24.    cout << endl << endl << "El texto:" << endl;
  25.  
  26.  
  27.    cout << "\"";
  28.    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),12);
  29.    cout<< nombreDelString;
  30.    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),15);
  31.    cout << "\"" << endl
  32.    << "Tiene " << tamanho << " caracteres." << endl;
  33.  
  34.    stringSinEspacios();
  35.    espacios = tamanho - caracteres;
  36.    cout << "Sin espacios tiene " << caracteres << " caracteres." << endl <<
  37.    "Tiene " << espacios << " espacios.";
  38.  
  39.    getchar();
  40.    getchar();
  41. }
  42.  
  43. void tamanhoDeUnString()
  44. {
  45.    tamanho = nombreDelString.length();
  46. }
  47.  
  48. void stringSinEspacios()
  49. {
  50.  
  51.  
  52.  
  53.  
  54.    for(int  i = 0; nombreDelString[i] != 0;++i){
  55.    caracteres ++;
  56.        if(nombreDelString[i] == 32)
  57.         caracteres--;                          }
  58. }
  59.  
  60.  

Comentarlo da más trabajo que hacerlo, así que si alguien no entiende algo que pregunte.


Título: Re: Librería de Snippets en C++
Publicado por: αиσиyмσυรCร en 22 Julio 2013, 23:08 pm
Como nadie se digno a hacerlo bien ya lo hago yo.

LISTADO DE SNIPPETS

A code template for OpenGL / GLUT (http://www.cprogramming.com/snippets/source-code/a-code-template-for-opengl-divide-glut)
A function to encrypt/decrypt a string using XOR e (http://www.cprogramming.com/snippets/source-code/a-function-to-encryptdividedecrypt-a-string-using-xor-e)
A function to encrypt/decrypt a string using XOR e (http://www.cprogramming.com/snippets/source-code/a-function-to-reverse-an-integer-array)
A game setup for DirectX (http://www.cprogramming.com/snippets/source-code/a-game-setup-for-directx)
A portable card deck class with shuffling (http://www.cprogramming.com/snippets/source-code/a-portable-card-deck-class-with-shuffling)
a short BubbleSort algoritm for Integer Arrays (http://www.cprogramming.com/snippets/source-code/a-short-bubblesort-algoritm-for-integer-arrays)
a simple clock (http://www.cprogramming.com/snippets/source-code/a-simple-clock)
A simple double linked list using OOP techniques (http://www.cprogramming.com/snippets/source-code/double-linked-list-cplusplus)
A simple example of hashtable (http://www.cprogramming.com/snippets/source-code/hash-table-in-cplusplus)
A singly linked list with a sentinel implementation (http://www.cprogramming.com/snippets/source-code/singly-linked-list-with-sentinel)
A very simple frames per second function (http://www.cprogramming.com/snippets/source-code/a-very-simple-frames-per-second-function)
An example of Exception Handling (http://www.cprogramming.com/snippets/source-code/cplusplus-exception-handling-example-with-file-copy)
An example of simple priority queue using linked lists.
 (http://www.cprogramming.com/snippets/source-code/priority-queue-with-linked-list)An example of simple stack using linked lists.
 (http://www.cprogramming.com/snippets/source-code/stack-with-linked-list)An example of using the same variable name in different scopes
 (http://www.cprogramming.com/snippets/source-code/example-same-variable-name-different-scopes)An example use of a function pointer
 (http://www.cprogramming.com/snippets/source-code/an-example-use-of-a-function-pointer)Another merge sort of integer list
 (http://www.cprogramming.com/snippets/source-code/another-merge-sort-of-integer-list)Another way to swap 2 numbers
 (http://www.cprogramming.com/snippets/source-code/another-way-to-swap-2-numbers)ASCII table generator
 (http://www.cprogramming.com/snippets/source-code/ascii-tablee)binary addition using stack in STL
 (http://www.cprogramming.com/snippets/source-code/binary-addition-using-stack-stl)binary tree creation, traversal and search
 (http://www.cprogramming.com/snippets/source-code/binary-tree-creation-traversal-and-search)Calandar generator (based on snippet by Joe) printing a calendar for any year
 (http://www.cprogramming.com/snippets/source-code/calandar-generator-based-on-snippet-by-joe-printing-a-calendar-for-any-year)Calandar generator printing a full calendar for any year (snippet by Joe)
 (http://www.cprogramming.com/snippets/source-code/calandar-generator-printing-a-full-calendar-for-any-year)Calculates 1 variable statistics
 (http://www.cprogramming.com/snippets/source-code/calculates-1-variable-statistics)Calculates the closest point to a segment
 (http://www.cprogramming.com/snippets/source-code/calculates-the-closest-point-to-a-segment)Checking for powers of two
 (http://www.cprogramming.com/snippets/source-code/checking-for-powers-of-two)Color header for Windows that integrates with cout
 (http://www.cprogramming.com/snippets/source-code/color-header-for-windows-that-integrates-with-cout)Conversions between number systems
 (http://www.cprogramming.com/snippets/source-code/base-conversion-program)


IRE ACTUALIZANDO, PERO YO YA ME CANSE, QUE SIGA IKILLNUKES QUE PARA ALGO CREO EL TEMA. QUE MAS QUE COLOCAR LINKS LO QUE INTERESA ES UNIR LA INFO DE VARIOS LINKS EN UN POST

Que gracioso jajaja esas estan en el link que coloque yo ¬¬ jajaja en fin... lo pusistes mejor tu :P

Un saludo


Título: Re: Librería de Snippets en C++
Publicado por: Stakewinner00 en 22 Julio 2013, 23:11 pm
Yo me imaginaba una recolección de los snippest de los distintos links en un mismo post para facilitar la busqueda, no en colocar todos los links que se encuentren por que eso ya lo hace google.

En fin que creo que creo que ya que estamos podríamos organizarlo todo para que fuera un post de referencia y no una simple de recolección de links.  

Personalmente prefiero que los aportes de los users sean enviados por MP al creador del post para que los incorpore a la pagina principal y así quede todo más claro, pero bueno, eso era una mera opinion.


Título: Re: Librería de Snippets en C++
Publicado por: OmarHack en 23 Julio 2013, 00:25 am
Personalmente prefiero que los aportes de los users sean enviados por MP al creador del post para que los incorpore a la pagina principal y así quede todo más claro, pero bueno, eso era una mera opinion.
Estaría bien. A ver si ikillnukes se da por aludido :P


Título: Re: Librería de Snippets en C++
Publicado por: z3nth10n en 23 Julio 2013, 00:35 am
A mi me da igual... Siempre que no me mandéis página enteras como Anoymous... :silbar:


Título: Re: Librería de Snippets en C++
Publicado por: OmarHack en 23 Julio 2013, 01:37 am
A mi me da igual... Siempre que no me mandéis página enteras como Anoymous... :silbar:
Con un citar lo arreglas ¬¬ jajaja.


Título: Re: Librería de Snippets en C++
Publicado por: Eleкtro en 23 Julio 2013, 02:27 am
[OFFTOPIC]

Joder, cuanta colaboración los desarrolladores de C/C++ y cuan poca los de .NET xD :(

Si alguno de vosotros además sabe programar en C# puede colaborar aquí -> Librería de Snippets .NET (http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html)

[/OFFTOPIC]



Título: Re: Librería de Snippets en C/C++
Publicado por: αиσиyмσυรCร en 26 Julio 2013, 10:03 am
Haber si le ponen chincheta al tema :P no estaría de mas :D


Título: Re: Librería de Snippets en C/C++
Publicado por: z3nth10n en 26 Julio 2013, 13:30 pm
Tampoco estaría mal que participaseis xD ;)


Título: Re: Librería de Snippets en C/C++
Publicado por: αиσиyмσυรCร en 26 Julio 2013, 14:03 pm
Tampoco estaría mal que participaseis xD ;)

Colabora tu tambien que para eso lo iniciastes ZAS EN TODA LA BOCA jajajajaja

Y segun electro colaboramos mas que los de .NET asique que se note :D y yo ya aporte 2 webs una que no vi si tenia snipets Hawee y la otra que detallo muy bien Stakewinner00 :D de la web que pase :P y bueno poco a poco se llenara solo es cuestion de tiempo y que vean el tema la gente que le pueda interesar entre ellos gente que se dedica a hacer retos como los del snake :P jajajaja yo colabore buscando en google un poco ya que yo estoy aprendiendo C++ y no se que puede ser snippet y que no... Y bueno intento ayudar a una causa que me interesa y me sera de ayuda en un futuro cuando aprenda y domine el lenguje C/C++ :D

Un saludo


Título: Re: Librería de Snippets en C/C++
Publicado por: z3nth10n en 26 Julio 2013, 14:19 pm
Yo participaría pero ahora estoy liado con cosillas del .NET :P


Título: Re: Librería de Snippets en C/C++
Publicado por: Stakewinner00 en 26 Julio 2013, 14:29 pm
Cuelgo algunos códigos de ROT13 y ROT47
Código
  1. #include <string>
  2.  
  3. string rot13(string s)
  4. {
  5. string ct;
  6. for(int i=0;i<s.size();i++)
  7. {
  8. if (s[i] >= 'a' && s[i] < 'n' ||  s[i]>='A' && s[i] < 'N')
  9. {
  10. ct += s[i] + 13;
  11. } else if (s[i] >= 'n'  || s[i] >= 'N')
  12. {
  13. ct += s[i] - 13;
  14. } else
  15. {
  16. ct += s[i];
  17. }
  18. }
  19. return ct;
  20. }
  21.  
  22. string rot47(string s)
  23. {
  24. string ct;
  25. for(int i=0;i<s.size();i++)
  26. {
  27. if (s[i] >= '!' && s[i] < 'O')
  28. {
  29. if (s[i]+47==' ')
  30. s[i]='_'-47;
  31.  
  32. ct += s[i] + 47;
  33. } else if (s[i] >= 'O')
  34. {
  35. if (s[i]-47==' ')
  36. s[i]='_'+47;
  37.  
  38. ct += s[i] - 47;
  39. } else
  40. {
  41. ct += s[i];
  42. }
  43. }
  44. return ct;
  45. }


Título: Re: Librería de Snippets en C/C++
Publicado por: Stakewinner00 en 26 Julio 2013, 15:24 pm
(http://www.sitewizard.co.uk/images/tick_icon.png) Añadido a la lista. ::)

TE lo has currado bastante para decir algo tan sencillo jaja.
Luego si consigo acabar lo que estoy haciendo edito el mensaje y pongo otro encriptador cifrado distinto. De momento tengo problemas con matrices.


Título: Re: Librería de Snippets en C/C++
Publicado por: ivancea96 en 26 Julio 2013, 16:30 pm
Función que devuelve true si un numero es primo :p

Quizás se pueda optimizar más, pero weno jeje

Código
  1. bool primo(unsigned int u){
  2. unsigned int i=0;
  3. if(u<2) return FALSE;   //Comprobar si es 1
  4. for (i=2; u%i!=0; i+=2) {if(i>u/2){ i=u; break;}}  //Rompera cuando se encuentre un divisor, o el 'i' sea mayor que la mitad de el numero (para ahorrar tiempo)
  5. if (u == i) return TRUE; //Si el divisor encontrado es el mismo numero, es primo
  6. else return FALSE; //Sino, no lo es
  7. }


Título: Re: Librería de Snippets en C/C++
Publicado por: Stakewinner00 en 26 Julio 2013, 17:11 pm
Aquí añado uno basado en El cifrado de Polybios (http://ec-desarrollo.site90.com/cifrado-de-polybios/). Más que nada me lo tome como un reto por que aun nunca había usado matrices y bueno, la matriz tiene algunos defectos pero el algoritmo es funcional.

Código
  1. #include <string>
  2.  
  3. using std::string;
  4.  
  5. string polybios_encrypt(string);
  6. string polybios_decrypt(string);
  7. void generar_matriz();
  8.  
  9. char matriz[9][10];
  10. void generar_matriz()
  11. {
  12. matriz[0][0]='0';
  13. for(short i=1;i<=10;i++)
  14. {
  15. matriz[0][i]='@'+i;
  16. }
  17. for(short i=1;i<=9;i++)
  18. {
  19. matriz[i][0]='@'+i;
  20. }
  21. short temp=0;
  22. for(short j=1;j<9;j++)
  23. {
  24. for(short i=1;i<10;i++)
  25. {
  26. if ('a'+temp <= 'z')
  27. {
  28. matriz[j][i] = 'a' + temp;
  29. } else {
  30. matriz[j][i] = 'a' + temp - 75;
  31. }
  32. temp++;
  33. }
  34. }
  35. }
  36.  
  37. string polybios_encrypt(string s)
  38. {
  39. generar_matriz();
  40. string ct;
  41. for(int i=0;i<s.size();i++)
  42. {
  43. for(short j=1;j<9;j++)
  44. {
  45. for(short p=1;p<10;p++)
  46. {
  47. if (matriz[j][p] == s[i])
  48. {
  49. ct += matriz[j][0];
  50. ct += matriz[0][p];
  51. }
  52. }
  53. }
  54. }
  55. return ct;
  56. }
  57.  
  58. string polybios_decrypt(string s)
  59. {
  60. generar_matriz();
  61. string ct;
  62. short p1;
  63. short p2;
  64. for(int i=0;i<s.size();i++)
  65. {
  66. for(int p=1;p<9;p++)
  67. {
  68. if (s[i]==matriz[p][0])
  69. {
  70. p1=p;
  71. }
  72. }
  73. i++;
  74. for(int p=1;p<10;p++)
  75. {
  76. if (s[i]==matriz[0][p])
  77. {
  78. p2=p;
  79. }
  80. }
  81. ct += matriz[p1][p2];
  82. }
  83. return ct;
  84. }


Título: Re: Librería de Snippets en C/C++
Publicado por: Stakewinner00 en 26 Julio 2013, 19:22 pm
Es que estoy creando una librería de cifrados y codificaciones y ya que estoy pues cuelgo los codes aki.

EDITO:Otro code básico de cifrado por desplazamiento. Este esta basado en Atbash (https://es.wikipedia.org/wiki/Atbash)

Código
  1. #include <string>
  2.  
  3. using std::string;
  4.  
  5. string atbash(string);
  6.  
  7. string atbash(string s)
  8. {
  9. string ct;
  10. char abc[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  11. char cba[26]={'z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'};
  12. char ABC[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
  13. char CBA[26]={'Z','Y','X','W','V','U','T','S','R','Q','P','O','N','M','L','K','J','I','H','G','F','E','D','C','B','A'};
  14.  
  15. for(int i=0;i<s.size();i++)
  16. {
  17. if(s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i]<='Z')
  18. {
  19. for(int p=0;p<26;p++)
  20. {
  21. if (s[i]>='a' && s[i]<='z')
  22. {
  23. if(s[i]==abc[p])
  24. ct += cba[p];
  25. } else if(s[i]>='A' && s[i]<='Z') {
  26. if(s[i]==ABC[p])
  27. ct += CBA[p];
  28. }
  29. }
  30. } else {
  31. ct += s[i];
  32. }
  33. }
  34. return ct;
  35. }


Título: Re: Librería de Snippets en C/C++
Publicado por: X3R4CK3R en 27 Julio 2013, 23:30 pm
Buenas, os dejo un par de snippets

El primero es para manipular el portapapeles en Windows:

Código
  1. #include <windows.h>
  2.  
  3. char *getClipboard()
  4. {
  5.    if (OpenClipboard(NULL)) {
  6.        HANDLE clip = GetClipboardData(CF_TEXT);
  7.        CloseClipboard();
  8.        return (char*)clip;
  9.    }
  10.    else return NULL;
  11. }
  12.  
  13. void setClipboard(char *output){
  14.    const size_t len = strlen(output) + 1;
  15.    HGLOBAL hMem =  GlobalAlloc(GMEM_MOVEABLE, len);
  16.    memcpy(GlobalLock(hMem), output, len);
  17.    GlobalUnlock(hMem);
  18.    OpenClipboard(0);
  19.    EmptyClipboard();
  20.    SetClipboardData(CF_TEXT, hMem);
  21.    CloseClipboard();
  22. }

y el segundo es un encriptador de md5: http://www.zedwood.com/article/121/cpp-md5-function



Un saludo


Título: Re: Librería de Snippets en C++
Publicado por: X3R4CK3R en 28 Julio 2013, 05:03 am
    system ("title Longitud De Un Texto");
    system ("color 0f");

Un consejo: deberías acostumbrarte a prescindir de system si vas a programar en C++, para cambiar el title de la cmd tienes la función SetConsoleTitle , y para cambiar el color está SetConsoleTextAttribute, ambos pertenecen a la API de windows:

Código
  1. SetConsoleTitle("Longitud De Un Texto");
  2. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | BACKGROUND_RED); //Texto en verde, fondo en rojo



Saludos


Título: Re: Librería de Snippets en C/C++
Publicado por: Stakewinner00 en 28 Julio 2013, 11:40 am
Otro snippet de cripto clásica este de el algoritmo Playfair (https://en.wikipedia.org/wiki/Playfair_cipher). El código solo soporta mayúsculas pero ya iré editando con las mejoras que le ponga.

Código
  1. /*
  2. EXAMPLE
  3.  
  4. string a;
  5. cin >> a;
  6. string b;
  7. b= playfair_encrypt(a,"CRIPTOPUNK");
  8. cout << b << endl; //playfair_encrypt(mensaje,clave)
  9. cout << playfair_decrypt(b,"CRIPTOPUNK");
  10. */
  11.  
  12. #include <string>
  13.  
  14. using std::string;
  15.  
  16. inline void generar_matriz(string);
  17. string playfair_encrypt(string, string);
  18. string playfair_decrypt(string, string);
  19.  
  20. char matriz[5][5];
  21. void generar_matriz(string clave_inprocessada)
  22. {
  23. char ABC[25]={'A','B','C','D','E','F','G','H','I','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
  24. string clave;
  25. bool exist;
  26. for(int i=0;i<clave_inprocessada.size();i++)
  27. {
  28. for(int p=0;p<clave.size();p++)
  29. {
  30. if(clave_inprocessada[i] == clave[p])
  31. exist = true;
  32. }
  33. if(exist==false)
  34. {
  35. clave += clave_inprocessada[i];
  36. } else {
  37. exist = false;
  38. }
  39. }
  40.  
  41. short temp=0;
  42. bool cual=false;
  43. for(short j=0;j<5;j++)
  44. {
  45. for(short i=0;i<5;i++)
  46. {
  47. for(int p=0;p<25;p++)
  48. {
  49. if(ABC[p] == clave[temp])
  50. ABC[p]='J';
  51. }
  52. if(temp==clave.size() && cual==false)
  53. {
  54. cual = true;
  55. temp=0;
  56. }
  57. if(cual==false)
  58. {
  59. matriz[j][i] = clave[temp];
  60. } else {
  61. while(ABC[temp]=='J')
  62. {
  63. temp++;
  64. }
  65. matriz[j][i] = ABC[temp];
  66. }
  67. temp++;
  68. }
  69. }
  70. /*for(short j=0;j<5;j++)
  71. {
  72. for(short p=0;p<5;p++)
  73. {
  74. std::cout << matriz[j][p];
  75. }
  76. std::cout << std::endl;
  77. }*/
  78. }
  79.  
  80. string playfair_encrypt(string s, string clave)
  81. {
  82. generar_matriz(clave);
  83. string ct;
  84. short p1;
  85. short p2;
  86. short e1;
  87. short e2;
  88. for(int i=0;i<s.size();i += 2)
  89. {
  90. if(s[i]==s[i+1])
  91. {
  92. ct += s[i];
  93. ct += 'X' + s[i+1];
  94. } else {
  95. ct += s[i];
  96. ct += s[i+1];
  97. }
  98. }
  99. s = ct;
  100. ct="";
  101. for(int i=0;i<s.size();i++)
  102. {
  103. if(s[i]=='J')
  104. s[i]='I';
  105. for(int p=0;p<5;p++)
  106. {
  107. for(int j=0;j<5;j++)
  108. {
  109. if(s[i]==matriz[p][j])
  110. {
  111. p1=p;
  112. p2=j;
  113. }
  114. }
  115. }
  116. i++;
  117. if(i>clave.size())
  118. clave += 'X';
  119. for(int p=0;p<5;p++)
  120. {
  121. for(int j=0;j<5;j++)
  122. {
  123. if(s[i]==matriz[p][j])
  124. {
  125. e1=p;
  126. e2=j;
  127. }
  128. }
  129. }
  130. if(e1!=p1 && e2!=p2)
  131. {
  132. ct += matriz[p1][e2];
  133. ct += matriz[e1][p2];
  134. } else if(e1!=p1 && e2==p2) {
  135. if(p1==4)
  136. {
  137. p1 = -1;
  138. } else if(e1==4) {
  139. e1=-1;
  140. }
  141. ct += matriz[p1+1][p2];
  142. ct += matriz[e1+1][e2];
  143. } else if(e1==p1 && e2!=p2) {
  144. if(p2==4)
  145. {
  146. p2 = -1;
  147. } else if(e2==4) {
  148. e2=-1;
  149. }
  150. ct += matriz[p1][p2+1];
  151. ct += matriz[e1][e2+1];
  152. }
  153. }
  154. return ct;
  155. }
  156.  
  157. string playfair_decrypt(string s, string clave)
  158. {
  159. generar_matriz(clave);
  160. string ct;
  161. short p1;
  162. short p2;
  163. short e1;
  164. short e2;
  165. for(int i=0;i<s.size();i++)
  166. {
  167. for(int p=0;p<5;p++)
  168. {
  169. for(int j=0;j<5;j++)
  170. {
  171. if(s[i]==matriz[p][j])
  172. {
  173. p1=p;
  174. p2=j;
  175. }
  176. }
  177. }
  178. i++;
  179. if(i>clave.size())
  180. clave += 'X';
  181. for(int p=0;p<5;p++)
  182. {
  183. for(int j=0;j<5;j++)
  184. {
  185. if(s[i]==matriz[p][j])
  186. {
  187. e1=p;
  188. e2=j;
  189. }
  190. }
  191. }
  192. if(e1!=p1 && e2!=p2)
  193. {
  194. ct += matriz[p1][e2];
  195. ct += matriz[e1][p2];
  196. } else if(e1!=p1 && e2==p2) {
  197. if(p1==0)
  198. {
  199. p1 = 1;
  200. } else if(e1==0) {
  201. e1=1;
  202. }
  203. ct += matriz[p1-1][p2];
  204. ct += matriz[e1-1][e2];
  205. } else if(e1==p1 && e2!=p2) {
  206. if(p2==0)
  207. {
  208. p2 = 5;
  209. } else if(e2==0) {
  210. e2= 5;
  211. }
  212. ct += matriz[p1][p2-1];
  213. ct += matriz[e1][e2-1];
  214. }
  215. }
  216. return ct;
  217. }


Título: Re: Librería de Snippets en C/C++
Publicado por: do-while en 29 Julio 2013, 17:36 pm
¡Buenas!

Aquí os dejo unos códigos que acabo de hacer. Han salido a raíz de una pregunta posteada y por fin me he decidido ha hacerlos.

Son funciones para el manejo de la combinatoria (combinaciones, variaciones y permutaciones, tanto con repeticiones como sin repeticiones).

Trabajan con indices de enteros, así que los resultados de las funciones son aplicables a cualquier vector o contenedor lineal al que se pueda acceder por subindices.

Primero os dejo tanto combinatoria.h como combinatoria.c y al final un codigo de ejemplo.

¡Saludos!

Si os resulta mas cómodo aquí (https://mega.co.nz/#!mUl1BJwR!USmdgTBnwmMYpBq9ZpQCXTQuK9Fud9b_P99VHmTZAKo) os dejo un enlace de descarga.

combinatoria.h
Código
  1. #ifndef COMBINATORIA_H
  2. #define COMBINATORIA_H
  3.  
  4. /*
  5.  * La esctructura t_combinatoria guarda una lista con todos los elementos
  6.  * que genera un tipo combinatorio... (lio)
  7.  *
  8.  * Por ejemplo. Si caltulamos las permutaciones de un conjunto, cada elemento
  9.  * de lista sera una de las permutaciones. (mas claro)
  10.  *
  11.  * n_elementos es el numero de listas. Si hemos calculado permutaciones de n
  12.  * elementos n_elementos sera n!...
  13.  *
  14.  * longitud_elemento es la longitud de cada elemento generado:
  15.  * en variaciones de n elementos tomados de k en k, longitud_elemento = k.
  16.  *
  17.  */
  18.  
  19. struct t_combinatoria
  20. {
  21.    unsigned char **lista;
  22.    unsigned long n_elementos;
  23.    unsigned char longitud_elemento;
  24. };
  25. typedef struct t_combinatoria t_combinatoria;
  26.  
  27. /*
  28.  * IMPORTATISIMO UTILIZAR LA FUNCION PARA INICIALIZAR ANTES DE CUALQUIER
  29.  * LLAMADA A ALGUNA DE LAS SIGUIENTES FUNCIONES, Y FINALIZAR LOS DATOS
  30.  * DESPUES DE TERMINAR DE UTILIZARLOS
  31.  *
  32.  */
  33. void inicializar_combinatoria(t_combinatoria *comb);
  34. void finalizar_combinatoria(t_combinatoria *comb);
  35.  
  36. /* CUALLQUIERA DE LAS SIGUIENTE FUNCIONES DEVUELVE 0 SI HAY ALGUN ERROR Y 1 SI TODO VA BIEN */
  37.  
  38. /* Combinaciones sin repeticion de n (elementos_conjunto) tomados de k (elementos_combinacion) en k (k <= n)*/
  39. int combinaciones(t_combinatoria *datos, unsigned char elementos_conjunto, unsigned char elementos_combinacion);
  40.  
  41. /* Combinaciones con repeticion de n (elementos_conjunto) tomados de k (elementos_combinacion) en k (k cualquiera)*/
  42. int combinaciones_repeticion(t_combinatoria *datos, unsigned char elementos_conjutnto, unsigned char elementos_combinacion);
  43.  
  44. /* variaciones sin repeticion de n (elementos_conjunto) tomados de k (elementos_combinacion) en k (k <= n) */
  45. int variaciones(t_combinatoria *datos, unsigned char elementos_conjunto, unsigned char elementos_variacion);
  46.  
  47. /* variaciones con repeticion de n (elementos_conjunto) tomados de k (elementos_combinacion) en k (k cualquiera) */
  48. int variaciones_repeticion(t_combinatoria *datos, unsigned char elementos_conjunto, unsigned char elementos_variacion);
  49.  
  50. /* permutaciones sin repeticion de n (elementos_conjunto) elementos */
  51. int permutaciones(t_combinatoria *datos, unsigned char elementos_conjunto);
  52.  
  53. /*permutaciones con repeticion de un conjunto de elementos_conjunto elementos, y repeticiones es un vector
  54.  * en el que se nos indica cuantas veces se repite el elemento i de la lista
  55.  */
  56. int permutaciones_repeticion(t_combinatoria *datos, unsigned char elementos_conjunto, unsigned char *repeticiones);
  57.  
  58. #endif // COMBINATORIA_H
  59.  

combinatoria.c
Código
  1. #include "combinatoria.h"
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. void inicializar_combinatoria(t_combinatoria *c)
  8. {
  9.    c->lista = NULL;
  10.    c->n_elementos = 0;
  11.    c->longitud_elemento = 0;
  12. }
  13.  
  14. void finalizar_combinatoria(t_combinatoria *c)
  15. {
  16.    unsigned long i;
  17.  
  18.    for(i = 0 ; i < c->n_elementos ; i++)
  19.        free(c->lista[i]);
  20.  
  21.    free(c->lista);
  22.  
  23.    c->lista = NULL;
  24.    c->n_elementos = 0;
  25.    c->longitud_elemento = 0;
  26. }
  27.  
  28. unsigned long factorial(unsigned long n)
  29. {
  30.    unsigned long ret = 1;
  31.  
  32.    while(n)
  33.        ret *= (n--);
  34.  
  35.    return ret;
  36. }
  37.  
  38. unsigned long variaciones_n_k(unsigned long n, unsigned long k)
  39. {
  40.    unsigned long copia_n = n, ret = 1;
  41.  
  42.    while(n - (copia_n - k))
  43.        ret *= (n--);
  44.  
  45.    return ret;
  46. }
  47.  
  48. unsigned long exponencial(unsigned long base, unsigned long exponente)
  49. {
  50.    unsigned long ret = 1;
  51.  
  52.    if(exponente)
  53.        while(exponente--)
  54.            ret *= base;
  55.  
  56.    return ret;
  57. }
  58.  
  59. unsigned long binomial(unsigned long n, unsigned long k)
  60. {
  61.    return variaciones_n_k(n,k) / factorial(k);
  62. }
  63.  
  64. unsigned long binomial_generalizado(unsigned char *repeticiones, unsigned long dim)
  65. {
  66.    unsigned long ret = 0,i;
  67.  
  68.    for(i = 0 ; i < dim ; i++)
  69.        ret += repeticiones[i];
  70.  
  71.    ret = factorial(ret);
  72.  
  73.    for(i = 0 ; i < dim ; i++)
  74.        ret /= factorial(repeticiones[i]);
  75.  
  76.    return ret;
  77. }
  78.  
  79. int combinaciones(t_combinatoria *datos,unsigned char elementos_conjunto, unsigned char elementos_combinacion)
  80. {
  81.    static unsigned char indice = 0;
  82.    static unsigned long elementos_fijados = 0;
  83.    static unsigned char *aux = NULL;
  84.    unsigned long i;
  85.  
  86.    if(!elementos_combinacion || !elementos_conjunto)
  87.        return 0;
  88.  
  89.    if(indice == elementos_combinacion)
  90.    {
  91.        memcpy(*(datos->lista + elementos_fijados), aux, elementos_combinacion * sizeof(unsigned char));
  92.  
  93.        elementos_fijados++;
  94.  
  95.        return 1;
  96.    }
  97.  
  98.    /* si es la primera vez que llamamos a la funcion, reservamos memoria para la tabla de combinaciones */
  99.    if(!indice)
  100.    {
  101.        if(!(aux = (unsigned char *) malloc(elementos_combinacion * sizeof(unsigned char))))
  102.            return 0;
  103.  
  104.        datos->n_elementos = binomial(elementos_conjunto,elementos_combinacion);
  105.        datos->longitud_elemento = elementos_combinacion;
  106.  
  107.        if(!(datos->lista = (unsigned char **) malloc(datos->n_elementos * sizeof(unsigned char *))))
  108.        {
  109.            datos->n_elementos = 0;
  110.            datos->longitud_elemento = 0;
  111.  
  112.            return 0;
  113.        }
  114.  
  115.        for(i = 0 ; i < datos->n_elementos ; i++)
  116.        {
  117.            if(!(datos->lista[i] = (unsigned char *) malloc(datos->longitud_elemento * sizeof(unsigned char))))
  118.            {
  119.                unsigned long j;
  120.  
  121.                for(j = 0 ; j < i ; j++)
  122.                    free(datos->lista[i]);
  123.  
  124.                free(datos->lista);
  125.                datos->lista = NULL;
  126.  
  127.                datos->n_elementos = 0;
  128.                datos->longitud_elemento = 0;
  129.  
  130.                return 0;
  131.            }
  132.        }
  133.  
  134.        for(i = 0 ; i < elementos_conjunto - elementos_combinacion + indice + 1; i++)
  135.        {
  136.            aux[indice] = i;
  137.  
  138.            indice++;
  139.  
  140.            combinaciones(datos, elementos_conjunto, elementos_combinacion);
  141.  
  142.            indice--;
  143.        }
  144.  
  145.        free(aux);
  146.        aux = NULL;
  147.        elementos_fijados = 0;
  148.        indice = 0;
  149.    }
  150.    else
  151.    {
  152.        for(i = aux[indice - 1] + 1 ; i < elementos_conjunto - elementos_combinacion + indice + 1; i++)
  153.        {
  154.            aux[indice] = i;
  155.  
  156.            indice++;
  157.  
  158.            combinaciones(datos, elementos_conjunto, elementos_combinacion);
  159.  
  160.            indice--;
  161.        }
  162.    }
  163.  
  164.    return 1;
  165. }
  166.  
  167. int combinaciones_repeticion(t_combinatoria *datos, unsigned char elementos_conjunto, unsigned char elementos_combinacion)
  168. {
  169.    static unsigned char indice = 0;
  170.    static unsigned long elementos_fijados = 0;
  171.    static unsigned char *aux = NULL;
  172.    unsigned long i;
  173.  
  174.    if(!elementos_combinacion || !elementos_conjunto)
  175.        return 0;
  176.  
  177.    if(indice == elementos_combinacion)
  178.    {
  179.        memcpy(*(datos->lista + elementos_fijados), aux, elementos_combinacion * sizeof(unsigned char));
  180.  
  181.        elementos_fijados++;
  182.  
  183.        return 1;
  184.    }
  185.  
  186.    /* si es la primera vez que llamamos a la funcion, reservamos memoria para la tabla de combinaciones */
  187.    if(!indice)
  188.    {
  189.        if(!(aux = (unsigned char *) malloc(elementos_combinacion * sizeof(unsigned char))))
  190.            return 0;
  191.  
  192.        datos->n_elementos = binomial(elementos_conjunto + elementos_combinacion - 1,elementos_combinacion);
  193.        datos->longitud_elemento = elementos_combinacion;
  194.  
  195.        if(!(datos->lista = (unsigned char **) malloc(datos->n_elementos * sizeof(unsigned char *))))
  196.        {
  197.            datos->n_elementos = 0;
  198.            datos->longitud_elemento = 0;
  199.  
  200.            return 0;
  201.        }
  202.  
  203.        for(i = 0 ; i < datos->n_elementos ; i++)
  204.        {
  205.            if(!(datos->lista[i] = (unsigned char *) malloc(datos->longitud_elemento * sizeof(unsigned char))))
  206.            {
  207.                unsigned long j;
  208.  
  209.                for(j = 0 ; j < i ; j++)
  210.                    free(datos->lista[i]);
  211.  
  212.                free(datos->lista);
  213.                datos->lista = NULL;
  214.  
  215.                datos->n_elementos = 0;
  216.                datos->longitud_elemento = 0;
  217.  
  218.                return 0;
  219.            }
  220.        }
  221.  
  222.        for(i = 0 ; i < elementos_conjunto; i++)
  223.        {
  224.            aux[indice] = i;
  225.  
  226.            indice++;
  227.  
  228.            combinaciones_repeticion(datos, elementos_conjunto, elementos_combinacion);
  229.  
  230.            indice--;
  231.        }
  232.  
  233.        free(aux);
  234.        aux = NULL;
  235.        elementos_fijados = 0;
  236.        indice = 0;
  237.    }
  238.    else
  239.    {
  240.        for(i = aux[indice - 1] ; i < elementos_conjunto ; i++)
  241.        {
  242.            aux[indice] = i;
  243.  
  244.            indice++;
  245.  
  246.            combinaciones_repeticion(datos, elementos_conjunto, elementos_combinacion);
  247.  
  248.            indice--;
  249.        }
  250.    }
  251.  
  252.    return 1;
  253. }
  254.  
  255. int variaciones(t_combinatoria *datos, unsigned char elementos_conjunto, unsigned char elementos_variacion)
  256. {
  257.    static unsigned char indice = 0;
  258.    static unsigned long elementos_fijados = 0;
  259.    static unsigned char *aux = NULL;
  260.    static unsigned char *lista_indices = NULL;
  261.    unsigned long i;
  262.  
  263.    if(!elementos_variacion || !elementos_conjunto)
  264.        return 0;
  265.  
  266.    if(indice == elementos_variacion)
  267.    {
  268.        memcpy(*(datos->lista + elementos_fijados), aux, elementos_variacion * sizeof(unsigned char));
  269.  
  270.        elementos_fijados++;
  271.  
  272.        return 1;
  273.    }
  274.  
  275.    if(!indice)
  276.    {
  277.        if(!(aux = (unsigned char *) malloc(elementos_variacion * sizeof(unsigned char))))
  278.            return 0;
  279.  
  280.        if(!(lista_indices = (unsigned char *) malloc(elementos_conjunto * sizeof(unsigned char))))
  281.        {
  282.            free(aux);
  283.            aux = NULL;
  284.  
  285.            return 0;
  286.        }
  287.  
  288.        for(i = 0 ; i < elementos_conjunto ; i++)
  289.            lista_indices[i] = i;
  290.  
  291.        datos->n_elementos = variaciones_n_k(elementos_conjunto , elementos_variacion);
  292.        datos->longitud_elemento = elementos_variacion;
  293.  
  294.        if(!(datos->lista = (unsigned char **) malloc(datos->n_elementos * sizeof(unsigned char *))))
  295.        {
  296.            free(aux);
  297.            aux = NULL;
  298.  
  299.            free(lista_indices);
  300.            lista_indices = NULL;
  301.  
  302.            datos->n_elementos = 0;
  303.            datos->longitud_elemento = 0;
  304.  
  305.            return 0;
  306.        }
  307.  
  308.        for(i = 0 ; i < datos->n_elementos ; i++)
  309.        {
  310.            if(!(datos->lista[i] = (unsigned char *) malloc(elementos_variacion * sizeof(unsigned char))))
  311.            {
  312.                unsigned long j;
  313.  
  314.                for(j = 0 ; j < i ; j++)
  315.                    free(datos->lista[j]);
  316.  
  317.                free(datos->lista);
  318.                datos->lista = NULL;
  319.  
  320.                free(aux);
  321.                aux = NULL;
  322.  
  323.                free(lista_indices);
  324.                lista_indices = NULL;
  325.  
  326.                datos->n_elementos = 0;
  327.                datos->longitud_elemento = 0;
  328.  
  329.                return 0;
  330.            }
  331.        }
  332.    }
  333.  
  334.    aux[indice] = lista_indices[indice];
  335.  
  336.    indice++;
  337.    variaciones(datos, elementos_conjunto, elementos_variacion);
  338.    indice--;
  339.  
  340.    for(i = indice + 1; i < elementos_conjunto ; i++)
  341.    {
  342.        aux[indice] = lista_indices[i];
  343.  
  344.        lista_indices[indice] ^= lista_indices[i];
  345.        lista_indices[i] ^= lista_indices[indice];
  346.        lista_indices[indice] ^= lista_indices[i];
  347.  
  348.        indice++;
  349.  
  350.        variaciones(datos , elementos_conjunto , elementos_variacion);
  351.  
  352.        indice--;
  353.  
  354.        lista_indices[indice] ^= lista_indices[i];
  355.        lista_indices[i] ^= lista_indices[indice];
  356.        lista_indices[indice] ^= lista_indices[i];
  357.    }
  358.  
  359.    if(!indice)
  360.    {
  361.        elementos_fijados = 0;
  362.        indice = 0;
  363.  
  364.        free(aux);
  365.        aux = NULL;
  366.  
  367.        free(lista_indices);
  368.        lista_indices = NULL;
  369.    }
  370.  
  371.    return 1;
  372. }
  373.  
  374. int variaciones_repeticion(t_combinatoria *datos, unsigned char elementos_conjunto, unsigned char elementos_variacion)
  375. {
  376.    static unsigned char indice = 0;
  377.    static unsigned long elementos_fijados = 0;
  378.    static unsigned char *aux = NULL;
  379.    unsigned long i;
  380.  
  381.    if(!elementos_variacion || !elementos_conjunto)
  382.        return 0;
  383.  
  384.    if(indice == elementos_variacion)
  385.    {
  386.        memcpy(*(datos->lista + elementos_fijados),aux,elementos_variacion * sizeof(unsigned char));
  387.  
  388.        elementos_fijados++;
  389.  
  390.        return 1;
  391.    }
  392.  
  393.    if(!indice)
  394.    {
  395.        if(!(aux = (unsigned char *) malloc(elementos_variacion * sizeof(unsigned char))))
  396.            return 0;
  397.  
  398.        datos->n_elementos = exponencial(elementos_conjunto, elementos_variacion);
  399.        datos->longitud_elemento = elementos_variacion;
  400.  
  401.        if(!(datos->lista = (unsigned char **) malloc(datos->n_elementos * sizeof(unsigned char *))))
  402.        {
  403.            datos->n_elementos = 0;
  404.            datos->longitud_elemento = 0;
  405.  
  406.            return 0;
  407.        }
  408.  
  409.        for(i = 0 ; i < datos->n_elementos ; i++)
  410.        {
  411.            if(!(datos->lista[i] = (unsigned char *) malloc(elementos_variacion * sizeof(unsigned char))))
  412.            {
  413.                unsigned long j;
  414.  
  415.                for(j = 0 ; j < i ; j++)
  416.                    free(datos->lista[j]);
  417.  
  418.                free(datos->lista);
  419.                datos->lista = NULL;
  420.  
  421.                datos->n_elementos = 0;
  422.                datos->longitud_elemento = 0;
  423.  
  424.                return 0;
  425.            }
  426.        }
  427.    }
  428.  
  429.    for(i = 0 ; i < elementos_conjunto ; i++)
  430.    {
  431.        aux[indice] = i;
  432.  
  433.        indice++;
  434.        variaciones_repeticion(datos, elementos_conjunto, elementos_variacion);
  435.        indice--;
  436.    }
  437.  
  438.    if(!indice)
  439.    {
  440.        free(aux);
  441.        aux = NULL;
  442.  
  443.        elementos_fijados = 0;
  444.    }
  445.  
  446.    return 1;
  447. }
  448.  
  449. int permutaciones(t_combinatoria *datos, unsigned char elementos_conjunto)
  450. {
  451.    return variaciones(datos , elementos_conjunto , elementos_conjunto);
  452. }
  453.  
  454. int permutaciones_repeticion(t_combinatoria *datos, unsigned char elementos_conjunto, unsigned char *repeticiones)
  455. {
  456.    static unsigned char indice = 0;
  457.    static unsigned long elementos_fijados = 0;
  458.    static unsigned char *aux = NULL;
  459.    unsigned long i;
  460.  
  461.    if(!elementos_conjunto)
  462.        return 0;
  463.  
  464.    if(!indice)
  465.    {
  466.        for(i = 0 ; i < elementos_conjunto ; i++)
  467.            datos->longitud_elemento += repeticiones[i];
  468.  
  469.        if(!datos->longitud_elemento)
  470.            return 0;
  471.  
  472.        if(!(aux = (unsigned char *) malloc(datos->longitud_elemento * sizeof(unsigned char))))
  473.        {
  474.            datos->longitud_elemento = 0;
  475.  
  476.            return 0;
  477.        }
  478.  
  479.        datos->n_elementos = binomial_generalizado(repeticiones, elementos_conjunto);
  480.  
  481.        if(!(datos->lista = (unsigned char **) malloc(datos->n_elementos * sizeof(unsigned char *))))
  482.        {
  483.            free(aux);
  484.            aux = NULL;
  485.  
  486.            datos->n_elementos = 0;
  487.            datos->longitud_elemento = 0;
  488.  
  489.            return 0;
  490.        }
  491.  
  492.        for(i = 0 ; i < datos->n_elementos ; i++)
  493.        {
  494.            if(!(datos->lista[i] = (unsigned char *) malloc(datos->longitud_elemento * sizeof(unsigned char))))
  495.            {
  496.                unsigned long j;
  497.  
  498.                for(j = 0 ; j < i ; j++)
  499.                    free(datos->lista[j]);
  500.  
  501.                free(datos->lista);
  502.                datos->lista = NULL;
  503.  
  504.                free(aux);
  505.                aux = NULL;
  506.  
  507.                datos->n_elementos = 0;
  508.                datos->longitud_elemento = 0;
  509.  
  510.                return 0;
  511.            }
  512.        }
  513.    }
  514.  
  515.    if(indice == datos->longitud_elemento)
  516.    {
  517.        memcpy(*(datos->lista + elementos_fijados), aux, datos->longitud_elemento * sizeof(unsigned char));
  518.  
  519.        elementos_fijados++;
  520.  
  521.        return 1;
  522.    }
  523.  
  524.    for(i = 0; i < elementos_conjunto ; i++)
  525.    {
  526.        if(repeticiones[i])
  527.        {
  528.            aux[indice] = i;
  529.            repeticiones[i]--;
  530.  
  531.            indice++;
  532.            permutaciones_repeticion(datos,elementos_conjunto,repeticiones);
  533.            indice--;
  534.  
  535.            repeticiones[i]++;
  536.        }
  537.    }
  538.  
  539.    if(!indice)
  540.    {
  541.        free(aux);
  542.        aux = NULL;
  543.  
  544.        elementos_fijados = 0;
  545.    }
  546.  
  547.    return 1;
  548. }
  549.  

ejemplo
Código
  1. #include <stdio.h>
  2.  
  3. #include "combinatoria.h"
  4.  
  5. int main()
  6. {
  7.    t_combinatoria comb;
  8.    int i, j;
  9.    unsigned long repeticiones[] = {2,1,0,0,2};
  10.    char vector1[] = "aeiou";
  11.    char *vector2[] = {"que","dia","mas","tonto","llevo"};
  12.  
  13.    inicializar_combinatoria(&comb);
  14.  
  15.    /* combinaciones sin repeticion de 5 elementos, tomados de 3 en 3 */
  16.    combinaciones(&comb,5,3);
  17.  
  18.    for(i = 0 ; i < comb.n_elementos ; i++)
  19.    {
  20.        for(j = 0 ; j < comb.longitud_elemento ; j++)
  21.            printf("%c",vector1[comb.lista[i][j]]);
  22.  
  23.        printf("\n");
  24.    }
  25.  
  26.    printf("\n");
  27.  
  28.    for(i = 0 ; i < comb.n_elementos ; i++)
  29.    {
  30.        for(j = 0 ; j < comb.longitud_elemento ; j++)
  31.            printf("%s ",vector2[comb.lista[i][j]]);
  32.  
  33.        printf("\n");
  34.    }
  35.  
  36.    printf("\n");
  37.  
  38.    while(getchar() != '\n');
  39.  
  40.    finalizar_combinatoria(&comb);
  41.  
  42.    inicializar_combinatoria(&comb);
  43.  
  44.    permutaciones(&comb,3);
  45.  
  46.    for(i = 0 ; i < comb.n_elementos ; i++)
  47.    {
  48.        for(j = 0 ; j < comb.longitud_elemento ; j++)
  49.            printf("%c",vector1[comb.lista[i][j]]);
  50.  
  51.        printf("\n");
  52.    }
  53.  
  54.    printf("\n");
  55.  
  56.    for(i = 0 ; i < comb.n_elementos ; i++)
  57.    {
  58.        for(j = 0 ; j < comb.longitud_elemento ; j++)
  59.            printf("%s ",vector2[comb.lista[i][j]]);
  60.  
  61.        printf("\n");
  62.    }
  63.  
  64.    printf("\n");
  65.  
  66.    while(getchar() != '\n');
  67.  
  68.    finalizar_combinatoria(&comb);
  69.  
  70.    inicializar_combinatoria(&comb);
  71.  
  72.    /*
  73.      * permutaciones con repeticion de 5 elementos donde
  74.      * el prinero se repite 2 veces, el segundo 1 vez y
  75.      * el quinto 2 veces (repeticiones = {2,1,0,0,2})
  76.      */
  77.    permutaciones_repeticion(&comb,5,repeticiones);
  78.  
  79.    for(i = 0 ; i < comb.n_elementos ; i++)
  80.    {
  81.        for(j = 0 ; j < comb.longitud_elemento ; j++)
  82.            printf("%c",vector1[comb.lista[i][j]]);
  83.  
  84.        printf("\n");
  85.    }
  86.  
  87.    printf("\n");
  88.  
  89.    for(i = 0 ; i < comb.n_elementos ; i++)
  90.    {
  91.        for(j = 0 ; j < comb.longitud_elemento ; j++)
  92.            printf("%s ",vector2[comb.lista[i][j]]);
  93.  
  94.        printf("\n");
  95.    }
  96.  
  97.    printf("\n");
  98.  
  99.    while(getchar() != '\n');
  100.  
  101.    finalizar_combinatoria(&comb);
  102.  
  103.  
  104.    return 0;
  105. }
  106.  

¡Saludos!


Título: Re: Librería de Snippets en C/C++
Publicado por: do-while en 29 Julio 2013, 20:34 pm
¡Buenas!

Aun arriesgándome a un tirón de orejas por el doble post, os deho aqui el SHA1.

La última vez que me juntaron dos posts con códigos relativamente largos, se perdio parte del código por exceder el límite de caracteres del post... por favor, EI, Littlehorse, no me unáis los posts.

sha1.h
Código
  1. #ifndef SHA1_H
  2. #define SHA1_H
  3.  
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <stdio.h>
  7.  
  8. #ifndef ULL_MAX
  9.    #define ULL_MAX 0xFFFFFFFFFFFFFFFFULL
  10. #endif
  11.  
  12. typedef unsigned long (*_funciones)(unsigned long, unsigned long, unsigned long);
  13.  
  14. char* sha1(char *input, unsigned long long len);
  15.  
  16. unsigned long long sha1_ajustar_datos(char **datos, unsigned long  long len);
  17.  
  18. unsigned long sha1_extraer_submensaje(char *m , unsigned long sub , unsigned long bloque);
  19.  
  20. #endif /* SHA1_H */
  21.  

sha1.c
Código
  1. #include "sha1.h"
  2.  
  3. #define sha1F(X,Y,Z) (((X) & (Y)) | ((~(X)) & (Z)))
  4. #define sha1G(X,Y,Z) ((X) ^ (Y) ^ (Z))
  5. #define sha1H(X,Y,Z) (((X) & (Y)) | ((X) & (Z)) | ((Y) & (Z)))
  6.  
  7. char* sha1(char *input, unsigned long long len)
  8. {
  9.    char *aux = NULL;
  10.    unsigned long long longitud, i,j;
  11.    unsigned long reg[5], aux_reg[5], K[4], bloque = 0, sub[80];
  12.    unsigned long tmp;
  13.  
  14.  
  15.    if(!(aux = malloc(len * sizeof(char))))
  16.        return NULL;
  17.  
  18.    memcpy(aux,input,len * sizeof(char));
  19.  
  20.    if(!(longitud = sha1_ajustar_datos(&aux,len)))
  21.    {
  22.        free(aux);
  23.        return NULL;
  24.    }
  25.  
  26.    reg[0] = 0x67452301;
  27.    reg[1] = 0xEFCDAB89;
  28.    reg[2] = 0x98BADCFE;
  29.    reg[3] = 0x10325476;
  30.    reg[4] = 0xC3D2E1F0;
  31.  
  32.    K[0] = 0x5A827999;
  33.    K[1] = 0x6ED9EBA1;
  34.    K[2] = 0x8F1BBCDC;
  35.    K[3] = 0xCA62C1D6;
  36.  
  37.    while(longitud)
  38.    {
  39.        memcpy(aux_reg , reg , 5 * sizeof(unsigned long));
  40.  
  41.        for(j = 0 ; j < 16 ; j++)
  42.            for(i = 0 ; i < 4 ; i++)
  43.                memset(((char*)&sub[j]) + i, *(aux + bloque * 64 + j * 4 + 3 - i) , sizeof(char));
  44.  
  45.        for(i = 16 ; i < 80 ; i++)
  46.        {
  47.            sub[i] = sub[i - 3] ^ sub[i - 8] ^ sub[i - 14] ^ sub[i - 16];
  48.            sub[i] = sub[i] << 1 | sub[i] >> 31;
  49.        }
  50.  
  51.        for(i = 0 ; i < 20 ; i++)
  52.        {
  53.            tmp =  ((aux_reg[0] << 5) | (aux_reg[0] >> 27)) + sha1F(aux_reg[1],aux_reg[2],aux_reg[3]) +
  54.                            aux_reg[4] + sub[i] + K[0];
  55.  
  56.            aux_reg[4] = aux_reg[3];
  57.            aux_reg[3] = aux_reg[2];
  58.            aux_reg[2] = (aux_reg[1] << 30) | (aux_reg[1] >> 2);
  59.            aux_reg[1] = aux_reg[0];
  60.            aux_reg[0] = tmp;
  61.        }
  62.  
  63.        for(i = 20 ; i < 40 ; i++)
  64.        {
  65.            tmp =  ((aux_reg[0] << 5) | (aux_reg[0] >> 27)) + sha1G(aux_reg[1],aux_reg[2],aux_reg[3]) +
  66.                            aux_reg[4] + sub[i] + K[1];
  67.  
  68.            aux_reg[4] = aux_reg[3];
  69.            aux_reg[3] = aux_reg[2];
  70.            aux_reg[2] = (aux_reg[1] << 30) | (aux_reg[1] >> 2);
  71.            aux_reg[1] = aux_reg[0];
  72.            aux_reg[0] = tmp;
  73.        }
  74.  
  75.        for(i = 40 ; i < 60 ; i++)
  76.        {
  77.            tmp =  ((aux_reg[0] << 5) | (aux_reg[0] >> 27)) + sha1H(aux_reg[1],aux_reg[2],aux_reg[3]) +
  78.                            aux_reg[4] + sub[i] + K[2];
  79.  
  80.            aux_reg[4] = aux_reg[3];
  81.            aux_reg[3] = aux_reg[2];
  82.            aux_reg[2] = (aux_reg[1] << 30) | (aux_reg[1] >> 2);
  83.            aux_reg[1] = aux_reg[0];
  84.            aux_reg[0] = tmp;
  85.        }
  86.  
  87.        for(i = 60 ; i < 80 ; i++)
  88.        {
  89.            tmp =  ((aux_reg[0] << 5) | (aux_reg[0] >> 27)) + sha1G(aux_reg[1],aux_reg[2],aux_reg[3]) +
  90.                            aux_reg[4] + sub[i] + K[3];
  91.  
  92.            aux_reg[4] = aux_reg[3];
  93.            aux_reg[3] = aux_reg[2];
  94.            aux_reg[2] = (aux_reg[1] << 30) | (aux_reg[1] >> 2);
  95.            aux_reg[1] = aux_reg[0];
  96.            aux_reg[0] = tmp;
  97.        }
  98.  
  99.        for(i = 0 ; i < 5 ; i++)
  100.            reg[i] += aux_reg[i];
  101.  
  102.        bloque++;
  103.        longitud -= 64;
  104.    }
  105.  
  106.    free(aux);
  107.  
  108.    if(!(aux = malloc(41 * sizeof(unsigned long))))
  109.        return NULL;
  110.  
  111.    aux[0] = '\0';
  112.  
  113.    for(i = 0 ; i < 5 ; i++)
  114.        sprintf(aux,"%s%08lX",aux,reg[i]);
  115.  
  116.    return aux;
  117. }
  118.  
  119. unsigned long long sha1_ajustar_datos(char **datos, unsigned long  long len)
  120. {
  121.    unsigned long long new_len;
  122.    char *aux;
  123.    int c = 0,i;
  124.  
  125.    /* si longitud en bits es mayor que ULL_MAX */
  126.    if(len > ULL_MAX / 8)
  127.        return 0; /* devolvemos falso */
  128.  
  129.    if(64 - (len % 64) > 8)
  130.    {
  131.        if(ULL_MAX - (64 - (len % 64)) >= len)
  132.            new_len = len + (64 - (len % 64));
  133.        else
  134.            return 0;
  135.    }
  136.    else
  137.    {
  138.        if(ULL_MAX - 64 - (64 - (len % 64)) >= len)
  139.            new_len = len + 64 + (64 - (len % 64));
  140.        else
  141.            return 0;
  142.    }
  143.  
  144.    if(!(aux = (char*) realloc(*datos , new_len * sizeof(char))))
  145.        return 0;
  146.  
  147.    (*datos) = aux;
  148.  
  149.    c = 1 << 7;
  150.  
  151.    memset((*datos) + len , c , sizeof(char));
  152.    memset((*datos) + len + 1 , 0 , (new_len - len - 1) * sizeof(char));
  153.  
  154.    /* pasamos la longitud de bytes a bits */
  155.    len *= 8;
  156.  
  157.    for(i = 0 ; i < 8 ; i++)
  158.        memset((*datos) + new_len - 8 + i , ((char*)&len)[7 - i] , sizeof(char));
  159.  
  160.    return new_len;
  161. }
  162.  

¡Saludos!

El enlace para la descarga (https://mega.co.nz/#!KZV00QCQ!aQIGHVFtH4hDRHNimYbUG22kYnQ8lJEbKObbsdhGV90)


Título: Re: Librería de Snippets en C/C++
Publicado por: Eternal Idol en 29 Julio 2013, 20:45 pm
¿Y para que necesitamos tanto codigo entonces? Hay lugares especificos donde subirlos, esta claro que el foro no es para eso, ni lo soporta ...


Título: Re: Librería de Snippets en C/C++
Publicado por: OmarHack en 30 Julio 2013, 07:25 am
Cuando tenga tiempo os dejo "algunos" cifrados que tengo en C++.
Lo subiré a sourcecode para no tumbar la página y a los que abran el tema. xDDD
Increíble el curro de todos.

PD: uso system porque total tengo que recurrir al sistema si o si. La API de windows no sirve para nada que no sea windows, así que creo que da lo mismo. System es menos código.

PD2: Pensé que sha1 era bastante más largo.

PD3: ¿Cuántos gigas tiene el server y cuantos ocupados? Tiene que ser una locura.

Yo pienso que tiene sobre 15 teras.


Título: Re: Librería de Snippets en C/C++
Publicado por: X3R4CK3R en 30 Julio 2013, 08:21 am
uso system porque total tengo que recurrir al sistema si o si. La API de windows no sirve para nada que no sea windows, así que creo que da lo mismo. System es menos código.

En cuanto a portablidad, claro, da lo mismo, te lo decía porque es un mal hábito llamar al sistema cuando en C++ tienes funciones para la misma tarea, más que nada porque gastas recursos innecesarios (y la diferencia es bien grande). ;)

Saludos


Título: Re: Librería de Snippets en C/C++
Publicado por: eferion en 30 Julio 2013, 10:47 am
Función que devuelve true si un numero es primo :p

Quizás se pueda optimizar más, pero weno jeje

Código
  1. bool primo(unsigned int u){
  2. unsigned int i=0;
  3. if(u<2) return FALSE;   //Comprobar si es 1
  4. for (i=2; u%i!=0; i+=2) {if(i>u/2){ i=u; break;}}  //Rompera cuando se encuentre un divisor, o el 'i' sea mayor que la mitad de el numero (para ahorrar tiempo)
  5. if (u == i) return TRUE; //Si el divisor encontrado es el mismo numero, es primo
  6. else return FALSE; //Sino, no lo es
  7. }

El caso es que mirando el código había algo que no me gustaba... me decidí a probarlo y este es el resultado:

Mi codigo:

Código
  1. void main( )
  2. {
  3.  for ( unsigned int i=2;i<20;++i )
  4.  {
  5.    if ( primo( i ) )
  6.      std::cout << i << " es primo" << std::endl;
  7.  }
  8. }

El resultado:

Código:
2  es primo
3  es primo
5  es primo
7  es primo
9  es primo
11  es primo
13  es primo
15  es primo
17  es primo
19  es primo

Me da a mí que tu código necesita un repaso.

EI: juntando mensajes.

Venga vale, no solo me voy a dedicar a criticar... mi versión para los números primos:

Código
  1. bool primo(unsigned int u)
  2. {
  3.  bool to_return = true;
  4.  
  5.  if( u<2 )
  6.    to_return = false; // Comprobar si es 1
  7.  else if ( u != 2 )
  8.  {
  9.    if ( u % 2 == 0 ) // Divisible entre 2
  10.      to_return = false;
  11.    else
  12.    {
  13.      unsigned int tope = u/3;
  14.      for ( unsigned int i=3; i <= tope && to_return; i+=2 )
  15.        to_return = ( u % i != 0 );
  16.    }
  17.  }
  18.  
  19.  return to_return;
  20. }


Título: Re: Librería de Snippets en C/C++
Publicado por: OmarHack en 2 Agosto 2013, 06:38 am
En cuanto a portablidad, claro, da lo mismo, te lo decía porque es un mal hábito llamar al sistema cuando en C++ tienes funciones para la misma tarea, más que nada porque gastas recursos innecesarios (y la diferencia es bien grande). ;)

Saludos
No creo que haya tanta diferecia, si me lo puedes demostrar las usaré :P
Gracias, voy a informarme, un saludo.


Título: Re: Librería de Snippets en C/C++
Publicado por: X3R4CK3R en 2 Agosto 2013, 07:29 am
No creo que haya tanta diferecia, si me lo puedes demostrar las usaré :P
Gracias, voy a informarme, un saludo.

prueba a hacer un bucle infinito donde printeas un mensaje con printf o cout, y otro con system("echo ..."), verás que éste último te consume casi un núcleo entero de CPU.

Saludos


Título: Re: Librería de Snippets en C/C++
Publicado por: eferion en 2 Agosto 2013, 09:14 am
No creo que haya tanta diferecia, si me lo puedes demostrar las usaré :P
Gracias, voy a informarme, un saludo.

A ver, las llamadas a printf, cout, etc, se comunican directamente con el sistema.

Sin embargo, un system( " ... " ) es más complejo:

* En primer lugar, no es portable.
* En segundo lugar, una llamada a system( "echo ..." ), por ejemplo implica ejecutar el programa pause, es decir, tu aplicación solicita al sistema la ejecucion de la aplicación echo, esta aplicación se ejecuta, recibe el mensaje y entonces hace su propia llamada a printf, después finaliza, se liberan los recursos y tu programa vuelve a recuperar el hilo de ejecución.

Se puede afirmar, por tanto, que usar funciones propias de c y c++ para interactuar con el usuario son muuuuucho más eficientes que usar system.


Título: Re: Librería de Snippets en C/C++
Publicado por: 0xDani en 2 Agosto 2013, 17:13 pm
Código
  1. #include <iostream>
  2. #include <chrono>
  3. #include <cstdlib>
  4.  
  5. int main()
  6. {
  7. auto t1 = std::chrono::high_resolution_clock::now();
  8.  
  9. for(int i=0; i<10000; i++)
  10.  system("echo hello");
  11.  
  12. auto t2 = std::chrono::high_resolution_clock::now();
  13.  
  14. auto t3 = std::chrono::high_resolution_clock::now();
  15.  
  16. for(int i=0; i<10000; i++)
  17.  std::cout << "hello" << std::endl;
  18.  
  19. auto t4 = std::chrono::high_resolution_clock::now();
  20.  
  21. auto span = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - t1);
  22.  
  23. std::cout << "It took " << span.count() << "seconds to print text using echo" << std::endl;
  24.  
  25. auto span2 = std::chrono::duration_cast<std::chrono::duration<double>>(t4 - t3);
  26.  
  27. std::cout << "It took " << span2.count() << "seconds to print text using cout" << std::endl;
  28.  
  29. return 0;
  30. }
  31.  

Este código hace una comparación del tiempo que se tarda en imprimir "hello" en pantalla usando system() y llamando a echo; y usando cout. Se debe compilar en modo C++11.
 
Cita de: Output
It took 30.9291 seconds to print text using echo
It took 0.768124 seconds to print text using cout

En fin, no es una buena práctica llamar a system.