elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 ... 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [34] 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ... 132
331  Programación / Programación C/C++ / Re: Problema con un programa en C (string.h y funciones) en: 13 Marzo 2014, 05:12 am
Ese algoritmo tiene grades fallos lógicos:

O bien la cadena tiene que ser simétrica con respecto al centro o no puede contener espacios.

Dado que hay palíndromos que contienen espacios y que no son simétricos os dirá que textos que realmente son palíndromos no lo son (ej: Anita lava la tina).  Lo de los espacios lo podéis arreglar añadiendo una función que los elimine. De todas todas tenéis que corregir el código.

¡Saludos!

Creo que no, aunque parezca que sí.

Todo nace en la definición de la RAE de palíndromo:


Citar
palíndromo.
(Del gr. πάλιν, de nuevo, y δρόμος, carrera).
1. m. Palabra o frase que se lee igual de izquierda a derecha, que de derecha a izquierda; p. ej., anilina; dábale arroz a la zorra el abad.


Por un lado está la definición: que se lea igual de derecha a izquierda.

Pero luego la pifian en el ejemplo que ponen ya que:

Citar

dábale arroz a la zorra el abad  <== al derecho

daba el arroz al a zorra elabád <== al revés




Y aplicando en sentido estricto la definición de que se "lea" igual en ambos sentidos lo siento, pero a no ser que empecemos a hablar mal, no se leen igual a la que al a, ni el abad con elabád.

La definición lo pone bien clarito: que se lea igual al derecho que al revés. Y eso no ocurre, a no ser que nos empecemos a sacar reglas como que los espacios no cuentan o se quiten de un lugar y  se pongan en otro, pero eso no es lo que dice la definición.

Sencillamente creo que se equivocaron en el ejemplo, por mencionar aunque sea de pasada, no se lee, como dice la definición, igual una letra acentuada que otra que no lo está.

Y si tenemos eso en cuenta los espacios si cuentan, y mucho ya que en el lenguaje hablado vendrían a representar una pausa mayor o menor. Soy tan estricto al respecto que dos espacios en blanco, cuando en el resto del texto se está usando sólo un espacio, podría considerarse una falta de ortografía "digital". ;)

Pero no deja de ser más que una interpretación que hago yo y con la cual muchos disentirán, a pesar de que la definición es bien clara: que se lea igual.

Es más, no estoy de acuerdo ni con la definición ya que creo que debería haber sido que se escriba igual en ambos sentidos, lo que alejaría la incongruencia entre las letras mayúsculas y minúsculas ya que no es lo mismo:


Citar

En León se come bien

El león come bien


La diferencia entre mayúsculas y minúsculas puede cambiar el sentido de las palabras y frases. En el ejemplo que pongo, uno se refiere a un lugar, León, y el otro a un animal, el león. Pero en fin, no tuvieron eso en cuenta y se limitaron a que se lea igual. Si tuviéramos en cuenta este hecho efectivamente un palíndromo debería de ser estrictamente simétrico, como sucede en los números capicúa.

Pero a lo que iba, creo que tanto engelx como yo nos limitamos a palabras palíndrómicas, no a frases de ahí nuestros escuetos códigos .... y además lo hicimos a posta diferenciando mayúsculas de minúsculas, cosa que no es aplicable como ya he comentado, pero todo ha sido un juego en crear el código más cortito.

Aclaro que esto no tene nada que ver con do-while al que tengo por uno de los "maestros" de este foro. Todo lo contrario, es una observación con respecto a la RAE. Nada más lejos de mi intención que meterme con nadie y mucho menos, reitero, con do-while.

Y para frases y tener en cuenta la equivalencia entre mayúsculas y minúsculas, cosa que me horroriza:


Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. int main (){
  4.    char text[100];
  5.    int i=0,j=0;
  6.    printf("\nIntroduce un texto: \n");
  7.    gets(text);
  8.    while (text[j++]!='\0');
  9.    for(;(toupper(text[i])==toupper(text[j-i-2])) && j/2>i++;);
  10.    printf (i>j/2 ? "\n Es un palindromo ": "\n No es un palindromo ");
  11.    return 0;
  12. }

Eso sí, sigo firme en lo de los espacios, o coinciden o no se lee igual. Las pausas en la lectura las marcan los espacios, siempre bajo mi criterio, ¿ehh..?, o eso o es una falta "digital" de ortografía, como ya comenté.

¡¡¡¡ Saluditos! ..... !!!!


332  Programación / Programación C/C++ / Re: tableros en: 13 Marzo 2014, 02:47 am
Eso es leo. Recuerdo ese ejercicio. La cosa era como referenciar cada bloque de 3 fichas a una posición de un array bidimensional.

