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

#71
Hola

Tengo que hacer un programa en el cual a partir de un archivo .csv que se encuentra en mi escritorio, lo que tengo que hacer es leerlo y guardarlo en un arreglo. Este arreglo es un tipo de dato creado por mi (struct)
El tema es que cuando ejecuto el programa no sale nada, no tira error, simplemente queda la consola en negro.
En el archivo .csv estan los datos de 10 puntos (x e y).

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

struct punto
{
    int x;
    int y;

};
typedef struct punto tipoPunto;

void LECTURA (tipoPunto arreglo[10]);

int main()
{
    tipoPunto arreglo[10];
    LECTURA(arreglo);

    return 0;
}
void LECTURA (tipoPunto arreglo[10])
{
    FILE*arch;
    int i=0,j=0;
    arch=fopen("C:\\Users\\Pablo-PC\\Desktop\\puntos.csv","r");
    while (!feof(arch))
    {
        fscanf(arch,"%d,%d\n",&arreglo[i].x,&arreglo[i].y);
        i++;
    }
    fclose(arch);

        for (j=0;j<10;j++)
    {
        printf ("Punto %d = %d - %d",i,arreglo[j].x,arreglo[j].y);
    }

}
#72
Programación C/C++ / Ordenar una matriz en C?
6 Septiembre 2016, 01:06 AM
Hola

Tengo un problema con este ejercicio. Me piden ordenar una matriz de enteros, de menor a mayor usando burbujeo.
Lo que hago es realizar la carga aleatoria de la matriz, imprimirla y luego debo imprimir la matriz nuevamente pero modificada.

La cuestion es que me dan el siguiente codigo para hacer el burbujeo pero al ser bidimensional no le encuentro la logica, no puedo reconocer en este codigo de burbujeo la forma bidimensional

void ordenar(int a[], int longitud)
{
int i, j, aux;
for (i = 0; i < longitud; i++)
{
for (j = i + 1; j < longitud; j++)
{
if (a[j] < a[i])
{
aux = a[i]; a[i] =
a[j]; a[j] = aux;
}
}
}
}


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void CARGA (int arreglo[3][3]);
void IMPRIMIR(int arreglo[3][3]);
void MODIFICAR(int arreglo[3][3]);

int main()
{
    srand(time(NULL));
    int arreglo[3][3],arreglin[3];
    printf ("La matriz sin modificar es : \n");
    CARGA(arreglo);
    printf ("\n");
    IMPRIMIR(arreglo);
printf ("\n");
MODIFICAR(arreglo);



    return 0;
}
void CARGA (int arreglo[3][3])
{
    int fila=0,columna=0;

    while (fila<3)
    {
        arreglo[fila][columna]=rand()%11+1;
        columna++;
        arreglo[fila][columna]=rand()%11+1;
        columna++;
        arreglo[fila][columna]=rand()%11+1;
        columna++;
        fila++;
        columna=0;
    }
}

void IMPRIMIR(int arreglo[3][3])
{
int fila=0,columna=0;

for (fila=0;fila<3;fila++)
{
     for (columna=0;columna<3;columna++)
     {
         printf (" %d ",arreglo[fila][columna]);
     }
     printf ("\n");
}




}

void MODIFICAR(int arreglo[3][3])
{
    int fila=0,columna=0;
   
    for (fila=0;fila<3;fila++)
    {
        for (columna=fila+1;columna<3;columna++)
        {
           
           
           
           
        }
    }
}

#73
Hola

Tengo problemas con el siguiente ejercicio "Realizar una función que efectúe el SHIFT A DERECHA completando con 0 desde la izquierda. Aplicarla en
un programa de ejemplo. "

Se hacerlo con el shift a la izquierda pero no me sale con el shift a derecha, ni tampoco se como completar con 0 desde la izquierda, estoy re perdido con este.

Basicamente el programa tiene que

- Pedir letra
- Realizar la funcion
- Mostrar la letra en binario.

