Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: r1ghtz0 en Agosto 01, 2013, 11:57:18 pm

Título: ejercicio typedef struct{...}
Publicado por: r1ghtz0 en Agosto 01, 2013, 11:57:18 pm
Hola, bueno miren el ejercicio es el sieguiente:


Defina la siguente estructura de datos:

Código: [Seleccionar]
typedef char string[50];

typedef struct{
Tstring nombre;
Tstring area;
long int ventas;
}Tagente;

Escribir un programa que defina un vector de N agentes, permita la
introducción de los datos por teclado y, finalmente, muestre los
datos del agente con la máxima media de ventas.


Y entonces yo comienco a escribir el siguiente código:
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
/*
  Escribir un programa que defina un vector de N agentes, permita la
  introducción de los datos por teclado y, finalmente, muestre los
  datos del agente con la máxima media de ventas.
*/

typedef char Tstring[50];

typedef struct
{
Tstring nombre;
Tstring area;
long int ventas;
}Tagente;

int main(int argc, char **argv)
{
int i;
Tagente vector[4]

for(i= 0 ; i<4 ; i++){
printf("Ingrese el nombre: ");
scanf("%[^\n]", vector[i].nombre);
printf("\nIngrese el area: ");
scanf("%[^\n]", Tagente[i].area);
printf("\nCantidad de ");
scanf("%d", &Tagente[i].ventas);
}

return 0;
}

No sé, pero la lógica me dice que el vector[4] es una array de estructuras, las cuales tienen las platillas definidas por los campos de typedef struct{...}. Por esa razón considero que si capturo una cadena de caracteres
scaf("%s", vector[i].nombre);  esto debería de almacenar la cadena en el campo nombre del vector[i]. Al  final el compilador me da errores en los scanf();

Alguien me puede decir que está mal? :s
Título: Re:[ayuda] ejercicio typedef struct{...}
Publicado por: $Reveles en Agosto 02, 2013, 12:48:28 am
Hola pues te marca error por que declaras el vector del tipo estructura y lo quieres lees con tangente cosa que no se puede por que tangente es la estructura en si donde deberias guardar es en el vector, otra cosa es que para leer strings osea cadenas de caracteres es con "%s" no se que es %[^\n] tambien hize funciones para la tarea de ingresar y buscar ya que tu programa leia 4 agentes forzosamente por eso aumente tu vector a 100 como maximo e ingrese una variable auxiliar para ir apuntando las posiciones bueno ya quedo recuerda que cuando te muestra la posicion del estudiante los vectores empiezan desde 0 bueno mejor te lo dejo ya comentado paar que lo cheques
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
/*
  Escribir un programa que defina un vector de N agentes, permita la
  introducción de los datos por teclado y, finalmente, muestre los
  datos del agente con la máxima media de ventas.
*/



typedef char Tstring[50];

typedef struct
{
Tstring nombre;
Tstring area;
long int ventas;
}Tagente;
int cant_agen=0;               //creamos un auxiliar para ver cuantos agentes se van anotando
 Tagente vector[100];             //vector de tipo estructura de 100 lugares lo declaro global para no meternos en rollos de herencias aunque seria bueno investigarlo
void ingresa();
void mayorag();


//creamos una funcion para cuando se desee ingresar un nuevo agente
void ingresa(){                     //inicio de la funcion
     printf("Ingrese el nombre: ");
        scanf("%s",&vector[cant_agen].nombre);         //se lee con %s por que leeremos un string recuerda lo leemos en el vector tipo estructura y en la posicion cant_agent por que es el contro de donde numero de agentes
        printf("\nIngrese el area: ");
        scanf("%s",&vector[cant_agen].area);             //tambien es string
        printf("\nCantidad de ");
        scanf("%d", &vector[cant_agen].ventas);           //en este caso es un entero por eso es %d
        cant_agen++;                            //decimos que aumente un agente al numero de agentes
}                                       //fin funcion


void mayorag(){                             //funcion busqueda del mayor
int mayor=-1,i;                    //suponemos que las ventas son positivas por lo que con esta variable el mayor sera -1 cuando encuentre un mayor le diremos que sea el nuevo mayor
                                      //aunque lo ideal seria emplear un metodo de busqueda pero no quiero revolverte por ahora
    for(i=0;i<cant_agen;i++){           //for desde 0 hasta la cantidad de agentes
if(mayor<vector[i].ventas){      //si mayor es menor que las ventas del agente
mayor=i;                      //guardamos la posicion del vector
}                               //fin si
    }                                  //fin para
    printf("\nel mayor esta en la posicion %d \n",mayor); //una ves encontrado mostramos los datos
     printf("\nnombre: %s \n",vector[mayor].nombre);
      printf("\narea: %s \n",vector[mayor].area);
       printf("\nventas %d \n",vector[mayor].ventas);
       system("pause");                                   //pausamos para que el usuario vea
}                               //fin funcion



int main()
{
    int sal=0,opc,may;                    //variables para elegir la salida o la opcion de el mayor o insertar agentes
   while(sal==0){                      //mientras salir valga cero
      system("cls");                    //limpiamos pantalla
printf("Que deseas hacer\n1.-Insertar un nuevo agente\n2.- buscar al de mayor ventas\n3.- salir\n");  //mostramos menu
scanf("%d",&opc);                   //leemos la opcion
switch(opc){                       //metemos un switch para evaluarla en casos
case 1:                        //si opc es 1 osea nuevo agente
ingresa();                 //lamamos a la funcion agente para que pida los dator
break;                       //fin caso
case 2:                        //si es opc 2
mayorag();                  //llamamos a funcion de busqueda
break;                     //fin caso
case 3:                      //si es 3
printf("hasta luego\n");    //nos despedimos
sal=1;                         //sal de salida =1 para que no vuelva a entrar al ciclo mientras
break;                     
}   //fin caso
}                           //fin mientras
 }                                     //fin programa principal   
 
Saludos Familia!!!
Título: Re:[ayuda] ejercicio typedef struct{...}
Publicado por: k133 en Agosto 02, 2013, 12:51:06 am
Tal que así, mira bien que tienes errores por no repasarlo bien :p

Código: [Seleccionar]
#include <stdio.h>

typedef struct agente{
  char nombre[50];
  char area[50];
  long int ventas;
}Tagente;

int main(){
  Tagente vector[4];
  int i;

  for(i=0; i < 4; i++){
    printf("Ingrese el nombre: ");
    scanf("%s", vector[i].nombre);
    printf("Ingrese el area: ");
    scanf("%s", vector[i].area);
    printf("Cantidad de ");
    scanf("%ld", &vector[i].ventas);
  }

  return 0;
}
Título: Re:ejercicio typedef struct{...}
Publicado por: r1ghtz0 en Agosto 02, 2013, 09:50:56 pm
$Reveles

Gracias por tus sugerencias, pero yo la verdad no manejo bien las funciones, por eso fue que a la final lo hice de esta manera:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
/*
  Escribir un programa que defina un vector de N agentes, permita la
  introducción de los datos por teclado y, finalmente, muestre los
  datos del agente con la máxima media de ventas.
*/

typedef char Tstring[50];

typedef struct //Define un tipo estruct
{
Tstring nombre;
Tstring area;
long int ventas;
}Tagente; //variable de tipo estructura

int main(int argc, char **argv)
{
int j, i, num, cont= 0;
printf("Ingrese el número de agentes: ");
scanf("%d", &num);
Tagente vector[num];

for(i= 0 ; i<num ; i++){
printf("\nIngrese el nombre: ");
scanf("%s", vector[i].nombre);
printf("\nIngrese el area: ");
scanf(" %[^\n]", vector[i].area);
printf("\nCantidad de ventas: ");
scanf("%ld", &vector[i].ventas);
}

for(i= 0 ; i<num ; i++){
vector[i].ventas= vector[i].ventas/5;
}

for(i= 0 ; i<num ; i++){
for(j= 0 ; j<num ; j++){
if(vector[i].ventas > vector[j].ventas){
cont++;
}
if(cont == num-1){
    printf("\nEl agente com mayor media de ventas es:");
    printf("\n%s con %ld media de vetas", vector[i].nombre, vector[i].ventas);
    break;
    }
}
}

return 0;
}

Me funcionó el Tagente vector[num]; y el programa hace lo que me piden, captura los datos de N agentes y divide sus ventas entre 5 (suponiendo que trabaja 5 días a la semana), por lo tanto el agente que tenga el número de vetas mayos es el que tiene la media de ventas mayor.
Título: Re:ejercicio typedef struct{...}
Publicado por: k133 en Agosto 03, 2013, 12:16:42 am
Una cosa, es que veo que tienes algunas cosas ahí que no usas, por ejemplo, añades un motón de cabeceras y sin mirar mucho el código, con la "stdio.h" creo que ya te valdría.

Y también los parámetros que pones que va a recibir la función main() , que yo vea no vas a pasar al programa ningún parámetro, así que no te haría falta ponerlo.