33bits
[Hilo Oficial] Esto también es otro arte...el ARTE de programar - Versión para impresión

+- 33bits (https://33bits.net/foro)
+-- Foro: Temas de debate (https://33bits.net/foro/Foro-Temas-de-debate)
+--- Foro: Off Topic (https://33bits.net/foro/Foro-Off-Topic)
+--- Tema: [Hilo Oficial] Esto también es otro arte...el ARTE de programar (/Tema-Hilo-Oficial-Esto-tambi%C3%A9n-es-otro-arte-el-ARTE-de-programar)

Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33


RE: Esto también es otro arte...el ARTE de programar - srlara - 16-10-2015

muy buena explicación @Margaruga


RE: Esto también es otro arte...el ARTE de programar - Jase - 30-10-2015

Hola, tengo una duda con C. Concretamente en este código que he hecho yo y no sé por qué ha de ser as├ì:

Código:
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main() {
    
    char palabras[5][2][80] = {
        {"Hola", "Hello"},
        {"Adios", "Bye"},
        {"Seguro", "Sure"},
        {"Bien", "Well"},
        {"Palabra", "Word"}
    
    };
    
    
    char palabraSolicitada[80] = "";
    
    printf("Introduce una palabra\n");
    gets(palabraSolicitada);
    
    
    int i;
    int j;
    
    for (i = 0; i <= 5; i++) {
        
        for (j = 0; j <=2; j++) {
            
            if (strcmp(palabras[i][0], palabraSolicitada) == 0) {
                
                system("cls");
                printf("La palabra introducida es %s y su traduccion es: %s", palabraSolicitada, palabras[i][j + 1]);
                break;
            }
            
            else if(strcmp(palabras[i][1], palabraSolicitada) == 0) {
                
                system("cls");
                printf("La palabra introducida es %s y su traduccion es: %s", palabraSolicitada, palabras[i][j - 1]);
                break;
            }
            
        }
    }
    
    getch();
    return 0;
    
}


Lo que no entiendo es por qué aquí:

Código:
if (strcmp(palabras[i][0], palabraSolicitada) == 0) {
                
                system("cls");
                printf("La palabra introducida es %s y su traduccion es: %s", palabraSolicitada, palabras[i][j + 1]);
                break;
            }
            
            else if(strcmp(palabras[i][1], palabraSolicitada) == 0) {
                
                system("cls");
                printf("La palabra introducida es %s y su traduccion es: %s", palabraSolicitada, palabras[i][j - 1]);
                break;
            }

Si el primer índice de la j vale 0 y le digo que +1, es decir, el 1. Me lo coge bien, pero el segundo, que es el índice de la j es 1 y le digo -1 no me lo coge. Tengo que dejarlo como

Código:
printf("La palabra introducida es %s y su traduccion es: %s", palabraSolicitada, palabras[i][j]);

Con eso me estaría refiriendo al índice 1, por lo que me debería devolver el mismo, ¿no?
Vamos, si hago lo mismo con el primer if me muestra el mismo roto2


RE: Esto también es otro arte...el ARTE de programar - srlara - 30-10-2015

Código:
 for (i = 0; i <= 5; i++) {
        
┬á┬á┬á┬á┬á int  j = 0;
            
            if (strcmp(palabras[i][0], palabraSolicitada) == 0) {
                
                system("cls");
                printf("La palabra introducida es %s y su traduccion es: %s", palabraSolicitada, palabras[i][j + 1]);
                break;
            }
            
            else if(strcmp(palabras[i][1], palabraSolicitada) == 0) {
                
                system("cls");
                printf("La palabra introducida es %s y su traduccion es: %s", palabraSolicitada, palabras[i][j - 1]);
                break;
            }
            
        }
    }



RE: Esto también es otro arte...el ARTE de programar - Jase - 30-10-2015

El caso es que el bucle vaya recorriendo fila por fila y columna por columna hasta encontrar la palabra que han metido y dar su traducción.

Es decir, en la fila 0, la columna 0 es Hola y la 1 es Hello.

Si dice que palabraSolicitada igual = Hola y (i = 0 y j = 0) = Hola

Mientras estamos en [0][0], su traducción sería j +1 ([0][1])
De lo contrario, si ha coincidido de [0][1], su traducción sería j - 1 ([0][0]).

Eso es lo que no entiendo. Si resolverlo ya sé, y sé que sobran cosas incluso, pero he llegado a ese punto y no lo entiendo roto2


RE: Esto también es otro arte...el ARTE de programar - Jase - 02-11-2015

Hola, tengo un par de dudas de C.

Veréis, estoy haciendo el ejercicio del otro día, pero ahora leyendo los strings desde un .txt y tengo un par de problemas.

1) La primera línea del txt no me la coge, y no sé por qué.
2) Los strings que quiero están separados por comas, después de mucho comerme la cabeza y mucho stack overflow he conseguido almacenarlos en arrays como quiero peeeeeeeeeeero, al llegar al salto de línea me guarda en la última posición el que va ahí y el primero del segundo.

Os dejo el código a ver si me podéis ayudar:

Código:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
   FILE *file;
  
   char string[60] = "";
   char array[5][3][100] = {};

   file = fopen("file.txt" , "r");
  
   if(file == NULL) {
       
      perror("Error opening file");
      return(-1);
      
    }
  
   int i;
   int j;
  
   while(fgets (string, 60, file) != NULL) {       
       
           for (i = 0; i < 5; i++) {
               
               for (j = 0; j < 3; j++) {
                                    
                   fscanf(file, "%115[^,], %115\n", array[i][j]);
                   
               }
           }
           
           
}
        
  
   for (i = 0; i < 5; i++) {
       
           for (j = 0; j <= 2; j++) {
               
               printf("arrray[%d][%d] => %s\n", i, j, array[i][j]);
           }
   }
  
  
  
  
   fclose(file);
  
   return(0);
}

Esto es lo que hay en file.txt (he tenido que dejarlo así para que me lo coja bien):

== INICIO ==
Luis, 111111111, luis@gmail.com
Pablo, 222222222, pablo@gmail.com

Y esto es lo que me devuelve el último for que hago para comprobar yo que se ha metido todo correctamente en el array:

[Imagen: rTd6hMm.png]

El problema me temo que está en la expresión regular, como todo en mi vida, todos mis problemas vienen por esas mierdas roto2


RE: Esto también es otro arte...el ARTE de programar - Jase - 16-11-2015

Holi.

Mi profesor es un cabrón y nos ha pedido hacer un strlen con recursividad, pero me pega un error:

Código

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

int stringLength(char s[]);

int cont = 0;
int i = 0;


int main() {
    
    char string[] = "Cadena de prueba";
    
    printf("'%s' tiene una longitud de %d", string, stringLength(string));
    
    getch();
}

int stringLength(char s[]) {
    
    
    if (s[i] == '\0') {
        return cont;
    }
    
    else {
        
        stringLength(s[i + 1]);
        cont++;
        i++;
    }
}

Error:

In function 'stringLenght':
28 16 [Warning] passing argument 1 of 'stringLenght' makes pointer from integer without a cast
19 5 [Note] expected 'char *' but argument is of type 'char'

¿Alguien me ilumina? Gracias.


RE: Esto también es otro arte...el ARTE de programar - Tolo - 16-11-2015

Lo que te dice el error es que espera un puntero a char (char *) pero tú le pasas simplemente char.

char* , al ser un puntero, puede contener mil cosas, pero char a secas sólo puede llevar un caracter.


RE: Esto también es otro arte...el ARTE de programar - Jase - 16-11-2015

Nah, no era eso. Ya lo he sacado xD


RE: Esto también es otro arte...el ARTE de programar - Jase - 16-11-2015

Ya que estamos, ¿me podéis poner ejemplos donde se use la recursividad? Pensaba que esto se usaba para hacer los programas más livianos y no abusar tanto de bucles, pero por lo visto no es así y no le encuentro ninguna utilidad a esto.


RE: Esto también es otro arte...el ARTE de programar - Tolo - 16-11-2015

(16-11-2015 19:29)Jase escribió:Ya que estamos, ¿me podéis poner ejemplos donde se use la recursividad? Pensaba que esto se usaba para hacer los programas más livianos y no abusar tanto de bucles, pero por lo visto no es así y no le encuentro ninguna utilidad a esto.

Creo que el más claro o de los primeros que enseñan es del factorial de un número.

Ejemplo en C++

Código:
#include <iostream.h>

int factorial(int);

void main(void) {
    int number;
    
    cout << "Please enter a positive integer: ";
    cin >> number;
    if (number < 0)
        cout << "That is not a positive integer.\n";
    else
        cout << number << " factorial is: " << factorial(number) << endl;
}

int factorial(int number) {
    int temp;

    if(number <= 1) return 1;

    temp = number * factorial(number - 1);
    return temp;
}



RE: Esto también es otro arte...el ARTE de programar - Jase - 16-11-2015

Ese lo he hecho también, Tolo.

Me refería a ejemplos de uso en la vida real, que me explico como el culo XD


Esto también es otro arte...el ARTE de programar - xecollons - 16-11-2015

Yo creo que desde que acabé la carrera, y ya hace algunos años, no he hecho un método recursivo en la vida xD