Con el de la izquierda no tengo problemas y me quedo asi

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

int main()
{
    char letra;
    int i=7;
    printf ("Ingrese una letra: \n");
    letra=getche();
    printf ("\n");
    while (i>=0)
    {
        if (letra&(1<<i))
        {
            printf ("1");
        }
        else
        {
            printf ("0");
        }

    i--;


    }




    return 0;


}


Como tendria que modificarlo para que me quede como me piden?..Porque siempre use el izquierdo.
#74
Cita de: AlbertoBSD en 30 Agosto 2016, 00:52 AM
El problema esta al revolver fgets y los scanf, los scanf no procesan el ultimo Enter por lo cual es como si quedara en la entrada, al momento de leer con el fgets por segunda ves, entra el enter y se salta ese fgets...


Soluciones:


  • No usar scanf
  • agregar un getchar despues del ultimo scanf para omitir el ultimo retorno de Linea

Que genio, nunca se me hubiera ocurrido ;-) ;-) ;-)
#75
Tengo que hacer un listado de equipos de futbol con sus respectivos puntos, partidos ganados, etc. El problema es que por el momento estoy haciendo la carga y en la primera pasada del ciclo va perfecto, ahora cuando empieza nuevamente se saltea la funcion fgets...Lo intente con fgets y con gets y ninguno de los 2 cambia el resultado.


El problema esta en esta linea 29.
En este caso puedo poner el fgets como lo puse o puedo poner "gets(nombre").



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void CARGA (char nombre[5][20],int arreglo[5][8]);

int main()
{

    char nombre[5][20];
    int arreglo[5][8];
    CARGA(nombre,arreglo);



   return 0;
}





void CARGA (char nombre[5][20],int arreglo[5][8])
{
      int i=0,total=0,ganado=0,empate=0,perdido=0,favor=0,contra=0,dif=0,puntito=0;

    while (i<5)
    {
        printf ("Ingrese el nombre del equipo: ");
        fgets(nombre[i],20,stdin);
        printf ("Ingrese la cantidad de partidos jugados: ");
        scanf("%d",&total);
        printf ("Ingrese la cantidad de partidos ganados: ");
        scanf("%d",&ganado);
        printf ("Ingrese la cantidad de partidos empatados: ");
        scanf("%d",&empate);
        printf ("Ingrese la cantidad de partidos perdidos : ");
        scanf("%d",&perdido);
        printf ("Ingrese la cantidad de goles a favor:  ");
        scanf ("%d",&favor);
        printf ("Ingrese la cantidad de goles en contra:  ");
        scanf ("%d",&contra);
        dif=favor-contra;
        puntito=3*ganado+empate;

        arreglo[i][0]=puntito;
        arreglo[i][1]=total;
        arreglo[i][2]=ganado;
        arreglo[i][3]=empate;
        arreglo[i][4]=perdido;
        arreglo[i][5]=favor;
        arreglo[i][6]=contra;
        arreglo[i][7]=dif;
        i++;
    }
}


Quizas es algo muy tonto pero no es la primera vez que me pasa y se hacerlo sin usar fgets o gets pero mi intencion ya que hace muy poco descubri estas funciones, es aprovecharla y ahorrar codigo.
#76
Hola

Quiero realizar un programa en donde me pida algunos datos y quiero guardar uno de ellos en un arreglo con la funcion gets(string). El problema es que al realizar la carga es como que se saltea la funcion y me pide ingresar los datos del proximo dato.

La parte donde falla es la siguiente

  fila=0;
        printf ("\nIngrese el nombre del alumno: ");
        gets(nombre);
        printf ("\nIngrese el numero de comision:  ");
        scanf ("%d",&comision);
        printf  ("\n%s",nombre);



Al ejecutarlo directamente se saltea el gets y empieza por "Ingrese el numero de comision". A este codigo le faltan declarar variables, etc pero quizas no estoy entendiendo el funcionamiento de la funcion, que desventajas tiene ,etc o porque se saltea?.

Muchas gracias
#77
Cita de: AlbertoBSD en 27 Agosto 2016, 19:39 PM
Asi es el ASCII de cada letra compara posicion por posicion mientras sean iguales y con la primera diferencia devuelve -1 o +1 dependiendo si es menor o mayor el simbolo en cuestion.

Saludos

Osea que si encuentra la primera diferencia ya termina el funciomamiento de la funcion?
#78
Hola


Esta funcion devuelve 0 si las cadenas de texto son iguales (incluyendo mayúsculas y minúsculas); si la primera cadena es mayor que la segunda, devuelve un número positivo; si es mayor la segunda, devuelve un valor negativo..

Supongamos que tengo los siguientes arreglos:

char s1[5] = "Abeja";
char s2[5] = "Azul";

Mi duda es como se analiza cual es mayor o menor.
No entiendo como la funcion va recorriendo cada uno de los arreglos y decidir cual es mayor o menor.
La primera letra de ambos arreglos es la "A", luego ahi cambian de letra.
Como puedo pensar logicamente a esta funcion?....Va recorriendo letra x letra o que?...Y cuando dice mayor o menor se refiere al numero ascii de cada letra?
#79
Cita de: kuni2006 en 26 Agosto 2016, 19:13 PM
Yo hice la siguiente funcion:


int comparar(int vector1[], int n1, int vector2[], int n2)
{
    int i;
    if (n1 == 0 && n2 != 0)
        {
        return -1;
        }
    if  (n2 == 0 && n1 != 0)
        {
        return 1;
        }
    for(i=0;i<n1||i<n2;i++)
        {
        if(vector1[i]<vector2[i])
            {
            return -1;
            }
        if(vector1[i]>vector2[i])
            {
            return 1;
            }
        if(vector1[i]==vector2[i]&&n1==n2)
            {
            return 0;
            }
        }
    return 0;
}


y me devuelve el siguiente error varias veces:

==22== Conditional jump or move depends on uninitialised value(s)
==22==    at 0x400738: comparar (tp0.c:67)
==22==    by 0x400DEB: prueba_comparar (tp0_pruebas.c:80)
==22==    by 0x400558: main (tp0_pruebas.c:147)
==22==  Uninitialised value was created by a stack allocation
==22==    at 0x400B20: prueba_comparar (tp0_pruebas.c:48

Si alguien me pudiera dar una mano, estaria muy agradecido.

Como dijeron te falta inicializar variable, en algunos compiladores como el codeblocks no te pide que inicialices pero si es necesario hacerlo si vas a usar la variable en un arreglo o si lo que estas haciendo es un contador porque no sabes el valor que puede tener esa variable.
#80
Hola

Estoy recien empezando a ver archivos y queria saber como puedo copiar el contenido de un archivo de texto (.txt) en un arreglo bidemensional.
La idea seria que tengo un txt con varios nombres cargados

"Milan
Real Madrid
Ajax
Arsenal
Bayern Munich "

Y quiero pasar cada uno de los nombres a un arreglo de manera que si yo quiero imprimir el nombre "Milan", tendria que poner printf ("%s",arreglo[0]);

El codigo que hice hasta ahora es el siguiente.

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

int main()
{
    char arreglo[5][20],fila=0,columna=0,aux;
    FILE* arch;
    arch=fopen("C:\\Users\\Usuario\\Desktop\\Equipos.txt","r");

    while (!feof(arch))
    {
        fgets(arreglo,20,arch);
       
    }


    fclose(arch);
    return 0;
}


El problema es que al intentar poner un printf para que muestre lo que hay en la posicion 0, no me sale nada o sale cualquier cosa, entonces basicamente no entiendo lo que hace la funcion fgets.
Entiendo que copia linea por linea, pero no se la manera de pasar esto a un arreglo ya que no me sale.