• Jueves 14 de Noviembre de 2024, 16:54

Mostrar Mensajes

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


Mensajes - Manzanit0

Páginas: [1]
1
C/C++ / Re:Conversión de un array de caracteres a un array de números
« en: Lunes 4 de Junio de 2012, 14:04 »
A raiz de lo que me comentas, ¿poner char *cadena, no es lo mismo que char cadena[]?

Es decir, si yo declaro:

Código: C
  1. char *cadena = "ABCD";

¿Qué significado tiene?

Por otra parte, te pongo dos versiones. ¿Son ambas correctas?

Versión sin punteros

Código: C
  1. void tonumber(char cadena[]) /*Versión sin punteros*/
  2. {
  3.   char letras[] = "ABCDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  4.   int numeros[100], i, j;
  5.  
  6.   for(i=0; i<25;i++) numeros[i] = i;
  7.   for(i=25; i<50;i++) numeros[i] = (i-25);
  8.  
  9.   for(i=0; i<strlen(cadena); i++){
  10.      for(j=0; j<strlen(letras); j++){
  11.          if(cadena[i] == letras[j])
  12.             cadena[i] = numeros[j];}}
  13.  
  14. }

Versión con punteros:
Código: C
  1. int *tonumber(char *cadena) /*Versión con punteros*/
  2. {
  3.   char letras[] = "ABCDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  4.   int numeros[100], i, j;
  5.   static int *cadenafinal;
  6.  
  7.   for(i=0; i<25;i++) numeros[i] = i;
  8.   for(i=25; i<50;i++) numeros[i] = (i-25);
  9.  
  10.   for(i=0; i<strlen(cadena); i++){
  11.      for(j=0; j<strlen(letras); j++){
  12.          if(cadena[i] == letras[j])
  13.             *(cadenafinal + i) = numeros[j];}}
  14.  
  15.   return *cadenafinal;
  16.  
  17. }

2
C/C++ / Conversión de un array de caracteres a un array de números
« en: Sábado 2 de Junio de 2012, 22:51 »
El caso es que ahora me ha surgido un problema a mi, y llevo luchando con el al menos dos horas. Estoy intentando convertir un carácter a un número. He diseñado la siguiente función:

Código: C
  1.     int *tonumber(char *cadena)
  2.     {
  3.       char letras[] = "ABCDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  4.       int numeros[100], cadenafinal[100], i, j;
  5.      
  6.       for(i=0; i<25;i++) numeros[i] = i;
  7.       for(i=25; i<50;i++) numeros[i] = (i-25);
  8.      
  9.       for(i=0; i<strlen(cadena); i++){
  10.          for(j=0; j<strlen(letras); j++){
  11.              if(cadena[i] == letras[j]) cadenafinal[i] = numeros[j];}}
  12.      
  13.       return *cadenafinal;
  14.      
  15.     }

 El problema es que posteriormente, en el uso no salen resultados. No sé si es por que estoy usando mal los punteros (al retornar un int *) o si se me escapa cualquier otra cosa.

Código: C
  1.     main()
  2.     {
  3.     int q[100];
  4.     char *clave = "cadenadecaracteres"
  5.      
  6.     q = tonumber(clave); // Convierto cada caracter a número
  7.      
  8.     while(q[i] != '\0'){printf("-%d-", q[i]); i++;} // Imprimo los caracteres convertidos a números
  9.     }

Agradecería verdaderamente ayuda cuanto antes. Llevo más de la mitad del programa diseñado. Diseñé un buen algoritmo de encriptación y más o menos no va mal, el problema es este. :ayuda:

3
C/C++ / Re:Asignar valores a arrays directamente.
« en: Miércoles 30 de Mayo de 2012, 23:16 »
Código: C++
  1.     float matriz[4][4];
  2.      
  3.     matriz = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

Lo que está mal es que está asignando valores a la dirección de comienzo de la matriz, no a las "casillas" propas de dicha matriz. Es decir, en vez de
 
Código: C++
  1. matriz = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

habría de ser:
 
Código: C++
  1. int matriz[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

pero vamos, la razón es básicamente esa, que matriz es lo mismo que matriz[0][0], por así decirlo. De hecho puedes fijarte como cuando quieres usar un scanf para almacenar un valor en el primer elemento de un array tan sólo has de poner:
Código: C++
  1. int matriz[1];
  2. scanf("%d", matriz);

4
C/C++ / Re:Funciones Lenguaje C
« en: Miércoles 30 de Mayo de 2012, 23:13 »
Estoy de acuerdo. Sin embargo, si tienes alguna duda concreta o algún trozo de código que no entiendas o no te resulte, no dudes en preguntar  :suerte:

5
C/C++ / Re:Operaciones con listas enlazadas
« en: Jueves 3 de Mayo de 2012, 14:16 »
El tema de las listas en sí  :rain:

Es decir, por ser más concretos, no sé cómo leer los datos del fichero y convertirlo en lista enlazada. Me explico:

inicialmente, la primera vez que se inicia el programa, las listas podría crearlas bien. El código seria cuestión de ponerme a machacarlo un poco, el problema entra cuando, una vez grabados los datos en el fichero (con fwrite), los quiero volver a leer y, por decirlo de alguna manera, enlazarlos, es decir, leerlos y reconvertirlos en una lista enlazada para comenzar a editarlos.

¿Tiene sentido? ¿Me explico bien?  :think:

¡Gracias!

6
C/C++ / Re:CALENDARIO EN C
« en: Miércoles 2 de Mayo de 2012, 13:41 »
Uf, yo es que no soy un gran profesor  :nosweat:

De veras, los conocimientos que te vaya a dar un buen manual no te los voy a dar yo. Te dejo el que he usado yo, en serio, creo que es lo que deberías hacer. Sentarte un puñado de tardes e ir leyendo y comprendiendo los ejemplos, todos. Una vez comprendidos, sentarte y ponerte a picar código. A mi parecer es el único modo de aprender a programar bien...

C/C++ CURSO DE PROGRAMACION (3ª ED) (EN PAPEL)

Te dejo por si te interesase también un blog dónde lo explican bastante bien con ejemplos el tema de pasar argumentos por la línea de ordenes  :smartass:

Enlace al blog

7
C/C++ / Re:Código morse
« en: Martes 1 de Mayo de 2012, 12:38 »
Me imagino que en C, ¿no?

La verdad es que no sé cómo es la estructura de el programa que has creado, pero si lo pones a lo mejor te puedo echar una mano para meter, lo que has hecho sin funciones, en funciones. :food:

8
C/C++ / Re:code::Blocks
« en: Lunes 30 de Abril de 2012, 20:15 »

9
C/C++ / Re:CALENDARIO EN C
« en: Lunes 30 de Abril de 2012, 20:12 »
Hazte a la idea de que, según me imagino yo, para ejecutarlo por linea de ordenes tendrías que introducir algo así en el terminal:

Código: [Seleccionar]
./programa dd/mm/aaaa
Siendo dd/mm/aaaa la fecha en cuestión, ¿no? En ese caso lo único que tienes que cambiar en el programa es que en vez de operar con las variables dd, mm y aaaa, que opere con argv[1],con argv[2] y con argv[3], siendo cada una dd, mm y aaaa respectivamente.

10
C/C++ / Operaciones con listas enlazadas
« en: Lunes 30 de Abril de 2012, 18:38 »
Hola!

Estoy haciendo un programa para  poder crear una base de datos. Os comento  :food:

Me interesa:
1) Que el programa lea una serie de datos que se introducen por teclado (se almacenan en un registro)
2) Que se guarden en un fichero de texto (para su posterior uso)
3) Que se puedan leer, añadir más o borrar un elemento en concreto

Ahora bien, yo he estado planteando el programa y he pensado en hacerlo mediante una lista enlazada. La idea es que siempre que se ejecute el programa inmediatamente cargue los datos del fichero de texto y se pueda trabajar sobre ellos, y al cerrarlo modifique el fichero con lo trabajado.

No sé si me estoy complicando mucho. De primeras no resulta un trabajo dificil, pero no estoy acostumbrado a trabajar con listas enlazadas y me resulta complejo. A ver si me podeis echar una mano.  :ayuda:

Os dejo la estructura general del código:

Código: C
  1. main()
  2. {
  3.         int m;
  4.         char nombre_proyecto[6];
  5.  
  6.         typedef struct{
  7.                 char nick[20];
  8.                 char skype[15];
  9.                 char correo[30];
  10.                 char observaciones[200];
  11.         } miembro;
  12.  
  13.         system("color A");
  14.         printf("\nEste programa esta realizado mediante listas enlazadas.");
  15.  
  16.         printf("\n\npresione una tecla para continuar...");
  17.         while(getchar() != '\n');
  18.         system ("cls");
  19.  
  20.         printf("\tMenu\t");
  21.  
  22.         printf("\n1.- Ver lista de miembros");
  23.         printf("\n2.- A%cadir un miembro, 164");
  24.         printf("\n3.- Modificar un miembro");
  25.         printf("\n4.- Cambiar el nombre del protecto");
  26.        
  27.         switch(m)
  28.         {
  29.         case 1: mostrar_miembros();
  30.         case 2: anyadir_miembro();
  31.         case 3: modificar_miembro();
  32.         case 4: borrar_miembro()
  33.         case 5: cambiar_nombre_proyecto();
  34.         }
  35.  
  36.         system("pause");
  37. }

Ahora tengo que trabajar sobre cada función. Voy a seguir, pero si me podeis dar ideas os lo agradecería mucho  :kicking:

11
C/C++ / Re:CALENDARIO EN C
« en: Lunes 30 de Abril de 2012, 17:39 »
Para eso tienes que tener en cuenta que en la función main tienes que poner:

Código: [Seleccionar]
int main(int argc, char *argv[])
dónde argc es un entero que indica el número de argumentos pasados a través de la línea de órdenes (incluyendo el nombre del programa) y argv[] es una matriz de punteros a cadenas de caracteres. Cada elemento de argv apunta a un argumento, de manera que argv[0] contiene el nombre del programa, argv[1] el primer argumento de la linea de órdenes, argv[2] el segundo, etc.

También tienes que tener en cuenta que en este caso la función main retorna un int que expresa o no el éxito de la ejecución.

Ahora, puedes operar, por ejemplo:

Código: [Seleccionar]
main(int argc, char **argv) {
      switch(argv[1]) {
            case "-v": ....
      }
}

o

Código: [Seleccionar]
main(int argc, char **argv) {
      if(argv[1]=="-v") ....
}


Aquí te dejo un ejemplo completo:

Código: [Seleccionar]
#include <stdio.h>
#include <string.h>
void main(int argc,char *argv[],char *ent[])
{
  if(!strcmp(argv[1],"/?"))
  {
   printf("pro [/ARG]\n");
   printf("[ARG]\n");
   printf("/? : Ayuda\n");
   printf("/1 : Imprime HOLA\n");
  }
  if(!strcmp(argv[1],"/1"))
  {
   printf("HOLA\n");
  }
}
Si te sirve, me alegro, si no entendiste muy bien, pregunta. Sin embargo te recomiendo una cosa: busca un buen manual de programación y síguelo página a página. Es la manera con que más se aprende. Yo por ejemplo cuando estudié en 1º programación seguí el libro de Ceballos. Viene bien explicado y con muchos ejemplos. Aquí tienes una vista previa:
desde su página pero seguro que en amazon o en una papelería lo puedes encargar :)

12
C++ Builder / Re:TRON JUEGO en C
« en: Lunes 30 de Abril de 2012, 13:55 »
Gracias, sí, al final caí...  :nosweat:

Muy buen juego por cierto, acojonante, estuve jugando un rato con unos amigos, pero no se me da bien jaja   :bravo:

He visto que había un fichero .cpp, ¿hay alguna parte programada en C++? Y otra cosa, ¿cómo lograste los colores en las letras en C? Eso me interesaría aprenderlo tantísimo   :yes:

13
C++ Builder / Re:TRON JUEGO en C
« en: Sábado 28 de Abril de 2012, 22:36 »
Me sale este problema, ¿Sabes por qué?


14
C/C++ / Re:Violación de segmento en C.
« en: Viernes 27 de Abril de 2012, 13:19 »
Cuándo te da violación de segmento es por que estás intentando escribir en una zona de memoria que no debes. Eso seguramente se deba a un puntero que apunta a algun sitio inadecuado... revisa tus punteros y a dónde apuntan.

Si pones código te lo podemos mirar :)

15
C/C++ / Re:CALENDARIO EN C
« en: Viernes 27 de Abril de 2012, 13:09 »
Éste código lo tenía guardado de cuando estudiaba... presenta cuántos días quedan para que acabe el año, puestos una fecha:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main ()
{
int dia, mes, anno;
int i;
int r = 0;
int dias_mes[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

error:printf("Introduzca un dia, mes y anno: ");
scanf("%d %d %d", &dia, &mes, &anno);

if(dia>31 || dia<1)
{
printf("\nEl dia introducido no es valido, introduzca otra fecha\n");
goto error;
}

if(mes>12 || mes <1)
{
printf("\nEl mes introducido no es valido, introduzca otra fecha\n");
goto error;
}

if(anno%4==0 || anno%4==0 && anno%100==0)
dias_mes[2] = 29;
else
dias_mes[2] = 28;

for(i = mes; i<13; i++)
{
r += dias_mes[i];
}

printf("\n\nQuedan %d dias para que acabe el anno.\n\n", r);

system("pause");

}

De todos modos, para lo que buscas plantéate un pseudocódigo tal que así:

1) Pide la fecha en cuestión
2) Analizar si el año es bisiesto o no
3) SI es bisiesto, tener en cuenta que febrero tiene 29 días, y disponerlo
4) EN CASO CONTRARIO, tener en cuenta que febrero tiene 28 días

Eso, en mi opinión, serían los cálculos más dificiles. El resto sería imprimir la información. Es decir, si has introducido la variable mes como 02, pues que imprima febrero.

En cuanto a lo de saber si el primer día es lunes o demás... ahora mismo no sé como lo puedes saber, pero mira en internet y seguro que hay algún algoritmo que sigan los días de la semana jajaja

¿A qué te refieres con "Dar el respectivo margen para el primer día del mes"?

 :suerte:

Páginas: [1]