Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Jhonjhon_123

#21
Códigos Fuentes / Apagado-Shutdown Function(Windows)
Febrero 23, 2010, 07:32:54 PM
Alternativa a "system(shutdown -s)"

Código: c
#include <windows.h>

      int main()
      {
      HANDLE hToken;
      TOKEN_PRIVILEGES tokpr;
      if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
      {
      LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tokpr.Privileges[0].Luid);
      tokpr.PrivilegeCount = 1;
      tokpr.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
      if(AdjustTokenPrivileges(hToken, FALSE, &tokpr, 0, (PTOKEN_PRIVILEGES)NULL, 0))
      {
      ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF|EWX_FORCE,0);
      }
      }
      }


Saludos!

Autor: P4|3L0
#22
Códigos Fuentes / Clipboard Manager
Febrero 23, 2010, 07:27:33 PM
Empecé hace poco en C y con la ayuda de Pablo y dreams_eater he terminado mi primera aplicación usando la API de Win, un manejador del portapapeles:

Es sencillo, hay un botón para imprimir lo que hay en el portapapeles y otro que saca los datos introducidos en un Textbox y los mete en el portapapeles.

Para cuando sepa un poco más me gustaría hacer lo mismo con imágenes y archivos :)

Código: c
#include <windows.h>
#include <stdio.h>

#define ID_EDIT 3
#define ID_BUTTON_1 1
#define ID_BUTTON_2 2


HINSTANCE hInst;
const char g_szClassName[] = "myWindowClass";

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    HWND hwndboton1, hwndboton2;
    static HWND hwndEdit;
    static TCHAR text[30];

    switch (iMsg)
    {
        case WM_CREATE:
        hwndboton1 = CreateWindow("button", "Sacar portapapeles",
          WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
          70, 10, 150, 30,
          hwnd, (HMENU) ID_BUTTON_1, hInst, NULL);
        hwndboton2 = CreateWindow("button", "Insertar texto en portapapeles",
          WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
          10, 50, 260, 30,
          hwnd, (HMENU) ID_BUTTON_2, hInst, NULL);
        hwndEdit = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
          30, 95, 230, 20, hwnd, (HMENU) ID_EDIT,
          NULL, NULL);
        return 0;

        case WM_COMMAND:
        switch(LOWORD(wParam))
        {
            case 1:
            {
                char * buffer = NULL;
                if (!OpenClipboard(NULL))
                {
                    SendMessage(hwnd, WM_CLOSE, 0, 0);
                }
                HANDLE hData = GetClipboardData(CF_TEXT);
                char * Portapapeles = (char*)GlobalLock(hData);
                MessageBox(hwnd, Portapapeles,"Portapapeles",MB_ICONINFORMATION|MB_OK);
                GlobalUnlock( hData );
                CloseClipboard();
                break;
            }

            case 2:
                {
                int len = GetWindowTextLength(hwndEdit) + 1;
                GetWindowText(hwndEdit,text,len);
                if (!OpenClipboard(NULL))
                {
                    MessageBox (NULL,"Can't open Clipboard","Error",MB_OK);
                    SendMessage(hwnd, WM_CLOSE, 0, 0);
                }
                EmptyClipboard();
                HANDLE hMem = GlobalAlloc(GMEM_MOVEABLE,strlen(text)+1);
                if (hMem == NULL)
                {
                    MessageBox (NULL,"Can't allocate memory","Error",MB_OK);
                    CloseClipboard();
                    SendMessage(hwnd, WM_CLOSE, 0, 0);
                }
                char * buffer = (char*)GlobalLock(hMem);
                strcpy(buffer, LPCSTR(text));
                GlobalUnlock(hMem);
                SetClipboardData(CF_TEXT,hMem);
                CloseClipboard();
                }

            break;

            default:
            break;
        }
        return 0;

        case WM_DESTROY:
        PostQuitMessage (0);
        return 0;
    }

    return DefWindowProc (hwnd, iMsg, wParam, lParam);
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "Clipboard Manager",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 300, 170,
        NULL, NULL, hInstance, NULL);

    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}


Autor: [N]athaniel
#23
Código: c
#include <windows.h>
#include <stdio.h>

#define ID_BUTTON 1
#define ID_EDIT_1 2
#define ID_EDIT_2 3
#define ID_EDIT_3 4

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
WORD Comando;

/*  Make the class name into a global variable  */
char szClassName[ ] = "CodeBlocksWindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nCmdShow)
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    if (!RegisterClassEx (&wincl))
        return 0;

    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "B. Color changer (?)",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           240,                 /* The programs width */
           160,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    ShowWindow (hwnd, nCmdShow);

    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}


LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND hwndEdit,hwndEdit1,hwndEdit2;
    HFONT hFont;
    HDC hdc;
    PAINTSTRUCT ps;
    HBRUSH BackgroundBrush;
    RECT client_rect;
    static TCHAR text[4], text1[4], text2[4];

    switch (message)
    {
        case WM_CREATE:
            hwndEdit = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
              30, 25, 50, 20, hwnd, (HMENU) ID_EDIT_1,NULL, NULL);
            hwndEdit1 = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
              90, 25, 50, 20, hwnd, (HMENU) ID_EDIT_2,NULL, NULL);
            hwndEdit2 = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
              150, 25, 50, 20, hwnd, (HMENU) ID_EDIT_3,NULL, NULL);
            break;

        case WM_PAINT:
        {
            hdc = BeginPaint(hwnd, &ps);
            int len = GetWindowTextLength(hwndEdit)+1;
            int len1 = GetWindowTextLength(hwndEdit1)+1;
            int len2 = GetWindowTextLength(hwndEdit2)+1;
            GetWindowText(hwndEdit,text,len);
            GetWindowText(hwndEdit1,text1,len1);
            GetWindowText(hwndEdit2,text2,len2);
            GetClientRect(hwnd, &client_rect);
            BackgroundBrush = CreateSolidBrush(RGB(atoi(text),atoi(text1),atoi(text2))); //green background
            FillRect(hdc, &client_rect, BackgroundBrush);
            hFont = CreateFont(
                20, 10, 0, 0,FW_NORMAL, FALSE, FALSE, FALSE,
                ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
                DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Verdana");
            SelectObject(hdc, hFont);
            SetTextColor(hdc,RGB(130,130,130));
            SetBkColor(hdc,RGB(atoi(text),atoi(text1),atoi(text2)));
            TextOut(hdc,13,70,"Inserta el color RGB",20);
            DeleteObject(hFont);
            break;
        }

        case WM_COMMAND:
        {
            InvalidateRect(hwnd, NULL, TRUE);
            Comando = LOWORD(wParam);
            break;
        }

        case WM_DESTROY:
            EndPaint(hwnd, &ps);
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;

        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}


Código "interesante":

Código: c
        case WM_PAINT:
        {
            hdc = BeginPaint(hwnd, &ps);
            int len = GetWindowTextLength(hwndEdit)+1;
            int len1 = GetWindowTextLength(hwndEdit1)+1;
            int len2 = GetWindowTextLength(hwndEdit2)+1;
            GetWindowText(hwndEdit,text,len);
            GetWindowText(hwndEdit,text1,len1);
            GetWindowText(hwndEdit,text2,len2);
            GetClientRect(hwnd, &client_rect);
            BackgroundBrush = CreateSolidBrush(RGB(atoi(text),atoi(text1),atoi(text2))); //green background
            FillRect(hdc, &client_rect, BackgroundBrush);
            hFont = CreateFont(
                20, 10, 0, 0,FW_NORMAL, FALSE, FALSE, FALSE,
                ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
                DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Verdana");
            SelectObject(hdc, hFont);
            SetTextColor(hdc,RGB(130,130,130));
            SetBkColor(hdc,RGB(atoi(text),atoi(text1),atoi(text2)));
            TextOut(hdc,13,70,"Inserta el color RGB",20);
            DeleteObject(hFont);
            break;
        }

        case WM_COMMAND:
        {
            InvalidateRect(hwnd, NULL, TRUE);
            Comando = LOWORD(wParam);
            break;
        }


Simple, tienes tres cajas de texto en el que introduces un valor RGB a cada una y el color de fondo se cambia solo por arte de magia! x)
#24
C / C++ / Tutorial de theForger: Win32 API
Febrero 23, 2010, 06:40:43 PM

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#25
Códigos Fuentes / Calcular areas C++
Febrero 23, 2010, 06:37:31 PM
Aqui os dejo un programa creado por mi, muy simple que sirve para aprender a manejarse con diferentes funciones a la vez. Si tienen alguna duda preguntarmela  ;D

Código: cpp
/* Calcula las areas de cuadrados, rectangulos, triangulos, circulos y rombos.
   01 - 09 - 09 */
   
#include <iostream>
#define PI 3.14159265

float ResCuadrado(float a, float b);
float ResTriangulo(float a, float b);
float ResCirculo(float a);
float ResRombo(float a, float b);

using namespace std;

int main()

{
    int opcion;
    float resultado;
    float a;
    float b;
    while (1)
{
    system("CLS");
    cout << "MENU PRINCIPAL" << endl << endl;
    cout << "Elige que figura quieres calcular: "<< endl;
    cout << "     1 - Cuadrado" << endl << "     2 - Triangulo" << endl;
    cout << "     3 - Circulo " << endl << "     4 - Rombo" << endl;
    cout << "Introduce tu opcion: ";
    cin >> opcion;
    cout << endl;
    cout << "Has elegido: ";
   
    switch (opcion)
    {
           case 1:
                cout << "Calcular el area de un Cuadrado/Rectangulo" << endl;
                resultado = ResCuadrado(a, b);
                cout << resultado << endl;
                system("PAUSE");
                break;
               
           case 2:
                cout << "Calcular el area de un Triangulo" << endl;
                resultado = ResTriangulo(a, b);
                cout << resultado << endl;
                system("PAUSE");
                break;
               
           case 3:
                cout << "Calcular el area de un Circulo" << endl;
                resultado = ResCirculo(a);
                cout << resultado << endl;
                system("PAUSE");
                break;
               
           case 4:
                cout << "Calcular el area de un Rombo" << endl;
                resultado = ResRombo(a, b);
                cout << resultado << endl;
                system("PAUSE");
                break;
           
           default:
                cout << "No has elegido ningua de las opciones disponibles" << endl;
                system("PAUSE");
                break;
    }
}
return 0;
}

float ResCuadrado(float a, float b)
{
      float res;
      cout << "Introduce el primer lado: ";
      cin >> a;
      cout << endl;
      cout << "Introduce el segundo lado: ";
      cin >> b;
      cout << endl;
      res = a * b;
      return res;
}

float ResTriangulo(float a, float b)
{
      float res;
      cout << "Introduce la base: ";
      cin >> a;
      cout << endl;
      cout << "Introduce la altura: ";
      cin >> b;
      cout << endl;
      res = (a * b)/2;
      return res;
}

float ResCirculo(float a)
{
      float res;
      cout << "Introduce el radio: ";
      cin >> a;
      cout << endl;
      res = PI * (a * a);
      return res;
}

float ResRombo(float a, float b)
{
      float res;
      cout << "Introduce la primera diagonal: ";
      cin >> a;
      cout << endl;
      cout << "Introduce la segunda diagonal: ";
      cin >> b;
      cout << endl;
      res = a * b;
      return res;
}


si veis algun fallo comentar por favor

Saludos!!

Autor: Bl4cKn0T3
#26
Códigos Fuentes / Ejemplos Sencillos en C/C++
Febrero 23, 2010, 06:35:59 PM
Ejemplos basicos


Hola mundo
Código: cpp
#include <iostream.h>

#include <stdlib.h>



int main()

{

    cout << "hola mundo" << endl;

    system ("PAUSE > NUL");

return 0;

}


Imprimir 2 variables tipo cadena(string) en una oracion 

Código: cpp

#include <stdio.h>

#include <stdlib.h>

#include <string.h>



int main()

{

    char NOM[80];

    char ADJ[80];

    printf("Hola dime un nombre:  ");

    scanf ("%s", NOM);

     printf("Un adjetivo:  ");

    scanf ("%s", ADJ);

    printf("%s eS %s", NOM , ADJ);

    system ("pause > nul"); 

   

    }



Ejemplo de if anidados y comparacion de variables


Código: cpp
#include <stdlib.h>

#include <stdio.h>

int a,b,c;

int main()

{

    printf("ingresar la 1er nota\n");

    scanf ("%i", &a);

    printf("ingresar la 2do nota\n");

    scanf ("%i", &b);

    printf("ingresar la 3er nota\n");

    scanf ("%i", &c);

    if (c > b & a < c)

    {

          system ("cls");

         printf("la mayor es %i Grupo 3", c);

         }

         else if ( a < b )

          {

              system ("cls");

              printf ("el mayor es %i Grupo 2", b);

              }

              else if ( a > b )

              {

                   system ("cls");

              printf ("el mayor es %i Grupo 1", a);

         }

    system ("pause > nul");

    return 0;

    }


Descomposiscion de un array

Código: cpp
#include <stdlib.h>

#include <stdio.h>

#include <string.h>

int main(void)

{

    char palabra[80];

    int a;

    printf("ingrese una palabra a descomponer\n");

    gets(palabra);

for(a=strlen(palabra); a>=0; a-- )

    {

        printf ("\n %c ", palabra[a]);

    }

    system("pause>nul");

    return 0;

}


Descomposiscion de un array con pausas. :P
Código: cpp
#include <stdio.h> 

#include <stdlib.h>

#include <string.h>

char palabra[80];

int a, b=0;
char palabra[80] = 11101010;

int main(void)

{

    system ("color 0A");

    printf("Palabra:");

    system ("cls");

    printf("\n\n\n");

    for (a = strlen(palabra); b <= a; b++)

    {

        printf("%c\n", palabra[b]);

        system ("@ping -n 0,1 localhost > nul");

        }

    for(a=strlen(palabra); a>=0; a-- )

    {

        printf ("%c\n", palabra[a]);

        system ("@ping -n 0, localhost > nul");

    }

        system ("pause > nul");

}


Ejemplo de variables estructuradas
Código: cpp
#include <stdlib.h>

#include <iostream.h>

int main ()

{

    struct stNueva {

           char pri = a, seg = b; // definiendo variable

           }Dato;

    cout >> Dato.pri >> endl; //imprimiendo primer valor de de la estructura reconocida como dato

    }






Ejemplo de bucle con while
Código: cpp

#include <stdio.h>

#include <stdlib.h>



int main()

{

    int contador;

     contador = 1;

    while (contador < 1000)

    {

    contador = contador + 1;

          printf ("el valor es: %d\n", contador);

    }

    system ("pause > nul");

    }

Identificador de variables
Código: cpp
#include <stdlib.h>

#include <stdio.h>

#include <iostream>

using namespace std;



int main()

{

    //a = 97        0 = 48        5 = 53

    //e = 101       1 = 49        6 = 54

    //i = 105       2 = 50        7 = 55

    //o = 111       3 = 51        8 = 56

    //u = 117       4 = 52        9 = 57

    char cVar;

    int iVar;

    cout << "Pon la letra o numero a verificar" << endl;

    cin >> cVar;

    iVar = int(cVar);

    switch(iVar)

    {

                case 97:

                     cout << "Es una vocal" <<endl;

                     break;

                     case 101:

                          cout << "Es una vocal" <<endl;

                          break;

                          case 105:

                               cout << "Es una vocal" <<endl;

                               break;

                               case 111:

                                    cout << "Es una vocal" <<endl;

                                    break;

                                    case 117:

                                         cout << "Es una vocal" <<endl;

                                         break;

                                         case 48:

                                              cout << "Es un numero" <<endl;

                                              break;

                                              case 49:

                                                   cout << "Es un numero" <<endl;

                                                   break;

                                                   case 50:

                                                        cout << "Es un numero" <<endl;

                                                        break;

                                                        case 51:

                                                             cout << "Es un numero" <<endl;

                                                             break;

                                                             case 52:

                                                                  cout << "Es un numero" <<endl;

                                                                  break;

                                                                  case 53:

                                                                       cout << "Es un numero" <<endl;

                                                                       break;

                                                                       case 54:

                                                                            cout << "Es un numero" <<endl;

                                                                            break;

                                                                            case 55:

                                                                                 cout << "Es un numero" <<endl;

                                                                                 break;

                                                                                 case 56:

                                                                                      cout << "Es un numero" <<endl;

                                                                                      break;

                                                                                      case 57:

                                                                                           cout << "Es un numero" <<endl;

                                                                                           break;

                     default:

                             cout << "No es vocal ni numero" <<endl;

    }

    system("pause");


}



Ejemplo de incremento progresibo atraves del for

Código: cpp
#include <stdio.h>

#include <stdlib.h>

int s;

int main()

{

    printf ("ingrese el numero a al que incrementar progresivamente hasta mil\n");

    scanf ("%i", &s);

    int a;

    for (a=1; a<1001; a++)

    {

        printf ("el numero es %i\n", s+a);

    }

    system ("pause > nul");   

    }


Ejemplo de uso de operador logico OR

Código: cpp
#include <stdio.h> 

#include <stdlib.h>



int main()

{

    int a,b,c;

   

printf("ingrese datos1,2,3, \n");

scanf("%i\n",&a);

scanf("%i",&b);

scanf("\n%i",&c);

printf ("comparando..\n");

if ( a + b == c || c + b == a || c + a == b)

{

          printf ("\niguales");

    }

else

{

     printf("desiguales");

     }

    system ("pause > nul");

    } 

   


Funcion strcat del string
Código: cpp

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(void)

{

     char Nombre[80];

     char Apellido[80];

     printf ("ingrese Nombre: \n");

     scanf ("%s", Nombre);

     printf ("ingrese Apellido: \n");

     scanf ("%s", Apellido);

     strcat (Nombre, Apellido);

     printf ("Su NOmbre Completo es: %s \n\n", Nombre);

     system ("pause > nul");

     }



Ejemplo de funcion strlen (longitud de caracteres)

Código: cpp
#include <stdlib.h>

#include <stdio.h>

#include <string.h>



int main()



{

    char Palabra[80];

    int a;

    printf ("Escriba una palabra:  ");

    scanf ("%s", Palabra);

    a=strlen(Palabra);

    printf("la cantidad de caracteres que lleba es %i", a);

    system ("pause > nul");

    }

#27
Códigos Fuentes / Pequeños programas By Bl4cKn0T3
Febrero 23, 2010, 06:21:44 PM
Aqui os dejo programas que he estado haciendo para practicar, estan programados en C++, en el compilador Dev-C++.
Espero que os sirvan para estudiar un poco mas de C++

1º:
Código: c
//Se introducen 10 numero, se suman y se calcula el mayor y el menor.
//11/8/2009

#include <iostream>
#define TAM 10