Una idea podría ser que cada bloque de 3 fichas sea un string que almacene el código ascii que corresponda y después guardar dicho string en un array.

¿Sería una buena idea?

No me queda clara la idea. Tendrías que poner el enunciado completo.

Pero por lo que capto, eso de referenciar me suena a algo como esto:



Citar

┌───┬───┬───┬───┬───┬───┬───┬───┐
│█1█│█1█│█1█│█1█│█1█│█1█│█1█│█1█│
├───┼───┼───┼───┼───┼───┼───┼───┤
│█1█│█1█│█1█│█1█│█1█│█1█│█1█│█1█│
├───┼───┼───┼───┼───┼───┼───┼───┤
│█1█│█1█│█1█│█1█│█1█│█1█│█1█│█1█│
├───┼───┼───┼───┼───┼───┼───┼───┤
│█1█│█1█│█1█│█1█│█1█│█1█│█1█│█1█│
├───┼───┼───┼───┼───┼───┼───┼───┤
│█1█│█1█│█1█│█1█│█1█│█1█│█1█│█1█│
├───┼───┼───┼───┼───┼───┼───┼───┤
│█1█│█1█│█1█│█1█│█1█│█1█│█1█│█1█│
├───┼───┼───┼───┼───┼───┼───┼───┤
│█1█│█1█│█1█│█1█│█1█│█1█│█1█│█1█│
├───┼───┼───┼───┼───┼───┼───┼───┤
│█1█│█1█│█1█│█1█│█1█│█1█│█1█│█1█│
└───┴───┴───┴───┴───┴───┴───┴───┘
Process returned 0 (0x0)   executi

En quote no queda bien, se ve mejor en una captura de pantalla:


Y eso se logra sencillamente con una condición en la linea lateral y las intermedias:

Código
  1.           if ((j+2)%4==0)
  2.            printf("1");
  3.          else
  4.            printf("%c",a1[j]/* o a3[j] en donde toca*/);
  5.  

¡¡¡¡ Saluditos! ..... !!!!



333  Programación / Programación C/C++ / Re: Problema con for en: 12 Marzo 2014, 22:51 pm

A bote pronto supongo que será que asignas en lugar de comparar:

Código
  1. if (i = 0) /*<==AQUI i siempre es cero*/
  2.  
  3. en lugar de:
  4.  
  5. if (i ==0) /*<==AQUI comparas*/
  6.  
  7.  

¡¡¡¡ Saluditos! ..... !!!!




334  Programación / Programación C/C++ / Re: tableros en: 12 Marzo 2014, 22:43 pm
Creo que lo que el usuario decía, era que dentro de cada celda van a ir 3 fichas. Algo así:


 ┌─────┬─────┐
 │ ███ │  ███ │
 ├─────┼─────┤
 │ ███ │  ███ │
 └─────┴─────┘


¿Algo así?:

Citar
┌───┬───┬───┬───┬───┬───┬───┬───┐
│███│███│███│███│███│███│███│███│
├───┼───┼───┼───┼───┼───┼───┼───┤
│███│███│███│███│███│███│███│███│
├───┼───┼───┼───┼───┼───┼───┼───┤
│███│███│███│███│███│███│███│███│
├───┼───┼───┼───┼───┼───┼───┼───┤
│███│███│███│███│███│███│███│███│
├───┼───┼───┼───┼───┼───┼───┼───┤
│███│███│███│███│███│███│███│███│
├───┼───┼───┼───┼───┼───┼───┼───┤
│███│███│███│███│███│███│███│███│
├───┼───┼───┼───┼───┼───┼───┼───┤
│███│███│███│███│███│███│███│███│
├───┼───┼───┼───┼───┼───┼───┼───┤
│███│███│███│███│███│███│███│███│
└───┴───┴───┴───┴───┴───┴───┴───┘

.................................
Me intriga lo que guardas en esa carpeta... Deben ser GB y GB de códigos Oo ...............................


Pues estas en lo cierto, son varios GB de códigos, nunca sabes lo que puedes reaprender de ellos. Es como releer un libro, siempre encuentras cosas a mejorar y/o recordar.


¡¡¡¡ Saluditos! ..... !!!!


335  Programación / Programación C/C++ / Re: [C] Rombo con asteriscos en: 12 Marzo 2014, 21:02 pm
Perdonen que vuelva a la carga, pero creo que esto no está terminado :laugh:.

