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

#1
Hola tuve que formatiar la PC e instale esta version pero cuando quiero debugear aparece asi




¿alguno sabe por que?

Gracias
#2
Programación C/C++ / Re: Descomponer numero
8 Junio 2016, 17:48 PM
Muchas gracias por contestar!!

if ((c - 0x30) % 2 == 0)
No entiendo el c- 0X30
#3
Programación C/C++ / Descomponer numero
8 Junio 2016, 15:38 PM
Hola, necesito hacer un programa que descomponga un numero de 6 cifras en pares e impares de la siguiente forma.
123456
Pares: 246
Impar: 135

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 6
int main( void )
{
   int c,
       i,
       n,
       par=0,
       impar=0,
       acupar=0,
       acuimpar=0;
   int digitos[N];
   unsigned long long int num;
   printf( "Escribe un numero de %d digitos como maximo: ", N );
   fflush( stdout );
   num = 0;
   for( n = 0; n < N && (c = getchar()) != '\n'; n++ )
   {
      digitos[n] = c - '0';
      num *= 10;
      num += digitos[n];
   }
   printf("%d\n", num);
   for( i = 0; i < n; ++i )
        if(digitos[i]%2==0)
        {
            printf("es Par: %d\n", digitos[i]);
            acupar+=digitos[i]*pow(10,par);
            par++;
        }

        else
        {
           printf("es imPar: %d\n", digitos[i]);
           acuimpar+=digitos[i]*pow(10,impar);
           impar++;
        }


printf("\npar:%d",par);
printf("\nimpar:%d",impar);
printf("\n acupar %d",acupar);
printf("\n acuimpar %d",acuimpar);

   return 0;
}


Con el programa que yo escribi quería que quede el numero par e impar dado vuelta y despues ponerlo bien.
123456
Queda así 642
531
Con ese ejemplo funciona pero si pongo 123444, queda asi
4441 (en vez de 4442)
31

No entiendo porque no funciona
#4
Gracias a todos por contestar!
Quise hacerlo para texto como el fprintf pero no se como funciona

int main()
{
    int i;
    tpers persona[2];
    FILE *fpTex;
for(i=0;i<2;i++)
{
    printf("Ingrese el DNI:");
    scanf("%ld",&persona[i].dni);
    printf("El apellido y nombre :");
    fgets(persona[i].apyn,34,stdin);
    printf("Ingrese el sexo:");
    fgets(persona[i].sex,2,stdin);
    printf("Ingrese la fecha:");
    scanf("%d/%d/%d",
                        &persona[i].fec.di,
                        &persona[i].fec.me,
                        &persona[i].fec.an);
    printf("Ingrese el impuesto:");
    scanf("%f",&persona[i].impuesto);
    printf("\n");
}
fpTex=fopen("Arct.txt","wt");
if(fpTex)
{
/*fwrite(persona,sizeof(tpers),3,fpTex); si fuera binario*/
fprintf(fpTex,"%ld%s%s%d%d%d%f",persona.dni,persona.apyn,persona.sex,persona.fec.di,persona.fec.me,persona.fec.an,persona.impuesto);
fclose(fpTex);
}
    return 0;
}


Y otra cosa no se porque no me funciona el fgets de apellido nombre
#5
Hola, gracias por contestar!
Tu video es genial me aclaro muchas dudas solo me quedaron dos: en el video el archivo es .db y en el modo le pusiste solo w sino me acuerdo mal asi se crea un archivo en formato texto ¿por que en vez de .db no pusiste .txt y lo abrias con un editor de texto?
Y la segunda ¿si yo lo quiero almacenar en texto plano cada vez que ingrese un lote de datos de una persona se va al archivo y se graba por cada persona y en el binario me permite ingresar diez lotes y se guarda solamente al final una sola vez?
#6
Hola, muchas gracias por contestar.
¿lo que vos me estas diciendo no es hardcodearlo?
No se si me explique bien pero lo que quiero es que el programa me pida los datos, que los cargue y yo despues abriendo el .txt los pueda ver
¿El fprintf tendria que ir adentro del for y hacerse cada vez que ingreso el lote de una persona, no?
Muchas gracias de nuevo
#7
Hola quiero crear un archivo y cargarlo a partir de una estructura.
Crear el archivo creo que lo hago bien pero el problema es que no se como se carga los datos

#include <stdio.h>
#include <stdlib.h>
#define Arct "D:\\Ejercicios\\ArchivoDeTexto"
#include "ArchivoDeTexto.h"