int main()
{
    using namespace std;
//Se introducen los 10 números uno a uno
   int x, y;
   float numero[TAM];
   char i;
   x = 0;
   y = 1;
   i = 167; //Para que aparezca el caracter "º"
   do
      {
       if (y == 1) {cout << "Introduce el " << y << "er n\xa3mero: ";}
       else if (y == 3) {cout << "Introduce el " << y << "er n\xa3mero: ";}
       else           {cout << "Introduce el " << y << (char) i<<" n\xa3mero: ";}
       cin >> numero[x];
       cout << endl;
       x++;
       y++;
       }
   while (x < 10);
system("cls");

// Se realiza la suma
    float resultado_suma;
    resultado_suma = 0;
    x = 0;
   do
      {
          resultado_suma = resultado_suma + numero[x];
          x++;
      }
   while (x < 10);
    cout << "El resultado de sumar los 10 n\xa3meros es: " << resultado_suma << endl;

// Se calcula el valor medio
    float valor_medio;
    valor_medio = resultado_suma /10;
    cout << "El valor medio de los 10 n\xa3meros es: " << valor_medio << endl;

// Se calcula el mayor 
         float mayor = 0;
      x = 0;

      cout << "El n\xa3mero mayor es: ";
      for(x=0;x<TAM;x++)
      {
                        if(numero[x] >=mayor)
                        mayor=numero[x];
      }
    cout << mayor << endl;
           

// Se calcula el numero menor
    float menor;
    x=0;
       
    cout << "El n\xa3mero menor es: ";
    for(x=0;x<TAM;x++)
      {
                        if(numero[x] <=menor)
                        menor=numero[x];
      }
    cout << menor << endl;
   
    system("PAUSE");
    return 0;

}



2º:
Código: c
/*Programa que lee 10 numeros y los almacena en un array, despues los ordena de menor a mayor y de mayor a menor.*/
//16 - 8 - 2009
//----------------------------------------------------------------------------------------------------------------
#include <iostream>
#define TAM 10
int main()

{
    using namespace std;
    //introducir los 10 números.
    int x, y;
    char c;
    int numero[10];
    numero[10] = 0;
    x = 0;
    y = 1;
    c = 167; //Para que aparezca el caracter "º".
    for(x=0; x < 10; x++)
            {
             if (y == 1) {cout << "Introduce el " << y << "er n\xa3mero: " ;}
             else if (y == 3) {cout << "Introduce el " << y << "er n\xa3mero: " ;}
             else             {cout << "Introduce el " << y << (char) c<<" n\xa3mero: " ;}
             cin >> numero[x];
             cout << endl;
             y++;
            }
    system("CLS");
    //---------------------------------------------------------------------------------------------------
    //Expone los numeros introducidos
    cout << "Estos son los n\xa3meros: " << endl;
    y = 1;
    for(x=0; x < 10; x++)
             {
                 if (y == 1) {cout << y << "er n\xa3mero: " << numero[x];}
                 else if (y == 3) {cout << y << "er n\xa3mero: " << numero[x];}
                 else             {cout << y << (char) c<<" n\xa3mero: " << numero[x];}
                 y++;
                 cout << endl;
             }
   
    //------------------------------------------------------------------------------------------------------
   
    //Ordenar de menor a mayor.
    int i, j, aux;
    i = 0;
    j = 0;
    for (i=0; i<TAM-1; i++)
    {
        for (j=i+1; j < TAM;j++)
        if (numero[i] > numero[j])
           {
             aux = numero[i];
             numero[i] = numero[j];
             numero[j] = aux;
           }
}       
   
    cout << endl;
    cout << "Ordenados de Menor a mayor:" << endl;
    y = 1;
    i = 1;
    for(i=0; i<TAM;i++)
             {
                 if (y == 1) {cout << y << "er n\xa3mero: " << numero[i];}
                 else if (y == 3) {cout << y << "er n\xa3mero: " << numero[i];}
                 else             {cout << y << (char) c<<" n\xa3mero: " << numero[i];}
                 y++;
                 cout << endl;
             }
   
  //------------------------------------------------------------------------------------------------------
  // Ordenar los numeros de Mayor a menor
     i = 0;
     j = 0;
     for (i=0; i<TAM-1; i++)
     {
        for (j=i+1; j < TAM;j++)
        if (numero[i] < numero[j])
           {
             aux = numero[i];
             numero[i] = numero[j];
             numero[j] = aux;
           }
}       
   
    cout << endl;
    cout << "Ordenados de Mayor a menor:" << endl;
    y = 1;
    i = 1;
    for(i=0; i<TAM;i++)
    {
                 if (y == 1) {cout << y << "er n\xa3mero: " << numero[i];}
                 else if (y == 3) {cout << y << "er n\xa3mero: " << numero[i];}
                 else             {cout << y << (char) c<<" n\xa3mero: " << numero[i];}
                 y++;
                 cout << endl;
             }
   
    system("PAUSE");
    return 0;
}


3º:
Código: c
/*Programa que muestra una tabla 5 x 5 de 25 valores introducidos por el usuario
y suma las columnas y las filas por separado.
Se le añadira un menu para elegir que fila o columna se suma.
Intentar que sa salida de datos sea lo mas clara posible.*/
//17 - 08 - 2009
//--------------------------------------------------------------------------------
#include <iostream>


