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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Ayuda con archivos .c y .h en: 19 Abril 2016, 01:48 am
Las definiciones de las funciones (que son opcionales en ciertos casos) se pueden colocar en un archivo aparte de "headers" (de extension .h y con el mismo nombre que tu .c)

Código:
// palindromos.c

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

/*
Capicupa (palindromo) ?

*/

// todo esto podria estar en palindromos.h
const char* r_bool(bool b);
bool es_capicua(int x);
void print_capicua_rango(int a, int b);


int main(void)
{
cout << r_bool(es_capicua(10000)) << endl; // false
cout << r_bool(es_capicua(10001)) << endl; // true
cout << r_bool(es_capicua(10501)) << endl; // true
cout << r_bool(es_capicua(807)) << endl; // false
cout << r_bool(es_capicua(808)) << endl; // true

print_capicua_rango(19,100);

getchar();
}

void print_capicua_rango(int a, int b){
int i,count=0;
for (i=a; i<b; i++){
if (es_capicua(i)){
cout << i << endl;
count++;
}
}
cout << "El numero de terminos capicua es " << count;
}

bool es_capicua(int x){
char buffer [10];
int i;
bool exito = true;

itoa(x,buffer,10);

int len = strlen(buffer);
for (i = 0; i<(int)len/2 && exito; i++)
exito = buffer[i]==buffer[len-1-i];

return exito;
}

const char* r_bool(bool b){
  return (b ? "true" : "false");
}


Se convierte en......

Código:
// palindromos.h

const char* r_bool(bool b);
bool es_capicua(int x);
void print_capicua_rango(int a, int b);


Código:
// palindromos.c

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "palindromos.h"

using namespace std;

/*
Capicupas (palindromos)
*/


int main(void)
{
cout << r_bool(es_capicua(10000)) << endl; // false
cout << r_bool(es_capicua(10001)) << endl; // true
cout << r_bool(es_capicua(10501)) << endl; // true
cout << r_bool(es_capicua(807)) << endl; // false
cout << r_bool(es_capicua(808)) << endl; // true

print_capicua_rango(19,100);

getchar();
}

void print_capicua_rango(int a, int b){
int i,count=0;
for (i=a; i<b; i++){
if (es_capicua(i)){
cout << i << endl;
count++;
}
}
cout << "El numero de terminos capicua es " << count;
}

bool es_capicua(int x){
char buffer [10];
int i;
bool exito = true;

itoa(x,buffer,10);

int len = strlen(buffer);
for (i = 0; i<(int)len/2 && exito; i++)
exito = buffer[i]==buffer[len-1-i];

return exito;
}

const char* r_bool(bool b){
  return (b ? "true" : "false");
}


Muchas gracias, muy claro todo.
Si es que sabes algo del test.c te lo agradeceria mucho!
2  Programación / Programación C/C++ / Ayuda con archivos .c y .h en: 19 Abril 2016, 00:51 am
Buenas, tengo una duda con unos requerimientos raros que tengo en un proyecto de la universidad.
Tengo mi programa listo para entregar, pero me solicitan entregar esto junto al programa.
Citar
14.Construir un archivo separado llamado test.c donde se encuentre el procedimiento o función main a fin de demostrar el uso de sus funciones. Procure entregar resultados por pantalla sobre cada llamado.
15.Estructurar programa empleando archivos de cabecera (.h) y los códigos fuentes (.c)

Bueno la verdad no nos dan ningun ejemplo de como son estos archivos ni nada, por lo que les consulto si alguien tiene idea alguna de como hacerlos. Saludos
3  Programación / Programación C/C++ / Re: Ayuda con función (Errores raros) en: 12 Abril 2016, 05:42 am
te recomiendo que para resolver errores de tiempo de ejecución (no entra al else) uses el debugger de tu IDE, seguramente si buscas en google "debugger [el nombre de tu IDE]" consigues como usarlo y puede ser sumamente practico

Ya resolvi todos los problemas, y gracias por el dato, investigaré!
4  Programación / Programación C/C++ / Re: Ayuda con función (Errores raros) en: 12 Abril 2016, 05:24 am
la primera si observas bien es un poco obvia, estás rompiendo el flujo del if