int main()
{
    int i;
    tpers persona[5];
    FILE *fpTex;
    fpTex=fopen("Arct.txt","wt");
    if(fpTex=NULL)
    {
        printf("error");
    }

for(i=0;i<5;i++)
{
    printf("Ingrese el DNI:");
    scanf("%ld",&persona[i].dni);
    printf("El apellido y nombre:");
    scanf("%s",persona[i].apyn);
    printf("Ingrese el sexo:");
    scanf("%s",persona[i].sex);
    printf("Ingrese la fecha:");
    scanf("%d/%d/%d",
                        &persona[i].fec.di,
                        &persona[i].fec.me,
                        &persona[i].fec.an);
    printf("Ingrese el impuesto:");
    scanf("%f",&persona[i].impuesto);
    printf("\n");
}

    return 0;
}



typedef struct
{
    int di,
        me,
        an;
}tfecha;

typedef struct
{
    long dni;
    char apyn[34];
    char sex[2];
    tfecha fec;
    float impuesto;
}tpers;


Creo que hay una funcion para esto pero no pude encontrar cual es.
Gracias por adelantado
#8
Gracias de nuevo por responder, antes de anda probé el código y anda perfecto
if(!espacio_escrito  && des != cad)
            { /* No se ha escrito el espacio en la cadena final Y no estamos en el primer carácter de la cadena final */
                *des = ' ';
                des++;
                espacio_escrito = 1;
            }


Primero no entiendo muy bien este  if(!espacio_escrito  && des != cad). ¿en la primer parte preguntas si espacio_escrito==0? y  tampoco entiendo porque entra la primer vez ya que des y cad para mi son iguales (des apunta al primer elemento de la cadena y tengo entendido que un el nombre de un char hace lo mismo)
Segundo no entiendo como con *des = ' ' se borran todos los espacios en blanco. Mi razonamiento (que se que esta mal) es: des siempre apunta a un elemento de la cadena, si el contenido es un espacio en blanco con esa linea lo estas igualando a otro espacio en blanco por lo que debería quedar igual.
Perdon si son preguntas muy básicas pero recién estoy empezando a programar y me cuesta mucho entender codigo escrito por otro, gracias de nuevo
#9
Hola antes que nada muchas gracias por responder!!!
No entendí lo de los if, ¿vos decis hacer esto?
#include <stdio.h>
#include <stdlib.h>
#include "personas.h"

int main()
{ char cad[50];
char *pos=cad,
     *des=cad;
    printf("Ingrese la cadena:");
    gets(cad);
    puts(cad);
    while(*pos)
    {
       while(esBlanco(*pos)) /*muevo pos hasta que encuentre texto*/
         pos++;
        if(*pos)
          *des=aMayuscula(*pos); /*convierto la primer letra de la palabra en mayuscula*/
        pos++;
        des++;
        while(*pos&&!esBlanco(*pos)) /*convierto las demas palabras en minusculas*/
        {
            *pos=aMinuscula(*pos);
            *des=*pos;
            pos++;
            des++;
        }

    }

    *des='\0';
    puts(cad);
    return 0;
}


Y me olvide de avisar algo importante no se pueden usar las funciones de libreria de caracteres

Aca estan las funciones
#include"personas.h"

int esBlanco (char c)
{

    /*if (c==' '||c=='\t')
        return 1;
    return 0;*/



return c==' '||c=='\t';

}

char aMayuscula(char c)
{
    //if(c>='a'&&c<='z')
     //  c-=32;
    c>='a'&&c<='z'? c-=32 :c;
    return c;
}

char aMinuscula(char c)
{
    c>='A'&&c<='Z'? c+=32 :c;
}



Gracias de nuevo
#10
Hola, tengo el siguiente problema tengo que normalizar una cadena de caracteres. La normalizacion consiste en que ingresado un texto el programa le borra los espacios en blanco del principio, pone la primer letra en mayúscula y las demás en minúscula, después hace lo mismo con la siguiente palabra.
Ejemplo
Citarhola     mUndo

Cita de: NormalizadoHola mundo

El programa

#include <stdio.h>
#include <stdlib.h>
#include "personas.h"

int main()
{ char cad[50];
char *pos=cad,
     *des=cad;
    printf("Ingrese la cadena:");
    gets(cad);
    puts(cad);
    while(*pos)
    {
       while(esBlanco(*pos)) /*muevo pos hasta que encuentre texto*/
         pos++;
        if(*pos)
        {
            *des=aMayuscula(*pos); /*convierto la primer letra de la palabra en mayuscula*/
            pos++;
            des++;
        }
        while(*pos&&!esBlanco(*pos)) /*convierto las demas palabras en minusculas*/
        {
            *pos=aMinuscula(*pos);
            *des=*pos;
            pos++;
            des++;
        }

    }

    *des='\0';
    puts(cad);
    return 0;
}


Hace todo salvo que no deja el espacio entre las palabras sino que las deja pegadas. Pense en poner una bandera para que despues de salir de la primer palabra y despues de correr pos hasta la segunda palabra corra des un lugar. Pero no entiendo porque no funciona, se que debe ser una boludez pero no me puedo dar cuenta
Desde ya muchas gracias, saludos