Antes que nada poner un caso que se me traspapelo entre tanto rombo. Es el caso de distinguir entre el borde y el interior:




Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  int i=0,j,k=1,l,a=21;
  5.  /*do{
  6.     printf("\nBase del rombo(numero impar positivo): \n");
  7.     scanf("%d",&a);
  8.     }while ( a <=0 || (a % 2) == 0);*/
  9.    char A[a+4][a+4],cad[]="L E O S A N S A N";
  10.    for ( i=0;i<=a+4;i++)
  11.      for ( j=0;j<=a+4;j++)
  12.        A[i][j]='0';
  13.    A[0][a/2]=254;
  14.    i=1;
  15.    while (i<=a/2){
  16.      l=i;
  17.      for ( j=(a/2)-i;j<=i+(a/2);j++){
  18.        if (j==(a/2)-l || j==l+(a/2))
  19.          A[i][j]=254;
  20.        else
  21.          A[i][j]='*';
  22.      }
  23.      i++;
  24.    }
  25.    k=i;
  26.    while (i>=(a/2) && i<=a){
  27.      --k;
  28.      l=k;
  29.      for ( j=(a/2)+1-k;j<(a/2)+k;j++)
  30.        if (j==(a/2)+1-l || j==(a/2)+l-1)
  31.          A[i][j]=254;
  32.        else
  33.          A[i][j]='*';
  34.      i++;
  35.    }
  36.    if (a>20){
  37.      for ( i=(a/2)-8,k=0;i<(a/2)+10;i++,k++)
  38.        A[i][a+1]=cad[k];
  39.    }
  40.    for ( i=0;i<a;i++){
  41.      printf("\t\t");
  42.      for ( j=0;j<a+2;j++){
  43.         if (A[i][j]=='0')
  44.            printf("%c",' ');
  45.          else
  46.            printf("%c",A[i][j]);
  47.      }
  48.      putchar ('\n');
  49.    }
  50.    putchar ('\n');
  51.    return 0;
  52. }

¿Qué pasa con los expertos en C++?

A ver si se animan a colgar algo de código en C++.

Yo en dicho lenguaje soy un total neófito, pero por lo menos se traducir algo de C  a C++. Así me salió esto:


Código
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int n,fila,col;
  6. cout<<"Introduce un numero IMPAR: "<<endl;
  7. cin >> n;
  8.    for(fila=1;fila<=n;fila++){
  9.        for(col=1;col<=n-fila;col++)
  10.           cout<<(" ");
  11.        for(col=1;col<=2*fila-1;col++)
  12.          cout<<("*");
  13.    cout<<endl;
  14.    }
  15.    for(fila=n-1;fila>=1;fila--) {
  16.        for(col=1;col<=n-fila;col++)
  17.          cout<<(" ");
  18.        for(col=1;col<=2*fila-1;col++)
  19.        cout<<("*");
  20.    cout<<endl;
  21.    }
  22. }

Pero claro, yo espero más de los expertos en C++, que haberlos hay los, todo está en que se animen con nuevas aportaciones.

Y todavía estoy a la espera que yoel_alejandro intervenga, que me dijo me iba a sorprender. No lo dejes estar mucho tiempo que se enfría el tema.

Y dedicado precisamente a yoel_alejandro al que rete en mi anterior mensaje, le dejo una versión "made in leosansan" del triángulo de Pascal, en este caso para que sea más a tono con el tema que se trata, de la pirámide de Pascal .... si ya sé que me acabo de inventar el término, pero ¿a qué queda bien? ...




¡¡¡¡ Saluditos! ..... !!!!



336  Programación / Programación C/C++ / Re: Leer datos de un cierto formato desde un fichero en: 12 Marzo 2014, 20:19 pm
Me pasa un detalle para mi curioso. Con esto en el fichero:

Citar

1970-01-01 1 1.5
1970-01-01 1.15
1980-01-01 2 2.5
1980-01-01 1.225
1990-01-01 3 3.5
1990-01-01 1.35


la salida es:

Citar
5: 1 1.5
5: 1 0.15
5: 2 2.5
5: 1 0.225
5: 3 3.5
5: 1 0.35


Es decir, en el código que te pongo a continuación sólo actúa el scanf==5 y lo que hace el muy bandido es, cuando debería actuar para mi criterio el scanf==4, sigue actuando el scanf==5 y lo que hace es coger, en las líneas pares, el decimal y separarlo en la parte entera y la parte decimal y así no deja actuar al scanf==4.

