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 - rir3760

#1461
Honestamente con lo poco que presentas no es posible ayudarte.

Para empezar necesitamos conocer como se almacena cada registro en el archivo. Y si este lo abres en el modo texto no puedes (mas bien no deberías por detalles técnicos) utilizar fseek para encontrar un registro, en su lugar procesas el archivo linea por linea.

Mejor publica la versión mas pequeña posible de tu programa.

Un saludo
#1462
Cita de: pedrokuellar en 23 Octubre 2011, 18:31 PMQuiero un programita basico que me genere numeros de forma aleatorio y sin repetición entre resultados previos.
Si el rango de los números es pequeño (por ejemplo 0 a 1024) un algoritmo sencillo es:

1) Colocas todos los números en un array.
2) Seleccionas el numero mediante la función "rand" y el operador de modulo.
3) Sustituyes (o sobrescribes, dependiendo del caso) el numero procesado por el ultimo.
4) Reduces el contador de los números en el array en una unidad.
5) Regresas al paso 2.


Inténtalo, no es difícil.

Un saludo
#1463
Justo despues del bucle que procesa el principio de la linea debes colocar este otro:
Código (cpp) [Seleccionar]
while ((c = getchar()) != EOF && c != '\n')
; // Nada que hacer


Sin embargo si estas programando en C++ deberias tratar de utilizar su biblioteca estandar (y no la de C).

Un saludo
#1464
Ese programa tiene demasiados errores, si no tienes un libro de calidad revisa los temas fijos de este foro. También puedes utilizar el motor de búsqueda.

En C++ el numero de elementos de un array lo debes indicar mediante una constante, no puedes utilizar una variable:
Código (cpp) [Seleccionar]
int v[nv];

Y aun cuando fuera valido los indices del array van desde 0 hasta nv-1, esto no es un indice valido:
Código (cpp) [Seleccionar]
v[nv+1]=0;
Y tampoco tiene caso ya que la siguiente operación es pedir todos los números.

En el primer bucle de la función principal utilizas el nombre del array "v" cuando deberías utilizar "v[ i ]".

En el siguiente bucle tratas de obtener los "nv" números menores cuando solo debes procesar "nv-1" números. Tanto en ese bucle como en el siguiente utilizas "v" cuando debería ser "v[ i ]".

La función que encuentra el valor menor se debe implementar con solo dos parámetros: la dirección base y el numero de elementos. Por ejemplo:
Código (cpp) [Seleccionar]
int fn_menor(int *elem, int num_elem)
{
int rv;

rv = elem[0];
for (int i = 1; i != num_elem; ++i)
if (rv > elem[ i ])
rv = elem[ i ];

return rv;
}


En buen plan: seria mejor que reescribieras desde cero el programa.

Un saludo
#1465
Es un error logico.

Tu programa procesa el principio de una linea hasta encontrar el caracter '&', bueno, imagina que se teclea:
abcde&{ENTER}
Los caracteres "abcde" se procesan, el '&' se descarta y causa la salida del bucle y el '\n' (generado al presionar la tecla {ENTER}) se queda en el bufer de la entrada estandar para ser procesado por la siguiente iteracion.

Esa siguiente iteracion lo contabiliza como el espacio extra que comentas ya que la funcion isspace retorna verdadero si el caracter es espacio blanco (espacio, tabulador o avance de linea, entre otros).

Para solucionarlo debes descartar el resto de linea, esto es, los caracteres despues del '&'.

Un saludo
#1466
Programación C/C++ / Re: GetCursorPos [C]
22 Octubre 2011, 17:19 PM
Puedes empezar revisando la pagina en MSDN: GetCursorPos.

Un saludo
#1467
Cita de: raulinchi en 22 Octubre 2011, 15:54 PMEntiendo, lo que haces es verificar que estas metiendo dos valores por teclado, sino te devolveria error, no?
Correcto. La función scanf retorna el numero de conversiones realizadas con exito y que en tu caso deben ser dos. Si no es asi lo indicamos mediante un mensaje y (a falta de algo mejor) terminamos de inmediato el programa.

Un saludo
#1468
Programación C/C++ / Re: GetCursorPos [C]
22 Octubre 2011, 16:55 PM
La biblioteca estandar de C no incluye una funcion con ese nombre. Si necesitas ayuda primero debes explicarte de una forma mas clara e indicar el compilador y SO que estas utilizando.

Un saludo
#1469
El programa sigue con errores: utilizas gets (no se recomienda), "fflush(stdin)" (tampoco), no llamas a la función (esto ya lo comento darkvidhack) y tratas de utilizar un array de punteros cuando debes utilizar un array.

En la función principal debes utilizar:

int main(void)
{
    char cad1[lim];
    char cad2[lim];
   
    printf("digite cadena 1 ");     
    gets(*cad1);
   
    printf("digite cadena 2");
    gets (*cad2);
   
    /* llamada a la funcion */
   
    return 0;
}


En cuanto a tu función de comparación lo mejor que se puede decir es que tiene varios errores que ya te comentamos mas algunos mas. Si no tienes material de referencia de calidad por favor revisa los temas fijos de estos foros, ahí encontraras a montones.

Un saludo
#1470
Cita de: raulinchi en 22 Octubre 2011, 13:12 PMLo que no entiendo es si es necesario inicializar las variables como lo haces a 0
Depende del caso. No es necesario si lo primero que haces con la variable es asignarle un valor.

En tu programa eso (la asignacion) no es seguro (debido a que depende de la entrada estandar) y por ello es mejor verificar el valor de retorno de la funcion scanf:
#include <stdio.h>
#include <stdlib.h>

int suma_resta(int x, int y, int *pz);

int main(void)
{
    int a;
    int b;
    int s;
    int r;

    printf("Dame dos enteros: ");
    fflush(stdout);
    if (scanf("%d %d", &a,&b) != 2){
        puts("Entrada no valida!");
        return EXIT_FAILURE;
    }

    s = suma_resta(a, b, &r);
    printf("La suma es %d y la resta es %d\n", s, r);
   
    return EXIT_SUCCESS;
}

int suma_resta(int x, int y, int *pz)
{
    *pz = x - y;
   
    return x + y;
}


Un saludo