int main()
{
    using namespace std;
   
    float tabla[5][5];
    int opcion;
    int opcion2;
    int opcion3;
    float resultado_suma;
    resultado_suma = 0;
    char t;
    int x;
    int y;
    int z;
    char c;
    float resultado[5];
    c = 167; //Para que aparezca el caracter "º".
    t = 63;
   
    cout << "Introduce 25 n\xe9meros para completar la tabla" << endl << endl << endl;
    cout << " \xa8Como quieres completar la tabla" << (char) t << " \xa8Por filas o por columnas" << (char) t << endl;
    cout << " Elige una opci\xe0n: " << endl << endl;
    cout << "       1 - Por columnas" << endl << "       2 - Por filas" << endl;
    cin >> opcion;
   
    switch (opcion)
    {
           case 1:
                {
                cout << "Has elegido la opci\xe0n POR COLUMNAS" << endl << endl;
                cout << "Primera columna" << endl;
                x = 0;
                y = 0;
                z = 1;
                for (y = 0; y < 5; y++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la primera columna:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la primera columna:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la primera columna:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Has elegido la opci\xe0n POR COLUMNAS" << endl << endl;
                cout << "Segunda columna" << endl;
                x = 1;
                y = 0;
                z = 1;
                for (y = 0; y < 5; y++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la segunda columna:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la segunda columna:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la segunda columna:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Has elegido la opci\xe0n POR COLUMNAS" << endl << endl;
                cout << "Tercera columna" << endl;
                x = 2;
                y = 0;
                z = 1;
                for (y = 0; y < 5; y++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la tercera  columna:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la tercera  columna:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la tercera  columna:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Has elegido la opci\xe0n POR COLUMNAS" << endl << endl;
                cout << "Cuarta columna" << endl;
                x = 3;
                y = 0;
                z = 1;
                for (y = 0; y < 5; y++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la cuarta  columna:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la cuarta  columna:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la cuarta  columna:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Has elegido la opci\xe0n POR COLUMNAS" << endl << endl;
                cout << "Quinta columna" << endl;
                x = 4;
                y = 0;
                z = 1;
                for (y = 0; y < 5; y++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la quinta columna:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la quinta columna:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la quinta columna:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Esta es tu tabla:" << endl;
                }
                break;
//-----------------------------------------------------------------------------------------------------------------------

                case 2:
                {   
                cout <<  "Has elegido la opci\xe0n POR FILAS" << endl << endl;
                cout << "Primera fila" << endl;
                x = 0;
                y = 0;
                z = 1;
                for (x= 0; x< 5; x++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la primera fila:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la primera fila:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la primera fila:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Has elegido la opci\xe0n POR FILAS" << endl << endl;
                cout << "Segunda fila" << endl;
                x = 0;
                y = 1;
                z = 1;
                for (x = 0; x < 5; x++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la segunda fila:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la segunda fila:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la segunda fila:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Has elegido la opci\xe0n POR FILAS" << endl << endl;
                cout << "Tercera fila" << endl;
                x = 0;
                y = 2;
                z = 1;
                for (x = 0; x < 5; x++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la tercera  fila:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la tercera  fila:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la tercera  fila:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Has elegido la opci\xe0n POR FILAS" << endl << endl;
                cout << "Cuarta fila" << endl;
                x = 0;
                y = 3;
                z = 1;
                for (x = 0; x < 5; x++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la cuarta fila:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la cuarta fila:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la cuarta fila:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Has elegido la opci\xe0n POR FILAS" << endl << endl;
                cout << "Quinta fila" << endl;
                x = 0;
                y = 4;
                z = 1;
                for (x = 0; x < 5; x++)
                {
                    if (z == 1) {cout << "Introduce el " << z << "er n\xa3mero de la quinta fila:";}
                    else if (z == 3) {cout << "Introduce el " << z << "er n\xa3mero de la quinta fila:";}
                    else {cout << "Introduce el " << z << (char) c << " n\xa3mero de la quinta fila:";}
                    cin >> tabla[x][y];
                    z++;
                }
                system("CLS");
               
                cout << "Esta es tu tabla:" << endl;
                }
                break;

    }
//----------------------------------------------------------------------------------------------------------------------
// Tabla de valores
             
             cout << "------------------------------"<< endl;
             cout << "|" << tabla[0][0] << "|" << tabla[1][0] << "|" << tabla[2][0] << "|" << tabla[3][0] << "|" << tabla[4][0] << "|"<< endl;
             cout << "------------------------------"<< endl;
             cout << "|" << tabla[0][1] << "|" << tabla[1][1] << "|" << tabla[2][1]<< "|" << tabla[3][0] << "|" << tabla[4][1] << "|"<< endl;
             cout << "------------------------------"<< endl;
             cout << "|" << tabla[0][2] << "|" << tabla[1][2] << "|" << tabla[2][2] << "|" << tabla[3][2] << "|" << tabla[4][2] << "|"<< endl;
             cout << "------------------------------"<< endl;
             cout << "|" << tabla[0][3] << "|" << tabla[1][3] << "|" << tabla[2][3] << "|" << tabla[3][3] << "|" << tabla[4][3] << "|"<< endl;
             cout << "------------------------------"<< endl;
             cout << "|" << tabla[0][4] << "|" << tabla[1][4] << "|" << tabla[2][4] << "|" << tabla[3][4] << "|" << tabla[4][4] << "|"<< endl;
             cout << "------------------------------"<< endl;

// Sumas de columnas o filas

            cout << "Elige que quieres sumar" << endl << endl;
            cout << "       1 - Por columnas" << endl << "       2 - Por filas" << endl;
            cin >> opcion2;
           
            switch (opcion2)
            {
                   case 1:
                   {
                   cout << "Ahora elige que columna quieres sumar" << endl;
                   cout << "Introduce el numero de la columna que deseas sumar" << endl;
                   cin >> opcion3;
                   
                       switch (opcion3)
                       {
                              case 1:
                              cout << "La suma de la primera columna es: ";
                              x = 0;
                              y = 0;
                              for(y = 0; y < 5; y++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                              break;
                             
                              case 2:
                              cout << "La suma de la segunda columna es: ";
                              x = 1;
                              y = 0;
                              for(y = 0; y < 5; y++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                              break;
                             
                              case 3:
                              cout << "La suma de la tercera columna es: ";
                              x = 2;
                              y = 0;
                              for(y = 0; y < 5; y++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                             
                              break;
                              case 4:
                              cout << "La suma de la cuarta columna es: ";
                              x = 3;
                              y = 0;
                              for(y = 0; y < 5; y++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                              break;
                             
                              case 5:
                              cout << "La suma de la quinta columna es: ";
                              x = 4;
                              y = 0;
                              for(y = 0; y < 5; y++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                              break;
                       }
                       break;
//--------------------------------------------------------------------------------------------------------------

                   case 2:
                       {
                       cout << "Ahora elige que fila quieres sumar" << endl;
                       cout << "Introduce el numero de la fila que deseas sumar" << endl;
                       cin >> opcion3;
                       
                       switch (opcion3)
                       {
                              case 1:
                              cout << "La suma de la primera fila es: ";
                              x = 0;
                              y = 0;
                              for(x = 0; x < 5; x++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                              break;
                             
                              case 2:
                              cout << "La suma de la segunda fila es: ";
                              x = 0;
                              y = 1;
                              for(x = 0; x < 5; x++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                              break;
                             
                             
                              case 3:
                              cout << "La suma de la tercera fila es: ";
                              x = 0;
                              y = 2;
                              for(x = 0; x < 5; x++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                              break;
                             
                              case 4:
                              cout << "La suma de la cuarta fila es: ";
                              x = 0;
                              y = 3;
                              for(x = 0; x < 5; x++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                              break;
                             
                              case 5:
                              cout << "La suma de la quinta fila es: ";
                              x = 0;
                              y = 4;
                              for(x = 0; x < 5; x++)
                              {
                                    resultado_suma = resultado_suma + tabla[x][y];
                              }
                              cout << resultado_suma;
                              break;
                       }
                     
                       
                   }
                   break;
                   cout << endl;
   
}
}
system("PAUSE");
return 0;
}



Código: c
//Programa que almacena en un array los nombres y numeros de telefono de 10 personas. Es capaz de buscar el nombre correspondiente a un numero o viceversa
//Debe de tener un menú.
//18 - 08 - 2009
//--------------------------------------------------------------------------------------------------------------------------------------------------------

#include <iostream>
#include <cstring>
#define TAM 10

int main()
{
    using namespace std;
    int opcion;
    struct stPersona {
           char nombre[20];
           char telefono[9];
           } persona[TAM];
    char nombre1[20];
    char telefono1[9];
    char j;
    char k;
    int q;
    int x;
    int z;
    int o;
    j = 166;
    k = 167;
    opcion = 0;
    while(1){
    system("CLS");
    cout << "Este es el men\xa3 del programa" << endl << endl << endl << "Elige una opci\xe0n:" << endl << endl;
    cout << "      1 - Introducir datos de personas" << endl;
    cout << "      2 - Mostrar los datos de las personas" << endl;
    cout << "      3 - Borrar datos existentes" << endl;
    cout << "      4 - Buscar por nombre" << endl;
    cout << "      5 - Buscar por n\xa3mero de telefono" << endl;
    cout << "      6 - Salir" << endl << endl;
    cout << "      Tu elecci\xe0n es: ";
    cin >> opcion;
    switch (opcion)
          { case 1:
                {
                     
                      system("CLS");
                      cout << "Has elegido: INTRODUCIR DATOS DE PERSONAS" << endl << endl;
                      cout << "Introduce la posicion que ocupara los datos que vas a introducir, recuerda que tan solo hay 10 ranuras: ";
                      cin >> x;
                      x = x - 1;
                      q = x + 1;
                            cout << "Introduce los datos de la " << q << (char)j << " persona" << endl;
                            cout << "          Nombre: ";
                            cin >> persona[x].nombre;
                            cout << endl;
                            cout << "          N" << (char)k << " de telefono: ";
                            cin >> persona[x].telefono;
                            cout << endl;
                }
                            cout << "ACCION FINALIZADA SATISFACTORIAMENTE" << endl;
                            system("PAUSE");
                      break;
               
           
           case 2:
                {
                      system("CLS");
                      for (x = 0; x < TAM; x++)
                {
                       cout << "Nombre: "<< persona[x].nombre << endl << " N" << (char)k << " de telefono: " << persona[x].telefono << endl << endl;
                                     
                }
                system("PAUSE");
                }   
                break;           
           
           case 3:
                {
                      system("CLS");
                      x = 0;
                      cout << "Has elegido: BORRAR LOS DATOS EXISTENTES" << endl << endl;
                      for(x=0;x<TAM;x++)
                              {
                                    persona[x].nombre[0] = '\0';
                                    persona[x].telefono[0] = '\0';
                              }
                      cout << "DATOS BORRADOS SATISFACTORIAMENTE" << endl;
                      system("PAUSE");
                      break;

           case 4:
                {
                      system("CLS");
                      z = 0;
                      x = 0;
                      cout << "Has elegido: BUSCAR POR NOMBRE" << endl << endl;
                      cout << "Escribe el nombre de la persona que deseas buscar: ";
                      cin >> nombre1;
                      for (x = 0; x < TAM; x++)
                      {
                          o = strcmp(nombre1 , persona[x].nombre);
                          if (o == 0)
                             {
                                       cout << "Nombre: "<< persona[x].nombre << endl << "N" << (char)k << " de telefono: " << persona[x].telefono << endl;
                                       z++;
                             }
                          }
                if (z == 0) {cout << "Ese nombre no existe en la base de datos" << endl;}
                system("PAUSE");
                break;
           
           case 5:
                {
                      system("CLS");
                      x = 0;
                      z = 0;
                      cout << "Has elegido: BUSCAR POR TELEFONO" << endl << endl;
                      cout << "Escribe el telefono de la persona que deseas buscar: ";
                      cin >> telefono1;
                      for (x = 0; x < TAM; x++)
                      {
                           o = strcmp(telefono1 , persona[x].telefono);
                           if (o == 0)
                             {
                                       cout << "Nombre: "<< persona[x].nombre << endl << "N" << (char)k << " de telefono: " << persona[x].telefono << endl;
                                       z++;
                             }
                      } 
                     if (z == 0) {cout << "Ese nombre no existe en la base de datos" << endl;}
                      system("PAUSE");
                      break;
           case 6:
                {
                exit(0);
                }
                }
}                                     
}
}
}
}


Programas con varias funciones y punteros:

Código: c
/*Escribir un programa con una funcion que calcule la longitud de una cadena de caracteres.
El nombre de la funcion ser
LongitudCadena, debe devolver un "int", y como parametro de entrada debe tener un puntero a "char".*/
#include <iostream>
using namespace std;


int LongitudCadena(char *palabra);
int main()
{
   char* palabra = new char[20];
   int longitud;
   cout << "Introduce una palabra: ";
   cin >> palabra;
   cout << endl;
   longitud = LongitudCadena(palabra);
   if (longitud == 1) {cout << "La palabra tiene: " << longitud << " caracter" << endl;}
   else {cout << "La palabra tiene: " << longitud << " caracteres" << endl;}
   delete [ ] palabra;
   system("PAUSE");
   return 0;
}
int LongitudCadena(char *palabra)
{   
        int i;
        i = 0;
        while(palabra[i] != '\0')
        {
        i++;
        }
        return i;
}


Código: c
//Escribir un programa con una funcion que busque un caracter determinado
//en una cadena.
//El nombre de la funcion debe ser BuscaCaracter y debe devolver un int con la
//posicion en la que fue encontrado el carácter.
//Los parametros de entrada serán una cadena y un caracter.
//---------------------------------------------------------------------------------

#include <iostream>

using namespace std;
int BuscaCaracter(char* palabra);
int main()
{
    char c;
    c = 167;
    int posicion_caracter;
    char* palabra = new char[20];
    posicion_caracter = BuscaCaracter(palabra);
    posicion_caracter = posicion_caracter + 1;
    cout << "La letra fue encontrada en la posicion n" << (char) c << " " << posicion_caracter << endl;
    system("PAUSE");
    delete [ ] palabra;
    return 0;
}

int BuscaCaracter(char* palabra)
{
    char letra;
    int pos;
    cout << "Introduce una palabra: ";
    cin >> palabra;
    cout << endl;
    cout << "Introduce la letra que quieres buscar: ";
    cin >> letra;
    pos = 0;
    while (palabra[pos] != letra)
    {
    pos++;
    }
    return pos;
}


Autor: Bl4cKn0T3
#28
Códigos Fuentes / Extractor de strings de binarios
Febrero 23, 2010, 05:59:06 PM
Muestra o guarda en un archivo los strings de un binario

Código: c

// By Codr_joe
// Bajo la licencia GPLv3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Cambiar lo que hay entre parentesis para cambiar los caracteres que se buscaran por defecto
#define default_chars "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789 \n!?\0" // El \0 hace falta para indicar el fin del string

// Cambiar para distinto numero minimo de caracteres
#define default_chnum 4

int chnum; // Numero de caracteres necesarios para considerarlo un string

void rmv_jmp(char *str);
void rmv_strs(char *str,char * tgt);
void add_strs(char *str,char * tgt);
long f_getsize(char *fname);
int exist(char *fname);
void string_find(char * selected);
int es_char(char ch,char* str);


main(int argc,char* argv[]){

chnum=default_chnum;

char selected_chars[256]; // 255 Caracteres + 1 para el \0 (vamos, digo yo que ese no
  // va a ser parte de un string, no?)
char opt;

strcpy(selected_chars,default_chars);
while (1){
printf("\n\n\t\tString Finder\n\n");
printf("Selecciona una opcion:\n");
printf("\ta) Cambiar caracteres a buscar\n");
printf("\tb) Mostrar caracteres a buscar\n");
printf("\tc) Cambiar numero caracteres a buscar (%i)\n",chnum);
printf("\td) Iniciar busqueda\n");
printf("\tx) Salir\n");
printf("->"); fflush(stdout);
opt=getchar();
getchar(); // Uno para recojer la variable y otro para sacar el [Enter] del medio
switch (opt){
case ('a'):
printf("\n\nSelecciona una opcion:\n");
printf("\ta) Añadir a la lista\n");
printf("\tb) Eliminar de la lista\n");
printf("La lista es:\n%s\n",selected_chars);
printf("->"); fflush(stdout);
opt=getchar(); getchar();
if ((opt=='a') || (opt=='b')){
char new_str[256];
printf("Introduce el/los caracteres: "); fflush(stdout);
fgets(new_str,256,stdin);
rmv_jmp(new_str);
if (opt=='a')
add_strs(new_str,selected_chars);
else
rmv_strs(new_str,selected_chars);
}
else {
printf("Opcion no valida\n");
printf("Pulsa [enter] para continuar");fflush(stdout);
getchar();
printf("\n");
}
break;
case ('b'):
printf("Caracteres:%s\n",selected_chars);
printf("Pulsa [enter] para continuar");fflush(stdout);
getchar();
printf("\n");
break;
case ('c'):
printf("Introduce el nuevo numero: ");
scanf("%i",&chnum);
getchar();
break;
case ('d'):
string_find(selected_chars);
break;
case ('x'):
exit(0);
break;
default:
printf("Opcion [%c] no valida.\n",opt);
printf("Pulsa [enter] para continuar");fflush(stdout);
getchar();
printf("\n");
}
}
}

void string_find(char * selected_chars){
char new_char;

char in_fname [256];
memset(in_fname,'\0',256);
FILE * fin;

char out_fname [256];
memset(out_fname,'\0',256);
FILE * fout;

while (1){
printf("Introduce un archivo donde buscar: ");fflush(stdout);
fgets(in_fname,256,stdin);
rmv_jmp(in_fname);
if (exist(in_fname))
break;
else
printf("El archivo no existe o no tienes permisos de lectura\n");
}

fin=fopen(in_fname,"rb");
if (fin==NULL)
exit(1);
while (1){
printf("Introduce un archivo donde guardar los resultados (o stdout para mostrar por pantalla): ");fflush(stdout);
fgets(out_fname,256,stdin);
rmv_jmp(out_fname);
if ((strcmp(out_fname,"stdout")==0) || (!exist(out_fname)))
break;
else{
printf("El archivo ya existe, los resultados se añadiran al final (S/n)\n");
new_char=getchar(); getchar();
if (new_char!='n')
break;
}
}
if (strcmp(out_fname,"stdout")==0)
fout=stdout;
else
fout=fopen(out_fname,"ab");
if (fout==NULL)
exit(1);

char chars[256];
int i=0;
int es_ch;
long str_start;
long count=0;
long e=count;
long fsize=f_getsize(in_fname);
long refresh_rate=fsize/100;

printf("\n");
while (!feof(fin)){

fscanf(fin,"%c",&new_char);
es_ch=es_char(new_char,selected_chars);

if (es_ch){
if (i==0)
str_start=ftell(fin);
chars[i]=new_char;
i++;
}

if ((!es_ch && i>=chnum) || i>=255){
chars[i]='\0';
fprintf(fout,"%li--> %s\n",str_start,chars);
i=0;
}

count++;
if (e<count-refresh_rate){
if (fout!=stdout){
printf("\r");
printf("%li / %li",count,fsize);
fflush(stdout);
}
e=count;
}

}
if (fout!=stdout){
printf("\r");
printf("%li / %li\n",fsize,fsize);
fflush(stdout);
close(fout);
}
close(fin);
}

int es_char(char ch,char* lista){
int es_char=0;
int i;
for (i=0;i<strlen(lista);i++){

if (lista[i]==ch){
es_char=1;
break;
}
}
return es_char;
}

void rmv_strs(char *str,char * tgt){
int len=strlen(tgt);
int i,j;
for (i=0;i<strlen(str);i++){
for (j=0;j<len;j++){
if (tgt[j]==str[i]){
tgt[j]=0;
break;
}
}
}
int clean=0;
while (clean==0){
clean=1;
for (i=0;i<len;i++){
if (tgt[i]=='\0'){
for (j=i+1;j<len;j++){
if (tgt[j]!='\0'){
clean=0;
tgt[j-1]=tgt[j];
tgt[j]='\0';
break;
}
}
}
}
}
}

void add_strs(char *str,char * tgt){
int len=strlen(tgt);
int i,j;
for (i=0;i<strlen(str);i++){
for (j=0;j<len;j++){
if (tgt[j]==str[i]){
break;
}
}
if ((tgt[j]!=str[i]) && (len<255)){
tgt[len]=str[i];
len++;
tgt[len]='\0';
}
}
}



void rmv_jmp(char *str){ //Limpia los saltos de linea que puede dejar el fgets
int i;
for (i=0;i<strlen(str);i++){
if (str[i]=='\n')
str[i]='\0';
else if (str[i]!='\0')
continue;
break;
}
}

long f_getsize(char *fname){ //Devuelve el tamaño de un archivo
FILE *f;
long size;
f=fopen(fname,"rb");
if (f!=NULL){
fseek(f,0,SEEK_END); // Vamos al final
size=ftell(f); // Y guardamos la posicion
close(f);
}
else
size=-1;
return size;
}

int exist(char *fname){ //Devuelve 0 si un archivo no existe (o no se puede leer)
FILE *f; // o 1 si existe
int exist;
f=fopen(fname,"rb"); // Ya se que el metodo no es muy preciso
if (f!=NULL){ // pero si no se puede leer para que seguir?
exist=1;
close(f);
}
else
exist=0;
return exist;
}

#29
¿Que son los identificadores de Procesador?

Los identificadores de procesador son constantes definidas, dependiendo de nuestra maquina. Estas constantes nos sirven para identificar fácilmente en programación el SO, la arquitectura del ordenador, o cosas tan simples como la versión de nuestro SO, el tamaño de algunos tipos de datos en nuestra maquina, entre otros.


¿Cómo puedo saber los identificadores de procesador en mi maquina?

Desde una shell tipeamos:

Código: php

cpp -dM FICHERO_VACÍO


Por ejemplo, la salida en mi maquina es:



¿Pero, y toda esa información, para que nos sirve?

Daré un ejemplo muy sencillo, pero muy útil, mas de alguno de ustedes (quienes programan) sabran que el uso de la función system no se recomienda por su portabilidad, bueno pues usando los identificadores del procesador nosotros podemos simular la portabilidad de nuestros programas, el como lo veremos mediante un código de ejemplo.


Código: c

#include <stdio.h>

#ifdef __unix__
#define LIMPIA "clear"
#endif
#ifdef __WIN32__
#define LIMPIA "cls"
#endif

int main(void)
{
printf("texto que sera limpiado\n");
system(LIMPIA);
printf("\nlimpio\n");
return 0;
}



#ifdef & #endif

Son dos de las Directivas del procesador del lenguaje C, las que nos sirven para incluir condiciones en tiempo de compilación en nuestros programas.


Es decir: en el caso de este codigo, al momento de compilar:

1º - Se realiza la inclución de la libreria stdio
2º - Se pregunta esta definido __unix__ o __WIN32__ , y dependiendo de este resultado se opta o por definir LIMPIAR como clear o cls, lo que nos resuelve el problema de la compatibilidad entre estos dos SO.

Acá unos screen's, para que vean esto en acción

En Linux






En Windows






Links Interesantes:

- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

PD: Una cita de un coment que hice en mi blog:

CitarSi nos vamos a la portabilidad en si, esto no es muy útil ya que todo esto es en tiempo de compilación, osea que para que la portabilidad sea efectiva, se debería compilar cada vez que se quiera usar el código.

Pero por ej: en mi caso en la Uni a mi para las tareas solo me piden el codigo y los profes lo compilan y prueban, en esta situación a mi se me hace muy útil :) .

Hago toda esa aclaración, porque me imagino que mas de alguno va a tener ganas de criticarme el que yo usara la palabra portabilidad al tocar este tema, es mas una forma de introducir el concepto.
#30
Pues nada, un Bomber, calentito.

Uso:
-Eliges una de las opciones
-(Si te pide que introduzcas una frase la introduces)Si no te lo pide, metes el tiempo que va a estar bombardeando
-Cuando te salga Espera 3 segundos, haces click en el cuadro de conversacion de la victima.

Ventajas:
Puedes tener varias conversaciones abiertas.
Es potente
Al ser modo consola, no se cuelga, es más dificil que se cuelgue, que otros bombardeadores más antiguos.


Código: c
#include <windows.h>
#include <stdio.h>
//Author:
//P4|3L0 : The person who doesn't must be called
//Thanks xassiz for being the victim of the Bomber
//27, Sept, 2009 13:50


void BufferRand0m( char* Res, int longitud )
{
    char* caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,.-´ç`+";

    for( int b = 0; b < longitud; b++ )
        Res[ b ] = caracteres[ rand( ) % strlen( caracteres ) ];

    Res[ longitud ] = 0;
};

void funcionkey( char* cadena )
{
    int longitud = strlen( cadena );
    bool ShiftDown = false;

    for( int b = 0; b < longitud; b++ )
    {
        short tecla = VkKeyScan( cadena[ b ] );

        if( ( tecla >> 8 ) & 1 )
        {
            keybd_event( VK_LSHIFT, 0, 0, 0 );
            ShiftDown = true;
        }

        keybd_event( (unsigned char)tecla, 0, 0, 0 );

        if( ShiftDown )
        {
            keybd_event( VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0 );
            ShiftDown = false;
        }
    }
};

void funcionspam( void )
{
    char Res[ 512 ], Met[ 32 ], Lon[ 8 ], Tiempo[ 8 ];
     unsigned long EmpiezaContar;
    bool Comp32 = false;

    int b, sended = 0;

    while( true )
    {
        printf( "Para ayuda /? - For Help /?\n" );
        printf( "shell> " );

        scanf( "%s", Met );

        if( !strcmp( Met, "/?" ) )
        {
            system("Cls");
            printf( "      AYUDA  \n");
            printf( "1 - Aleatorio - Randomiz3\n" );
            printf( "2 - Tu mensaje - Your text\n" );
            printf( "3 - Emoticon0s\n" );
            printf( "4 - Ayuda - Help\n" );
            printf( "5 - Salir - Exit\n" );

            Comp32 = true;
        }

        switch( atoi( Met ) )
        {
        case 1:
            printf( "Longitud de la cadena aleatoria - Length of each random string\n" );
            printf( "shell> " );

            scanf( "%s", Lon );
            printf( "Tiempo de Spam - Time for Spam\n" );
            printf( "shell> " );
            scanf( "%s", Tiempo );
            printf( "Espera 3 segund0s - Wait 3 sec0nds\n" );
            Sleep( 3000 );

            EmpiezaContar = GetTickCount( );

            while( ( ( GetTickCount( ) - EmpiezaContar ) / 1000 ) < (unsigned)atoi( Tiempo ) )
            {
                BufferRand0m( Res, atoi( Lon ) );

                funcionkey( Res );
                keybd_event( VK_RETURN, 0, 0, 0 );

                sended++;
            }

            printf( "Mensajes mandados %d Sended messages\n", sended );

            break;
        case 2:
            printf( "Introduce tu texto (- : espacio) - Enter your text (- : Space)\n" );
            printf( "shell> " );

            scanf( "%s", Res );

           printf( "Tiempo de Spam - Time for Spam\n" );

            printf( "shell> " );

            scanf( "%s", Tiempo );

            for( b = 0; b < (signed)strlen( Res ); b++ )
            {
                if( Res[ b ] == '-' )
                    Res[ b ] = 0x20;
            }

            printf( "Espera 3 segund0s - Wait 3 sec0nds\n" );
            Sleep( 3000 );

            EmpiezaContar = GetTickCount( );

            while( ( ( GetTickCount( ) - EmpiezaContar ) / 1000 ) < (unsigned)atoi( Tiempo ) )
            {
                funcionkey( Res );
                keybd_event( VK_RETURN, 0, 0, 0 );

                sended++;
            }

            printf( "Mensajes mandados %d Sended messages\n", sended );

            break;
        case 3:
            printf( "\nEsta es la parte del floodeo de em0tic0n0s. Pon el tiempo de spam y disfruta..\n" );
            printf( "\nThis is the part of flood of em0tic0ns. Put your time spam and enjoy ..\n" );
            printf( "shell> " );

            scanf( "%s", Tiempo );

            ZeroMemory( Res, sizeof( Res ) );

            for( b = 0; b < 32; b++ )
                strcat( Res, ":'(:D:):(:S(a)(6)(co)" );

            printf( "Espera 3 segund0s - Wait 3 sec0nds\n" );
            Sleep( 3000 );

            EmpiezaContar = GetTickCount( );

            while( ( ( GetTickCount( ) - EmpiezaContar ) / 1000 ) < (unsigned)atoi( Tiempo ) )
            {
                funcionkey( Res );
                keybd_event( VK_RETURN ,0, 0, 0 );

                sended++;
            }

            printf( "Mensajes mandados %d Sended messages\n", sended );

            break;

        case 4:
        SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED | FOREGROUND_INTENSITY );
        printf("\n Este programa tiene un uso muy simple, solo tienes que poner una opcion de \n las 3 posibles.  Pones la opcion y decides el tiempo que se va a estar mandando\n y cuando te ponga que esperes 3 segundos te diriges a la conversacion y\n aprietas en el cuadro de conversacion\n " );
        printf("\n This program is very simple to use, just to put a choice of the 3 possible. \n You must put the choice and decide how long it's going to be sending, and when\n the programs puts you to wait 3 seconds you're going to click into \n the conversation and the conversation box \n");
        Sleep(3000);

    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );

        break;
        case 5:
            printf( "Adi0s - By3\n" );
            Sleep( 500 );

            ExitProcess( 0 );
            break;
        default:
            if( !Comp32 )
                printf( "Pero que mierdas pones? - What the fuck, you writes?\n" );

            break;
        }

        printf( "\n\n" );
        EmpiezaContar = 0;
        sended = 0;
    }
};

int main( )
{
    SetConsoleTitle( "Cruel Spamming by The person who doesn't must be called" );

    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
    printf( "\tCruel Spamming by The person who doesn't must be called\n" );
    funcionspam( );

    return 0;
};


Autor: P4|3L0
#31
C / C++ / Curso C++ desde Cero
Febrero 23, 2010, 05:44:48 PM
Curso C++ desde Cero By Black Poison

bueno ire poniendo los capitulos conforme tenga tiempo ^^

y espero alguien siga mi curso u.u

si no no tiene caso estarlo escribiendo xD


____________________________________________________________________________________________________________
pues empiezo

para esto usaremos dev-C++

pueden descargarlo de la web del autor

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

bueno ya que lo tengan instalado
vamos a archivo > nuevo > codigo fuente

bueno empezaremos con el codigo mas simple ^^
el Hello world! xD

Código: cpp
#include <iostream.h>
#include <stdlib.h>

int main()
{
    cout << "Hello World" << endl;
    system("PAUSE");
    return 0;
}


bueno lo primero que vemos es esto

Código: cpp
#include <iostream.h>
#include <stdlib.h>


son las librerias, las que hacen que funcionen los comandos que ponemos

se ponen asi

#include <nombre de la libreria>

lo siguiente que vemos es

Código: cpp
int main()
{


la primera linea declara la funcion main

es la funcion con la que inician todos los programas

la segunda linea es la llave que abre la funcion main todo nuestro programa va a ir dentro de las llaves de la funcion main

lo siguiente que vemos es esto

Código: cpp
cout << "Hello World" << endl;
    system("PAUSE");
    return 0;
}


esto es el codigo de nuestro programa

la primera linea "cout << "Hello World" << endl; "

cout es un comando para imprimir en pantalla luego debemos poner "<<" y entre comillas lo que queramos imprimir
en este caso es Hello world endl es para hacer un salto de linea

luego sigue system("pause");

system es para usar los comandos de consola, para los que sepan batch ya sabran los comandos que pueden usar

se debe poner en comando entre parentecis y comillas

y algo muy importante siempre se debe poner ";" al final de cada linea exepto en algunas como la funcion main ^^

luego sigue "return 0;"

que dice que si todo a salido bien regresara 0
y al final tenemos "}" es la llave que termina la funcion main
ahora para compilar el codigo se van a ejecutar > compilar y ejecutar

2 Parte

Variables

las variables son espacios en la memoria para guardar numeros letras o cualquier caracter


int         Tipo de dato ENTERO desde el -32767 hasta el 32767
long int   Tipo de dato ENTERO pero más largo desde el -2.147.483.647 hasta el 2.147.483.647.
float       Tipo de dato numerico con decimales {0.1, 2.9, etc}, desde el 3.4*e-38 hasta el 3.4*e38
double    Tipo de dato numerico con decimales pero con rangos más grandes, desde el 1.7*e-307 hasta ek 1.7*e308
char        Tipo de dato caracter {a, b, c....}
bool        Tipo de dato que solo puede tomar valor "true" o "false"
void         Tipo especial que indica la ausencia de tipo, se usa en funciones que no devuelven ningun valor

la forma en la que se declaran es la siguiente

Código: cpp
<tipo de variable> <nombre de variable>;


por ejemplo para declarar una variable de tipo int con nombre "a"

Código: cpp
int a;


y podemos asignarles valor en cualquier parte del codigo

por ejemplo
Código: cpp

a = 10;


o podemos asignarlo cuando la declaramos

Código: cpp
int a = 10;


int , float y double son para numeros

la forma para declarar char que es la variable para caracteres es diferente

Código: cpp
char <nombre>[<numero de espacios>];


ejemplo
Código: cpp

char a[10];


hay estoy declarando la variable "a" con 10 espacios, osea que puedo guardar 10 caracteres en esa variable

para declarar las variables usaremos el comando "cout"

un ejemplo seria asi

Código: cpp
int a;
a = 10;
cout << a << endl;


el codigo completo seria asi
Código: cpp
#include <iostream.h>
#include <stdlib.h>

int main()
{
    int a;
    a = 10;
    cout << a << endl;
    system("PAUSE>nul");
    return 0;
}







para capturar el valor de una variable se usa el comando cin

Código: cpp
cin >> nombre de la variable;


ejemplo

Código: cpp
int a;
cout << "ingresa un numero: ";
cin  >> a;
cout << endl << a << endl;




lo olvidaba
algo muy importante

los comentarios

se pueden poner de 2 formas

Código: cpp
/*Esto es un comentario*/
// Esto es un comentario


el primero es util cuando queremos poner un comentario en varias lineas

ya que definimos en donde empieza y en donde termina el comentario

y el segundo termina cuando acaba la linea, podemos poner comentarios en cualquier parte de nuestro codigo

3 Parte


Sentencias  y bucles

Bloques

los bloques son partes del codigo que se delimitan con "{" y con "}"

un bloque se considera como una unica sentencia

Bucle "While"


se ejecutara la sentencia indefinidamente mientras la condicion sea verdadera
Código: cpp

while(<condicion>) <sentencia>;


y solo se ejecutara si la condicion es verdadera
si la primera vez que se evalua el bucle la condicion es falsa entonces no se ejecutara la sentencia

un ejemplo seria asi

Código: cpp
int x=0;
    while(x<10) cout << "Bucle While " << x << endl;


la condicion es que la variable "x" sea menor que 10 para que siga ejecutandose la sentencia
y como nunca aumenta el valor de "x" la sentencia se ejecutara infinitamente

pero si le ponemos x++ esto haria que se fuera aumentando el valor en 1 unidad cada que se ejecute ese comando

quedaria asi:
Código: cpp
int x=0;
    while(x++<10) cout << "Bucle While " << x << endl;


entonces el bucle se ejecutaria 10 veces





bucle "do while"

esta sentencia hace lo mismo que while solo que antes de evaluar la condicion, se ejecuta la sentencia

Código: cpp
do <sentencia>; while(<dondicion>);


ejemplo

Código: cpp
int x=0;
    do
    cout << "Bucle While " << x << endl;
    while(x++<10);
    system("PAUSE");




como ven se ejecuto primero la sentencia dandonos primero una linea que dice "Bucle While 0"


Bucle "for"


este bucle es el mas complejo va de esta forma:

Código: cpp
for(<inicializacion>; <condicion>; <incremento>) <sentencia>;


en inicializacion es en donde declaramos las variables

en condicion pues la condicion xD

en incremento es en donde asignamos incremento o decremento de variables

y en sentencia la sentencia un ejemplo de su uso seria asi

Código: cpp
for(int x=0; x<10; x++) cout << "Bucle For " << x << endl;




todo es opcional si no queremos poner uno de los valores bastara con que solo pongamos ";"

bueno con esto acabo lo de bucles ^^


cualquier duda pregunten en este mismo post  ^^
#32
C / C++ / Ejercicios basico Medio[30 EJers]
Febrero 23, 2010, 05:13:04 PM
Aqui les dejo un ejercitario que tenia guardado

Postear los codes en este tema


1. Escriba un programa que imprima el mensaje "Primer programa".
2. Escriba un programa que lea y escriba un carácter.
3. Escriba un programa que te imprima un mensaje de presentación, te pregunte como te llamas y te salude.
4. Escriba el ejercicio de presentación (ejercicio número 5) y que te salude con nombre y apellidos.
5. Escriba un programa que solicite un número y lo escriba en letras.(uno al dies)
6. Escriba un programa que solicite un par de datos y calcule el producto y la diferencia.
7. Escriba un programa que solicite un número y calcule su tabal de multiplicar.
8. Escriba un programa que calcule el área de un triángulo rectángulo, dada la altura y la base.
9.  Escriba un programa que halle el menor de dos números pedidos al usuario.
10.  Escriba un programa que halle el mayor de tres números pedidos al usuario.
11. Escriba un programa que pida al usuario un carácter y un número de repeticiones. Luego imprima el carácter el número de veces especificado.
12. Escriba un programa que imprima una tabla con las cuatro primeras potencias de los números 1 a 10.
13. Escriba un programa que calcule el factorial de un número.
14. Escriba un programa que muestre una tabla de conversiones de temperatura de grados Farenheit a grados Celsius, de 0ºF a 300ºF de 20 en 20ºF.
15. Escriba un programa que dándole el importe exacto de una cantidad te indica el mínimo número de monedas que podrías tener. Las monedas son de 50, 100, y 500 guaranies / dolares / lo que sea .
16. Escriba un programa que ordene un vector (de dimensión máxima 15) por el método de la burbuja.
17. Escriba un programa que imprima una lista de amigos guardados en una agenda (tipo estructura).
18. Escriba un programa para ver las longitudes y valores máximos y mínimos en bytes de los tipos básicos de programación en C.
19. Escriba un programa que muestre la tabla ASCII.
20. Escriba un programa que imprima un mensaje rodeado por un borde, utilizando funciones para dibujar los elementos del borde.
21. Escriba un programa con una función que borre la pantalla emitiendo una serie de caracteres de salto de línea.
22. Escriba un programa que calcule la potencia entera de un número entero de forma iterativa y de forma recursiva.
23. Escriba un programa que inicialice un array de enteros. Calcule e imprima su suma, media, mínimo y máximo.
24. Escriba un programa que contenga dos arrays y utilizando punteros genere un tercer array con la suma de los otros dos.
25. Escriba un programa que utilice una función para intercambiar dos valores. Hacerlo para dos funciones, una con llamada por valor y otra por referencia.
26. Escriba un programa que pida una cadena por el teclado y la imprima después de convertir el primer carácter en mayúscula y el resto en minúsculas.
27. Escriba un programa que lea una cadena desde el teclado y cuente el número de caracteres de tres categorías: letras (a-z y A-Z), dígitos (0-9) y otros caracteres. Utilice las funciones isdigit() e isalpha() definidas en la librería ctype.h.
28. Escriba un programa que lea una cadena y busque un carácter en ella.
29. Escriba un programa que inserte un carácter en una determinada posición de una cadena.
30. Escriba un programa que copie un fichero a otro.
#33
C / C++ / Palabras reservadas C/C++
Febrero 23, 2010, 05:12:05 PM
Este es el listado de las palabras reservadas en C y las que se agragaron en C++






auto

break

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while

Algunas de estas palabras en C tienen nuevos significados o han sido sobrecargados en el mundo de C ++, la lista siguiente muestra las palabras que se han cambiado.


struct

static

const

enum

La siguiente lista muestra las palabras que han sido agregadas en C++.

bool

catch

class

delete

friend

inline

new

namespace

operator

private

protected

public

tempate

this

throw

try

template



    *

      int: un tipo de dato entero con signo de 16, 32 ó 64 bits, dependiendo del compilador. En sistemas de 16 bits su rango de valores es de -32763 a 32762. Para sistemas de 32 bits el rango se de -2147483648 a 2147483647. En sistemas de 64 bits el rango será de 1.7+/-308. Actualmente son muy pocos los compiladores con capacidad de manejar datos de tipo int de 64 bits, lo usual son sistemas de 16 ó 32 bits.
    *

      float: Un número real de 32 bits cuyo rango vá de 3.4+/-38. Generalmente su precisión es de 7 dígitos.
    *

      long: Un número entero de 32 bits de rango igual a -2147483648 a 2147483647.
    *

      double: Un número de 64 bits y de rango igual a 1.7+/-308 con una precisión en general de 15 dígitos.
    *

      short: Un número de 16 bits de rango igual a -32763 a 32762.
    *

      char: Un tipo de dato específico para manejo de caracteres de 8 bits de rango igual a -128 a 127.
    *

      unsigned: Modificador que se aplica a los tipos de datos enlistados arriba, su efecto es eliminar el signo a el tipo de dato aplicado, por ejemplo, para un tipo de dato int podemos especificar unsigned int en cuyo caso el rango para el tipo de dato int cambia de ser -2147483648 a 2147483647, por éste nuevo rango: 0 a 4294967295.
    *

      signed: Modificador que forza al compilador a utilizar un tipo de dato con signo si antes se declaró como de tipo unsigned.
    *

      volatile: Especifica una variable que almacena datos cuyo contenido puede cambiar en cualquier momento sea por la acción del programa ó como reacción de la interacción del usuario con el programa.
    *

      const: Especifica una variable cuyo contenido no puede cambiar bajo ninguna circunstancia.
    *

      enum: Especifica un conjunto de variables que toman valores en un orden específico y consecutivo.
    *

      static: Especifica una variable que sólo puede cambiar por efecto del programa.
    *

      typedef: Define un tipo de dato para fácil manejo del programador basado en los datos definidos por el compilador. Muy útil cuando se programa en lenguajes diferentes al inglés.
    *

      sizeof: Función que devuelve el tamaño en bytes del tipo de dato al que se aplica.

     Otro conjunto de palabras clave nos sirve para especificar instrucciones propias de C con carácter de control del flujo de datos:

    *

      if: Instrucción condicional,
    *

      else: Se utiliza conjuntamente con la instrucción if,
    *

      switch: Estructura condicional,
    *

      case: Define los elementos de una estructura condicional switch,
    *

      default: Define las acciones a ejecutar no especificadas por una instrucción case dentro de una estructura condicional switch,
    *

      break: Obliga a salir de una estructura condicional switch,
    *

      for: Bucle que se ejecuta tantas veces como se cumplan las condiciones especificadas dentro del paréntesis de la instrucción,
    *

      while: Bucle condicional que se ejecuta conforme la condición entre el paréntesis sea cierta,
    *

      do: Bucle condicional que se ejecuta en conjunto con la instrucción while,
    *

      continue: Instrucción para suspender un ciclo de un bucle,
    *

      goto: Instrucción que ejecuta un salto a otra parte del código,

     El siguiente conjunto de palabras clave designa una serie de instrucciones que implementan diversas construcciones útiles en C

    *

      struct: Define una estructura,
    *

      return: Especifica el dato que devuelve una función.
    *

      union: Un tipo de dato compuesto de otros datos definidos,
    *

      register: Permite almacenar un dato en el registro del sistema.
    *

      extern: Especifica una variable ó función que se encuentra en un archivo fuente diferente.
    *

      void: Especifica que una función no devuelve valor alguno.
    *

      auto: Una de las cuatro clases de almacenamiento de datos, auto es la opción por defecto, las otras tres son register, static y extern.

     Adicionalmente su compilador puede definir algunas palabras clave, mismas que estarán enlistadas en la documentación del mismo.







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#34
Buy Bueno, Lo Leere.

Gracias!
#35
Bueno, curiosiando por la web, me encontre un tutorial muy bonito que nos explica de forma facil y rapida como saber si estamos infectados con un keylogger, y si es el caso eliminarlo.





Detectando Y Eliminando Keyloggers

Durante este post volveremos a hablar, como no, de algunas de las herramientas de la suite de Sysinternals, aplicándolas a un caso práctico en donde se analizará el comportamiento de aplicaciones tipo 'keylogger' para aprender a detectarlas y eliminarlas. Para ello utilizaremos tres aplicaciones de Sysinternals, las cuales ya recomendé anteriormente. Estas aplicaciones son No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (ProcMon.exe), No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (ProcExp.exe) y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (autoruns.exe) .

Todas estas aplicaciones y muchas más están contenidas en la suite de Sysinternals, descargable desde No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

ProcessMonitor es una herramienta permite monitorizar todas las llamadas que realizan los procesos con respecto al sistema de archivos, registro de Windows, y creación subprocesos o hilos. Esto nos servirá para mantener nuestro equipo seguro en caso de tener sospechas o indicios de que nuestras conversaciones están siendo capturadas mediante un software que guarda en un fichero, o envía a través de una conexión ftp, email, etc nuestras conversaciones.

Para iniciar el análisis, ejecutaremos la aplicación ProcMon.exe. Nada más abrir esta aplicación nos pedirá que especifiquemos filtros en los eventos capturados, para poder afinar la búsqueda.



Introduciremos dos filtros, que capturarán los eventos de escritura de archivos y envio de datos a través de conexiones TCP.

· FileWrite

· TCP Send

Para ello, desplegaremos el primer 'Listbox' y seleccionaremos 'Operation', en el segundo desplegable seleccionaremos la opción 'is', en el tercer desplegable escribiremos 'WriteFile', y en el ultimo indicaremos 'Include'. Una vez hecho esto haremos clic en 'Add' para agregar este filtro, y a continuación realizaremos los mismos pasos para agregar el filtro de 'TCP Send' en vez de 'WriteFile'. De esta forma estaremos monitorizando todas las escrituras en disco y envío de datos a través de conexiones TCP de cualquier proceso del sistema.

Nos debería quedar un filtro como el siguiente:



Antes de hacer clic en 'OK', deberíamos cerrar todas las aplicaciones posibles que estemos usando, ya que si realizan escrituras en disco o conexiones TCP, sus eventos se verán reflejados y podrían interferir en nuestro análisis, siendo más complejo para nosotros la localización del 'keylogger'.

Una vez esté todo cerrado excepto el ProcessMonitor (ProcMon) , podremos hacer clic en 'OK'.

Ahora, si hacemos clic en la lupa que se ve en la captura de pantalla, empezará a capturar eventos. Si sobre la lupa aparece una 'X' roja es que la captura de eventos está parada, y puede ser iniciada haciendo clic sobre ella.



Ahora, deberíamos forzar al keylogger a que guarde el buffer de lo que estamos escribiendo en un fichero, o lo envíe por TCP a algún equipo. Para ello, abriremos la aplicación Notepad, y escribiremos en ella. Utilizaremos también combinaciones de teclas como 'copiar y pegar', ya que la mayoría de los keyloggers capturan esta combinación y guardan su contenido inmediatamente.



Se puede ver, que la aplicación 'SVCHOST.EXE' está realizando escrituras en la ruta 'C:\Windows\System32\DGL\INFO.DGL' a la par que me dedicaba a escribir en el notepad.

La aplicación 'SVCHOST.EXE' es la encargada de lanzar los servicios instalados en nuestro servicio, por lo que lo más probable es que el 'keylogger' se haya instalado como tal.

Para asegurarnos de que se trata de la aplicación que estamos buscando, analizaremos el contenido del archivo sobre el cual se está escribiendo:



Evidentemente, tal y como se sospechaba, el fichero INFO.DGL contiene el contenido capturado de las pulsaciones de mi teclado.

Ahora ejecutaremos la otra herramienta de Sysinternals: ProcessExplorer (ProcExp.exe). Es importante ejecutar esta aplicación con permisos de administrador.

Ordenaremos la lista de aplicaciones por nombre de proceso, y buscaremos el nombre del servicio para poder pararlo y eliminarlo.



Al analizar los procesos con Process Explorer, observamos varias cosas:

· El 'keylogger' se hace pasar por un servicio que ejecutado a través de SVCHOST.exe original (c:\windows\system32\svchost.exe), sin embargo es ejecutado desde otra ruta (c:\windows\system32\DGL\SVCHOST.EXE).

· El proceso SVCHOST.EXE que corre el 'keylogger' no está firmado por Microsoft, el cual si debería estarlo si fuera un servicio.



Una vez matamos el proceso, vemos que vuelve a ejecutarse. Esto significa que hay otro proceso en memoria que se encarga de la ejecución de c:\Windows\DGL\SVCHOST.EXE cada vez que este no está en ejecución.

Para localizar que proceso se está encargando de la ejecución del 'keylogger' volvemos a utilizar Process Monitor (ProcMon.exe), borraremos los filtros introducidos anteriormente y pondremos un filtro en la detección del evento de operación 'Process Create', quedando como la siguiente captura:



Ahora que estamos auditando los eventos de ejecución de procesos, volveremos a utilizar Process Explorer para matar al proceso 'SVCHOST.EXE', y podremos ver que el proceso que lo vuelve a ejecutar es 'C:\WINDOWS\SYSTEM32\DGL\SERVICES.EXE'.



Tras matar el proceso SERVICES.EXE, se detectó que SVHOST.EXE volvía a llamarlo para asegurarse su ejecución.

Ante estos casos donde existen dos procesos que se ejecutan el uno al otro, es necesario matar al proceso padre y todo el árbol de subprocesos. Esto es posible en Process Explorer haciendo clic sobre 'Kill Process Tree'.



Ahora que no tenemos el Keylogger ejecutado en memoria, deberíamos asegurarnos de su deshabilitación eliminando las entradas del registro, o los mecanismos que utilize para su ejecución en el proximo arranque del sistema. Para ello utilizaremos Autoruns (autoruns.exe) de Sysinternals.



Buscando la cadena '\dgl\' (En File -> Find) localizaremos las entradas que contengan el directorio \DGL\ en su ruta de ejecución, detectando una entrada en 'HKCU\Software\Microsoft\Windows\CurrentVersion\Run' con el nombre de 'SystemKbs'.

Basta con eliminar dicha entrada del registro para asegurarse de que esa aplicación no se volverá a ejecutar en el arranque del sistema. Ahora solo queda eliminar los ficheros de C:\Windows\System32\DGL\ y el 'keylogger' estará completamente borrado.




No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Y Esto mismo se puede aplicar a los troyanos y virus.

Saludos!