¿Me podrían iluminar a ver qué diablos estoy haciendo fatal?.


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 5
  4.  
  5. int main(){
  6.  int i=0,j=0,k=0,aux[3],E[N];
  7.  float F1[N],F2[N];
  8.  FILE* fichero;
  9.  fichero = fopen("fecha0.txt", "r");
  10.  if ((fichero = fopen("fecha0.txt", "r")) == NULL){
  11.    perror("fecha0.txt");
  12.    return EXIT_FAILURE;
  13.  }
  14.  while (! feof(fichero)){
  15.      if (fscanf(fichero,"%d %d %d %d %f ", &aux[0],&aux[1], &aux[2], &E[i], &F1[i])==5){
  16.        printf("5: %d %g\n", E[i], F1[i]);
  17.        i++;
  18.      }
  19.      else if (fscanf(fichero,"%d %d %d %f ", &aux[0],&aux[1], &aux[2], &F2[k])==4){
  20.        printf("4: %g\n", F2[k]);
  21.        k++;
  22.      }
  23.      else
  24.        puts("Error");
  25.  }
  26.  for (j=0;j<i;j++)
  27.    printf ("%3d  ",E[j]) ;
  28.  putchar ('\n');
  29.  for (j=0;j<i;j++)
  30.    printf ("%3g  ",F1[j]) ;
  31.  putchar ('\n');
  32.  /*for (j=0;j<k;j++)
  33.     printf ("%3g  ",F2[j]);*/
  34.  putchar ('\n');
  35.  fclose(fichero);
  36.  return EXIT_SUCCESS;
  37. }
  38.  

Obviamente el código que  cuelga rir3760 funciona, como no podría ser de otra manera al ser suyo, a las mil maravillas. La salida es:

Citar
1    2    3
1.5  2.5  3.5
1.15  1.225  1.35


Process returned 0 (0x0)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 5
  4.  
  5. int main()
  6. {
  7.  int i=0,j=0,k=0,aux[3],E[N],nc;
  8.  float F1[N],F2[N];
  9.  char linea[81];
  10.  FILE* fichero;
  11.  fichero = fopen("fecha0.txt", "r");
  12.  if ((fichero = fopen("fecha0.txt", "r")) == NULL){
  13.    perror("fecha0.txt");
  14.    return EXIT_FAILURE;
  15.  }
  16.  while (! feof(fichero)){
  17.    fgets(linea, 80, fichero);
  18.      if (sscanf(linea, "%d-%d-%d%n", &aux[0], &aux[1], &aux[2], &nc) == 3){
  19.         if (sscanf(linea + nc, "%d%*[ ]%f", &E[i], &F1[i]) == 2){
  20.           i++;
  21.         }
  22.         else if (sscanf(linea + nc, "%f", &F2[k]) == 1){
  23.           k++;
  24.         }
  25.         else
  26.            puts("Error");
  27.      }
  28.  }
  29.  for (j=0;j<i;j++)
  30.    printf ("%3d  ",E[j]) ;
  31.  putchar ('\n');
  32.  for (j=0;j<i;j++)
  33.    printf ("%3g  ",F1[j]) ;
  34.  putchar ('\n');
  35.  for (j=0;j<k;j++)
  36.    printf ("%3g  ",F2[j]) ;
  37.  putchar ('\n');
  38.  fclose(fichero);
  39.  return EXIT_SUCCESS;
  40. }

Gracias de antemano.

¡¡¡¡ Saluditos! ..... !!!!




REEDITADO:

Lo he solventado de la forma más simple. Ahora la salida es la correcta:


Citar
5: 1  1.5
4: 1.15
5: 2  2.5
4: 1.225
5: 3  3.5
4: 1.35
  1    2    3
1.5  2.5  3.5
1.15  1.225  1.35


Process returned 0 (0x0)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 5
  4.  
  5. int main(){
  6.  int i=0,j=0,k=0,aux[3],E[N];
  7.  float F1[N],F2[N];
  8.  FILE* fichero;
  9.  fichero = fopen("fecha0.txt", "r");
  10.  if ((fichero = fopen("fecha0.txt", "r")) == NULL){
  11.    perror("fecha0.txt");
  12.    return EXIT_FAILURE;
  13.  }
  14.  while (! feof(fichero)){
  15.      fscanf(fichero,"%d %d %d %d %f ", &aux[0],&aux[1], &aux[2], &E[i], &F1[i]);
  16.        printf("5: %d  %g\n", E[i], F1[i]);
  17.        i++;
  18.      fscanf(fichero,"%d %d %d %f ", &aux[0],&aux[1], &aux[2], &F2[k]);
  19.        printf("4: %g\n", F2[k]);
  20.        k++;
  21.  }
  22.  for (j=0;j<i;j++)
  23.    printf ("%3d  ",E[j]) ;
  24.  putchar ('\n');
  25.  for (j=0;j<i;j++)
  26.    printf ("%3g  ",F1[j]) ;
  27.  putchar ('\n');
  28.  for (j=0;j<k;j++)
  29.    printf ("%3g  ",F2[j]);
  30.  putchar ('\n');
  31.  fclose(fichero);
  32.  return EXIT_SUCCESS;
  33. }

Pero me sigue quedando la duda que planteé.
337  Programación / Programación C/C++ / Re: encontrar el ultimo valor de la matriz recorrida en: 12 Marzo 2014, 06:16 am

He llegado a comprender que para trabajos de consola con los colores que están son más que suficientes.

Y respecto a cómo recordarlos todo es tener a mano la tablita:


Citar
PARA LA CONSOLA: system ("color numero(fondo)letra(letras)")

Otra forma es coger una combinación de fondo y letra:

n=16*fondo+letra

Color fondo de consola :

0 = Negro
1 = Azul
2 = Verde
3 = Aguamarina
4 = Rojo
5 = Purpura
6 = Amarillo
7 = Blanco
8 = Gris
9 = Azul claro

Color de texto:

A=10 = Verde claro
B=11 = Aguamarina claro
C=12 = Rojo claro
D=13 = Purpura claro
E=14 = Amarillo claro
F=15 = Blanco brillante

y aplicar el resultado "n" a:
        
    color( n );


¡¡¡¡ Saluditos! ..... !!!!




338  Programación / Programación C/C++ / Re: tableros en: 12 Marzo 2014, 04:46 am

Te lo repito por n-ésima vez, se trataba de resolver un problema pero no de explicarlo, ya que el autor del tema no había puesto ni una misera línea de código, de ahí el cierto oscurantismo. ¿Te imaginas que copie mi código y al entregarlo a su profesor este le pregunte el significado de esos números?  :laugh: :laugh: :laugh:

Otra cosa distinta es "mi" código, el que yo me guardo, donde va una descripción del problema que se plantea y diversa notitas aclaratorias, pero que no pongo  cuando lo cuelgo en el foro. ¡¡¡Que se lo curre un poquito!!!,.....


¡¡¡¡ Saluditos! ..... !!!!


339  Programación / Programación C/C++ / Re: copiar una palabra de un archivo en C en: 12 Marzo 2014, 04:21 am
* En el primero de los códigos apoyo la intención pero está mal implementado, sencillamente no furula.

* EL segundo no cumple las expectativas que el autor planteo: leer de un tirón lo que hay entre los paréntesis y tu código  "desparrama" los datos en un fichero. Fíjate lo estricto que soy con las peticiones de los usuarios, no me gusta salirme del guión que ellos marcan porque posiblemente no es eso lo que ellos quieran, aunque a nosotros nos parezca otra cosa.

* Y tercero, siempre aprendiendo cosas nuevas, como en el caso del aporte de rir3760, pero si no, no me gusta perder ni jugando a las chapas. :laugh: :laugh: :laugh:


¡¡¡¡ Saluditos! ..... !!!!





340  Programación / Programación C/C++ / Re: Problema con un programa en C (string.h y funciones) en: 12 Marzo 2014, 04:00 am
......................................................................................

Pero lo que quiero decir es que en un problema donde se requiriera llegar hasta el elemento del medio i = 2, habría que poner el (float), ya que de otro modo la sentencia i < N/2 con N = 5, llegaría hasta i = 1. Y si se nos ocurre poner i <= N/2 también estaría mal porque en el caso que N sea par, ejemplo N = 6, llegaría hasta i = 3 cuando debería ser hasta i = 2. En un caso como ese creo que no queda otro remedio que i < (float)N/2



No, no y no. El término central en un array de cindo elementos no es el 2.5 sino el tercero.

Paree que olvidas que los elemento de un array es un caso particular de los términos de una sucesión, que no es más que una aplicación biyectiva entre los números naturales y los elementos de la sucesión .. y entre los números naturales no están los decimales.

El problema se reduce a comparar la sucesión de los elementos de la de parte izquierda con los de la parte derecha y:

* si se trata de un número par se compara exactamente la mitad.

*  si se trata de un número impar se compara la mitad menos uno de cada parte, quedando el central sin nadie con quien compara, por lo que se pasa de él.

De ahí que la expresión N/2 sea la apropiada a emplear.


¡¡¡¡ Saluditos! ..... !!!!



Páginas: 1 ... 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [34] 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ... 132
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines