Foro Oficial De C++

Ahi ta!!

Todo era que en peso habia que ponerle %d en vez de %f!! :confused: no se porque eso paso pero ahi esta funcionando!! ;)

PHP:
# include <conio.h>
# include <stdio.h>


struct datos{

    char *nombre [30];
    int edad;
    double peso;

};

static struct datos escuela[20];

void main() {

int a,i,c,z,Z;
float x,s,e,p;


for(a=0;a<=19;a++){
    printf("\n\nDame el nombre del alumno [%i]\t", a);
    scanf("%s",& escuela [a].nombre);

    printf("\n\nDame el peso del alumno [%i]\t", a);
    scanf("%d",& escuela [a].peso);

    printf("\n\nDame la edad del alumno [%i]\t", a);
    scanf("%d",& escuela [a].edad);
}


for (i=0;i<=19;i++){
    printf("\n Alumno: [%i]",i);
    printf("\n\t Nombre: [%s]", escuela[i].nombre);
    printf("\n\t Peso: [%f]", escuela[i].peso);
    printf("\n\t Edad: [%i]", escuela[i].edad);
}



for (a=0;a<=19;a++){
  for (i=a+1;i<=a;i++){

    if(escuela [a].peso < escuela [i].peso)
      z=escuela [a].peso;
      escuela [a].peso = escuela [i].peso;
      escuela [i].peso = z;
  }
}

printf("\nel peso mas alto es : \n\n %f", escuela [1].peso);
printf("\nel peso mas bajo es : \n\n %f", escuela [19].peso);

for (a=0;a<=19;a++){
  for (c=a+1;c<=a;c++){

     if(escuela [a].edad<escuela [c].edad)
	Z=escuela [a].edad;
	escuela [a].edad=escuela [c].edad;
	escuela [c].edad=Z;
   }
}

printf("\nla edad mas alta es: \n\n %f", escuela [1].edad);
printf("\nla edad mas baja es: \n\n %f", escuela [19].edad);


for (a=0;a<=19;a++){
   x=0;
   s=0;
   x=x+escuela [a].edad;
   s=s+escuela [a].peso;
}

printf("\n\nel promedio de edades es t %f",x/20);
printf("\n\nel promedio de peso es t %f",s/20);

getch();

}


Porque utilizar esa Static Struct?? :S

SuerteX ;)
 
Y por aqui conocen de metodos numericos? por q si es asi tambien los voy a molestar....muy frecuentemente..... :p salu2.
 
Por cierto lovo15 donde quiera que deje las variables como float osea %f cambialas a %d, supongo que el problema es que los float requiere 4 bytes, los double 8 long double 12, y si te fijas tienes un arreglo [20]!!

Por cierto alguien me puede decir como usar las teclas de funciones desde F1-F12?? osea que al presionarlas salga del programa o algo asi...


SuerteX =)
 
Buenas por aqui... que mas getne.... bien o no... hace rato no pasaba...
Metodos numericos.. lo q me quedo de la U... cualquier cosa.. me dice..
saludos a los de siempre...
 
hola amigos laneros... soy nuevo en la comunidad... pero desde hace rato estaba registrado en ella.... estudion ing de sistemas y post para mi proyecto de semestre tengo que presentar o elaborar un programa en c++.... ya que ese es el codigo base que utilizamos para aprender a programar...
ya volviendo al cuento del programa quisierea que porfavor alguno de ustede me pasaran codigos fuentes o .cpp que ya se puedan ejecutar... estoy en segundo semestre..
si alguien me puede ayudar se les agradese... es solo para tomar algunos programas como ejemplo y ordenarlos en uno solo... gracias
 
selmineos dijo:
hola amigos laneros... soy nuevo en la comunidad... pero desde hace rato estaba registrado en ella.... estudion ing de sistemas y post para mi proyecto de semestre tengo que presentar o elaborar un programa en c++.... ya que ese es el codigo base que utilizamos para aprender a programar...
ya volviendo al cuento del programa quisierea que porfavor alguno de ustede me pasaran codigos fuentes o .cpp que ya se puedan ejecutar... estoy en segundo semestre..
si alguien me puede ayudar se les agradese... es solo para tomar algunos programas como ejemplo y ordenarlos en uno solo... gracias

amigo... yo le ayudo,pero mas o menos que quiere...
q temas en especifico? :rolleyes:
 
selmineos dijo:
hola amigos laneros... soy nuevo en la comunidad... pero desde hace rato estaba registrado en ella.... estudion ing de sistemas y post para mi proyecto de semestre tengo que presentar o elaborar un programa en c++.... ya que ese es el codigo base que utilizamos para aprender a programar...
ya volviendo al cuento del programa quisierea que porfavor alguno de ustede me pasaran codigos fuentes o .cpp que ya se puedan ejecutar... estoy en segundo semestre..
si alguien me puede ayudar se les agradese... es solo para tomar algunos programas como ejemplo y ordenarlos en uno solo... gracias

Primero que nada bienvenido a LANeros.com y lo segundo es que si revisa en estas 30 paginas puede encontrar muchos programas realizados.....(Uno que una vez encontre y lo arregle y nunca lo subi pero le elimine como 3 variables que se podian reducir XD)


SuerteX =)
 
Teclas de Funcion en Dev C++

VIRUTERO_5 dijo:
Por cierto alguien me puede decir como usar las teclas de funciones desde F1-F12?? osea que al presionarlas salga del programa o algo asi...
´

Mira aqui te mando un ejemplo/tutorial que hice en Dev C++ (tutorial pues incluí comentarios).
Con esto practicamente puedes disponer del teclado completo (Excepto las teclas Alt, Despl y Pausa). Lo hice de esta forma pues si corres el código te vas a dar cuenta que las teclas F1 a F10 se detectan de una manera mientras F11 y F12 se detectan de otra. Y de paso puedes detectar cualquier otra tecla (a excepcion de Alt, Despl y Pausa)

La teoría básica de este ejemplo la tomé de Este Link para Borland C++. Pero la verdad, en Dev C++ no funciona exactamente como está descrito alli. Así que el ejemplo final lo logré por prueba y error.

PHP:
//Ejemplo/tutorial instrucción getch() para leer el teclado (Dev C++)
//Por gixgg

#include <iostream>
#include <conio.h> // Necesario pues habilita las funciones Borland C++ (incluyendo getch() que es lo que necesitas)

using namespace std;

int main()
{

int terminar_programa;
int tecla; // Variable donde guardaremos el valor de la tecla presionada

     cout<< "Tutorial Teclado en Dev C++ por Gixgg!\n";

do
{
     tecla=getch(); // Lee la tecla presionada
     
     if(tecla==0) // Algunas teclas especiales devuelven 0 la primera vez que se invoca getch()
     {
         tecla=getch(); // Como ya se sabe que es una tecla especial que primero devuelve 0...La segunda vez que se invoca getch() si retorna un valor
         // Aqui van todas las teclas que devuelven primero 0 cuando son presionadas
         // F1 a F10, Combinaciones de Alt gr
         printf("Esta tecla primero retorna 0 y luego %i\n",tecla); // Esto puedes usarlo para probar que valor devuelve cada tecla
         // Cuando ya tengas el valor correspondiente incluyes en este bloque el código que necesites
         // Por ejemplo F1=59
         if(tecla==59)
         printf("Presionada F1\n"); // O lo que quieres ejecutar
     }
     else
     {
         if(tecla==224)  // Algunas teclas especiales devuelven 224 la primera vez que se invoca getch()
         {
             tecla=getch(); // Como ya se sabe que es una tecla especial que primero devuelve 224...La segunda vez que se invoca getch() si retorna un valor
             // Aqui van todas las teclas que devuelven primero 224 cuando son presionadas
             // F11,F12,Insertar,Suprimir,Inicio,Fin,RePag,AvPag,Teclas de Direccion
             printf("Esta tecla primero retorna 224 y luego %i\n",tecla); // Nuevamente para probar que valor devuelve cada tecla
             // Cuando ya tengas el valor correspondiente incluyes en este bloque el código que necesites
             // Por ejemplo F11=133
             if(tecla==133)
             printf("Presionada F11\n"); // O lo que quieres ejecutar            
         }
         else
         {
             // Aqui van todas las teclas que devuelven un valor apenas son presionadas (Resto del Teclado)
             // Bloq Mayus y Shift funcionan normalmente (para convertir mayusculas/minusculas o leer caracteres como !"#$+.:, etc)
             // Pueden detectarse combinaciones de Ctrl, pero hay que tener cuidado pues por ejemplo:
             // Ctrl-H=8 y la tecla [<--]=8 también
             // Ctrl-I=9 y la tecla [Tab]=9 también
             // Ctrl-M=13 y la tecla [Enter]=13 también
             printf("Esta tecla retorna inmediatamente el valor %i\n",tecla); // Nuevamente para probar que valor devuelve cada tecla
             // Cuando ya tengas el valor correspondiente incluyes en este bloque el código que necesites
             // Por ejemplo ESC=27
             if(tecla==27)
             terminar_programa=1; // O lo que quieres ejecutar
         }
     }
}
while(terminar_programa!=1);
}

// Teclas que no pueden detectarse con este codigo:
// Alt no funciona (Alt-TECLA devuelve lo mismo que presionar dicha TECLA)
// Despl y Pausa
 
Problema con asignacion

Tengo un problema en el siguiente código:

Código:
#include <stdio.h>

int main(int argc, char *argv[])
{   char linea[20];
    FILE *Archivo;		// Texto de entrada
    
    int j = 0;  //Indice para moverme en el vector char *
    char* datos[20] = {0};   // A lo más 21 líneas de datos
    
    Archivo  = fopen("ejemplo.txt", "r");// el Parametro r es para decir que el archivo es solo de lectura(reading)
     
    if (Archivo == NULL) {
       printf("Archivo de entrada es NULO\n");
       return 1;
    }
    
    while (fscanf(Archivo, "%20[^\n]\n", linea) != EOF) {
            datos[j] = linea;    //INTENTO ASIGNAR A CADA POSICION DEL VECTOR UNA LINEA DEL ARCHIVO
            printf("%s%\n",linea);
            j++;
     }
    
      for(int k = 0; k < 20; k++){
            printf("%s\n", datos[k]);
   
 return EXIT_SUCCESS;
}

Lo que intento hacer es que cada línea del archivo quede en una posición del vector. El problema es que cada vez que intento asignar la línea a la posición en el vector, lo que hay cuando imprimo, en todo el vector, es lo que haya en la última línea del archivo. No se si será que todavía no comprendo muy bien el funcionamiento del fscanf.
Para la solución de fijo tengo que utilizar el fscanf y mantenerme en lo más básico del lenguaje c++!!! casi que c!! A ver si me pueden dar una ayudadilla...gracias
:S :S :S
 
Luisdo22 dijo:
Tengo un problema en el siguiente código:

Código:
#include <stdio.h>

int main(int argc, char *argv[])
{   char linea[20];
    FILE *Archivo;		// Texto de entrada
    
    int j = 0;  //Indice para moverme en el vector char *
    char* datos[20] = {0};   // A lo más 21 líneas de datos
    
    Archivo  = fopen("ejemplo.txt", "r");// el Parametro r es para decir que el archivo es solo de lectura(reading)
     
    if (Archivo == NULL) {
       printf("Archivo de entrada es NULO\n");
       return 1;
    }
    
    while (fscanf(Archivo, "%20[^\n]\n", linea) != EOF) {
            datos[j] = linea;    //INTENTO ASIGNAR A CADA POSICION DEL VECTOR UNA LINEA DEL ARCHIVO
            printf("%s%\n",linea);
            j++;
     }
    
      for(int k = 0; k < 20; k++){
            printf("%s\n", datos[k]);
   
 return EXIT_SUCCESS;
}

Lo que intento hacer es que cada línea del archivo quede en una posición del vector. El problema es que cada vez que intento asignar la línea a la posición en el vector, lo que hay cuando imprimo, en todo el vector, es lo que haya en la última línea del archivo. No se si será que todavía no comprendo muy bien el funcionamiento del fscanf.
Para la solución de fijo tengo que utilizar el fscanf y mantenerme en lo más básico del lenguaje c++!!! casi que c!! A ver si me pueden dar una ayudadilla...gracias
:S :S :S

mira a ver que tal asi...
nunca había visto esa manera de trabajar el fscanf pero debe funcionar.. así que lo puse como alguna vez lo trabaje yo, espero que te funcione.:)

Código:
#include <stdio.h>
int main(int argc, char *argv[]){
   char linea[20];
   FILE *Archivo;		// Texto de entrada
   int j = 0;  //Indice para moverme en el vector char *
   char* datos[20] = {0};   // A lo más 21 líneas de datos

Archivo  = fopen("ejemplo.txt","r");// el Parametro r es para decir que el archivo es solo de lectura(reading)

 if (Archivo == NULL) {
   printf("Archivo de entrada es NULO\n");
   return 1;
 }
  while (Archivo!= EOF) {
   fscanf(Archivo,"%s\n",linea);
   datos[j] = linea;    //INTENTO ASIGNAR A CADA POSICION DEL VECTOR UNA LINEA DEL ARCHIVO
   j++; 
  }

  for(int k = 0; k < 20; k++){
   printf("%s\n", datos[k]);
   return EXIT_SUCCESS;
}
 
UA©-LiKÍßÜ奫ا» dijo:
mira a ver que tal asi...
nunca había visto esa manera de trabajar el fscanf pero debe funcionar.. así que lo puse como alguna vez lo trabaje yo, espero que te funcione.:)

Código:
  while (Archivo!= EOF) {
   fscanf(Archivo,"%s\n",linea);
   datos[j] = linea;    //INTENTO ASIGNAR A CADA POSICION DEL VECTOR UNA LINEA DEL ARCHIVO
   j++; 
  }

En el while da error de compliacion!!! Tipos incompatibles}] Cuando imprimo directamente de ese while todo parece estar bien...el problema es la asignación al vector!!!
 
hello, recuerda que las variables C/C++ declaradas con char* o char[TAMAÑO_CADENA] son realmente apuntadores a arreglos de caracteres y NO se deben asignar a otra variable de cadena con el operador =, sino a través de la función strcpy(cadena destino, cadena origen) (creo que es así la sintaxis), porque con el código que posteas lo que consigues es que datos[j] apunte a la misma dirección de memoria que linea. cambia datos[j] = linea por strcpy(datos[j], linea);
 
Luisdo22 dijo:
Tengo un problema en el siguiente código:

Código:
#include <stdio.h>

int main(int argc, char *argv[])
{   char linea[20];
    FILE *Archivo;		// Texto de entrada
    
    int j = 0;  //Indice para moverme en el vector char *
    char* datos[20] = {0};   // A lo más 21 líneas de datos
    
    Archivo  = fopen("ejemplo.txt", "r");// el Parametro r es para decir que el archivo es solo de lectura(reading)
     
    if (Archivo == NULL) {
       printf("Archivo de entrada es NULO\n");
       return 1;
    }
    
    while (fscanf(Archivo, "%20[^\n]\n", linea) != EOF) {
            datos[j] = linea;    //INTENTO ASIGNAR A CADA POSICION DEL VECTOR UNA LINEA DEL ARCHIVO
            printf("%s%\n",linea);
            j++;
     }
    
      for(int k = 0; k < 20; k++){
            printf("%s\n", datos[k]);
   
 return EXIT_SUCCESS;
}

Lo que intento hacer es que cada línea del archivo quede en una posición del vector. El problema es que cada vez que intento asignar la línea a la posición en el vector, lo que hay cuando imprimo, en todo el vector, es lo que haya en la última línea del archivo. No se si será que todavía no comprendo muy bien el funcionamiento del fscanf.
Para la solución de fijo tengo que utilizar el fscanf y mantenerme en lo más básico del lenguaje c++!!! casi que c!! A ver si me pueden dar una ayudadilla...gracias
:S :S :S

otro detalle importante es el sgte: declaras a datos como un arreglo de 20 apuntadores a cadenas de caracteres, pero antes de asignarle valor a algun índice del vector debes reservar memoria para la cadena de caracteres, i mean por ejemplo quedaría así:

while (fscanf(Archivo, "%20[^\n]\n", linea) != EOF) {
datos[j] = new char[strlen(linea)]; // Reservar memoria para guardar una cadena de caracteres de longitud maxima igual a la longitud de linea
strcpy(datos[j], linea); //Copiar la cadena leida del fichero en el indice j-ésimo del vector
printf("%s%\n",linea);
j++;
}
 
Si en eso tenés razón pero para usar el stcpy tendria que usar una libreria que no es permitida. Tendria que contruir mi propio strcpy. Pero se me viene a la cabeza que lo que hago es poner cada posicion del vector a que apunte a linea y por eso todos quedan con lo mismo!!!! Gracias...ahora el dilema es como solucionarlo!!!???
 
Luisdo22 dijo:
En el while da error de compliacion!!! Tipos incompatibles}] Cuando imprimo directamente de ese while todo parece estar bien...el problema es la asignación al vector!!!

que pena.... jejeje tanto tiempo...
bueno prueba ahora asi.. a ver q tal..
Código:
  while ( !EOF(Archivo)) {
fscanf(Archivo,"%s\n",linea);
datos[j] = linea;    //INTENTO ASIGNAR A CADA POSICION DEL VECTOR UNA LINEA DEL ARCHIVO
j++; 
}
 
Luisdo22, existe una solucion aunque no me gusta mucho, se basa en las facilidades en el maneje de apuntadores que brinda el C/C++, la idea es que cada vez que leas una linea del fichero cambies la dirección de memoria de la variable linea y así cada índice del vector datos apuntará a su propia cadena de caracteres. Sería algo así:

#include <stdio.h>
int main(int argc, char *argv[])
{ char *linea; // Que sea apuntador para que cambie dinamicamente cada vez que se lea un línea del fichero
FILE *Archivo; // Texto de entrada
int j = 0; //Indice para moverme en el vector char *
char* datos[20] = {0}; // A lo más 21 líneas de datos
Archivo = fopen("ejemplo.txt", "r");// el Parametro r es para decir que el archivo es solo de lectura(reading)
if (Archivo == NULL) {
printf("Archivo de entrada es NULO\n");
return 1;
}
linea = new char[20];
while (fscanf(Archivo, "%20[^\n]\n", linea) != EOF) {
datos[j] = linea; //INTENTO ASIGNAR A CADA POSICION DEL VECTOR UNA LINEA DEL ARCHIVO
printf("%s%\n",linea);
linea = new char[20]; // Asignarle una posicion de memoria diferente para la proxima lectura
j++;
}
for(int k = 0; k < 20; k++){
printf("%s\n", datos[k]);
return EXIT_SUCCESS;
}

Es muy posible que funciones, suerte...
 
otra solución: olvidate de la raviable linea, escribe directamente en el vector datos.

#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *Archivo; // Texto de entrada
int j = 0; //Indice para moverme en el vector char *
char* datos[20] = {0}; // A lo más 21 líneas de datos
Archivo = fopen("ejemplo.txt", "r");// el Parametro r es para decir que el archivo es solo de lectura(reading)
if (Archivo == NULL) {
printf("Archivo de entrada es NULO\n");
return 1;
}
datos[0] = new char[20];
while (fscanf(Archivo, "%20[^\n]\n", datos[j]) != EOF) {
printf("%s%\n",datos[j]);
j++;
datos[j] = new char[20]; // Asignarle memoria a la proxima posicion del vector
}
for(int k = 0; k < 20; k++){
printf("%s\n", datos[k]);
return EXIT_SUCCESS;
}
 

Los últimos temas