Código
  1. }
  2.                printf("as");
  3.                else if (contador<=columDisponibles){


el if debe ser
Código
  1. if(x){
  2. a();
  3. }else if(y){
  4. b();
  5. }

tu estás rompiendo el if al hacer

Código
  1. if(x){
  2. a();
  3. }//rompes el flujo
  4. algo_fuera_de_lugar();
  5. else if(y){
  6. b();
  7. }

el segundo probablemente es heredado por el primero (rompiste el flujo y no sabe ya donde va que)
Mmh gracias no tenia claridad con eso, pero puse ese printf porque la funcion no ingresa al "else if", no realiza nada de lo que está dentro de él.
Pero gracias me sirve para comprender mejor el elif.
5  Programación / Programación C/C++ / Ayuda con función (Errores raros) en: 12 Abril 2016, 04:49 am
En esta funcion me arroja dos errores:
1)expected '}' before 'else'
2)break statement not within loop or switch

El primer error corresponde a la linea del
 
Código:
                printf("as");
                else if (contador<=columDisponibles){
Y el segundo error correponde al de
Código:
            if(palabra[h]=='\0'){
                break;
            }

Es como si perdiera la referencia del while o de los if, siendo que revisando cada llave, estan bien segun yo. Dejo el codigo de la funcion completa:

Código
  1. char** definirDificultad(char ** nuevaMatriz,int N, int M ,int dificultad){
  2.    int i,j,h,contador, filasDisponibles,columDisponibles;
  3.    char caracter;
  4.    char palabra[200];
  5.    //palabra=(char*)malloc(sizeof(char));
  6.  
  7.    for(i=0;i<N;i++){
  8.        for(j=0;j<M;j++){
  9.            nuevaMatriz[i][j]='&';
  10.        }
  11.    }
  12.  
  13.    FILE *diccionario;
  14.    diccionario=fopen("Diccionario.txt","r");
  15.  
  16.    posicion *posicionActual;
  17.    posicionActual=malloc(sizeof(posicion));
  18.  
  19.    //Palabras horizontales
  20.    if(dificultad==1){
  21.  
  22.        for(i=0;i<N;i++){
  23.            for(j=0;j<M;j++){
  24.                fscanf(diccionario,"%c",&caracter);
  25.                if(feof(diccionario)){
  26.                    break;
  27.                }
  28.                if (caracter!='\n'){
  29.                    nuevaMatriz[i][j]=caracter;
  30.                }
  31.            }
  32.        }
  33.  
  34.    }
  35.    // Palabras verticales
  36.    else if(dificultad==2){
  37.        rewind(diccionario);
  38.        h=0;
  39.        while(!feof(diccionario)){
  40.            fscanf(diccionario,"%c",&palabra[h]);
  41.            h++;
  42.        }
  43.        palabra[h-1]='\0';
  44.        h=0;
  45.        j=0;
  46.        int k=0;
  47.        posicionActual->x=0;
  48.        posicionActual->y=0;
  49.        while(palabra[h]!='\0'){
  50.            contador=0;
  51.            while(palabra[h]!='\n'){
  52.                contador++;
  53.                h++;
  54.            }
  55.            k=h-contador;
  56.            if(contador<=N && contador<=M && contador!=0){
  57.                filasDisponibles=N-(posicionActual->x);
  58.                columDisponibles=M-(posicionActual->y);
  59.                if(contador<=filasDisponibles){
  60.                    for(i=posicionActual->x;i<(contador+posicionActual->x);i++){
  61.                        if(i>=N){
  62.                            break;
  63.                        }
  64.                        else if(nuevaMatriz[i][j]=='&' || nuevaMatriz[i][j]==palabra[k]){
  65.                            nuevaMatriz[i][j]=palabra[k];
  66.                            k++;
  67.                        }
  68.                    }
  69.                    i=posicionActual->x;
  70.                    while(nuevaMatriz[i][j]!='&'){
  71.                        j++;
  72.                        if(j>=M){
  73.                            j=0;
  74.                            i++;
  75.                        }
  76.                    }
  77.                    posicionActual->y=j;
  78.                    posicionActual->x=i;
  79.                }
  80.                printf("as");
  81.                else if (contador<=columDisponibles){
  82.                    for(j=posicionActual->y;j<(contador+posicionActual->y);j++){
  83.                        if(j>=M){
  84.                            break;
  85.                        }
  86.                        else if(nuevaMatriz[i][j]=='&' || nuevaMatriz[i][j]==palabra[k]){
  87.                            nuevaMatriz[i][j]=palabra[k];
  88.                            k++;
  89.                        }
  90.                    }
  91.                    j=posicionActual->y;
  92.                    while(nuevaMatriz[i][j]!='&'){
  93.                        j++;
  94.                        if(i>=N){
  95.                            i=0;
  96.                            j++;
  97.                        }
  98.                    }
  99.                    posicionActual->y=j;
  100.                    posicionActual->x=i;
  101.                }
  102.            }
  103.            if(palabra[h]=='\0'){
  104.                break;
  105.            }
  106.            h++;
  107.        }
  108.    }
  109.    //free(palabra);
  110.    free(posicionActual);
  111.    fclose(diccionario);
  112.    return nuevaMatriz;
  113. }
6  Programación / Programación C/C++ / Re: Ayuda con punteros de tipo char en: 10 Enero 2016, 23:51 pm
C no tiene operadores para comparar cadenas de caracteres, por tanto lo que haces es comparar dos direcciones de memoria. Para ello debes usar la función de librería strcmp.

Salió perfect, muchas gracias!
7  Programación / Programación C/C++ / Re: Ayuda con punteros de tipo char en: 10 Enero 2016, 22:45 pm
Eso es porqué no has dimensionado la posición i de arregloNombres. Piensa que es solo un puntero y no puedes alojar nada en él.

Puedes resolver eso de dos formas:
Declaras dos dimensiones en arreglonombres:
Código
  1. arregloNombres[10][80];


Hola denuevo, usé esta solución, pero al querer comparar
Código:
fscanf(lectura,"%s",nombre1);
while(arregloNombres[i]==nombre1)

simplemente no cumple la condición, alguna recomendacion?
8  Programación / Programación C/C++ / Re: Ayuda con punteros de tipo char en: 10 Enero 2016, 20:22 pm
Solucionado con arreglo de dos dimensiones! gracias
9  Programación / Programación C/C++ / Re: Ayuda con punteros de tipo char en: 10 Enero 2016, 19:45 pm
Solución:
Usa la función strncpy para realizar una copia por valor de la variable nombre. Acuérdate de que antes de eso debes dimensionar la posición i de arregloNombres para dar cabida al dato.

Hola gracias por la respuesta, uso la solución que me diste pero al ejecutar se me cae el programa, en el momento que debería salir del ciclo for
Código:
for(i=0;i<cantidadNombres;i++){
        fscanf(archivoLectura, "%s", nombre);
        strncpy(&arregloNombres[i],nombre,9);
    }

    printf("%s",arregloNombres[0]);
Si es algo de asignación de memoria que no hay, soy medio ignorante, espero tu respuesta!
10  Programación / Programación C/C++ / Ayuda con punteros de tipo char en: 10 Enero 2016, 19:04 pm
Quiero asignar a un arreglo de arrays diferentes palabras, sacadas de un archivo de texto, sé que debo utilizar:

Código:
const char *arregloNombres[10];

Y mi idea es que el arreglo arroje:

arregloNombres[0]="Esteban"
arregloNombres[1]="Alexis"
etc...

Pero al leer el archivo con los nombres de esta manera:
Código:
fscanf(lectura,"%s %s %d", nombre1,nombre2,&aux);
arregloNombres[i]=nombre1; //i va en aumento

Lo unico que hace es dejarme todas las posiciones del arreglo con el mismo nombre.
¿Como puedo dejar una posicion con un nombre especifico obtenido de un archivo sin que despues se modifique?
Saludos
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines