necesito ayuda aqui, plox, me podrian ayudar?

Iniciado por LARANARENElol, 2 Diciembre 2018, 23:56 PM

0 Miembros y 2 Visitantes están viendo este tema.

LARANARENElol

disculpen pero este programa ya me tiene bien tilteado pero no se que hacer para que funcione de una mendig vez, esta es la sintaxis del problema:

En una escuela se desea un programa que permita la entrada de los nombres (proporcionar por separado:
nombre, apellido paterno y apellido materno) y promedios de cada uno de los alumnos que van a egresar de
secundaria, se desea mostrar un listado de cuantos son de apellido paterno "CARDENAS", además se va a dar un
reconocimiento al alumno con el promedio más alto por lo que el programa deberá mostrar también el nombre y
promedio del alumno con el promedio más alto. Al mostrar el nombre completo del alumno con máximo promedio
deberá estar concatenado.
Nota.- el programa finaliza cuando el usuario no tenga más alumnos por capturar (respuesta si-no)

y esto es lo que llevo del mismo, (me da erroe en el main donde dice R= registro(nom,ape,apeM,calif, &n);

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
void registro( char nom[30][15],char ape[30][15], char apeM[30][15], float calif[30],int *n);
void main(void)
{int y, n=0,R;
char nom[15], ape[15],apeM[15];
char R,cadena1[9]="Cardenas",nombrecompleto[30],nomcalifM[30]="";
float* calif;float cont1=0,califM=0;

R= registro(nom,ape,apeM,calif, &n);

{
y=strlen(nom)+strlen(ape)+strlen(apeM)+2;
if(y<30)

strcpy(nombrecompleto,nom);
 
strcpy(nombrecompleto," ");
 
strcpy(nombrecompleto,ape);
 
strcpy(nombrecompleto," ");
 
strcpy(nombrecompleto,apeM);
  fflush(stdin);
puts(nombrecompleto);
if(calif>califM)
{
califM=calif;
strcpy(nomcalifM,nom);
}
if(calif>califM);
{califM=calif;
strcpy(nomcalifM,nombrecompleto);
printf("El nombre de la persona con mayor promedio es= %s con un promedio de %f\n",nomcalifM,califM);
}
}




if(strcmp(ape,cadena1)==0)
{
cont1++;
}




printf("El numero de personas con apellido paterno Cardenas es = %.0f\n",cont1);




system("pause");
}

void registro(char nom[30][15],char ape[30][15], char apeM[30][15], float calif[30], int *n)
{char R;
do
{
printf("Ingrese el nombre\n");
fflush(stdin);
gets(nom[n*]);
printf("Ingrese apellido paterno\n");
fflush(stdin);
gets(ape[n*]);
printf("Ingrese apellido materno\n");
fflush(stdin);
gets(apeM[n*]);
printf("Ingrese promedio\n");
scanf("%f",&calif[n*]);
*n=*n+1;
printf("Desea ingresar otro\ S/N\n");
fflush(stdin);
R=toupper(getchar());

}while(R!='N');
}


espero que me puedan ayudar, paz, tal vez en un rato vuelva a preguntar por que a vectores casi no le estoy entendiendo y no quiero suspender la materia :`c

AlbertoBSD

registro no devulve ningun tipo de dato. eso da error, ademas R es solo un caracter y no una cadena o algun otro tipo.

La concatenacion de candenas podrias realizarla mas rapido de la siguiente manera:

sprintf(nombrecompleto,"%s %s %s",nom,ape,apeM);

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

K-YreX

Un par de cosas básicas que hay que arreglar:
- Tienes una variable <R> de tipo <int> y otra variable <R> de tipo <char>. Error, no pueden tener el mismo nombre.
- Como ya te han dicho la función <registro()> no devuelve ningún valor de retorno, no puedes hacer <R = registro(...)>.
- También te han comentado ya como concatenar el nombre con los apellidos, ya que si usas la función <strcpy> lo que haces es copiar una cadena en otra eliminando lo que tuviese la cadena destino. En todo caso infórmate sobre la función <strcat> o mejor aun la variante <strncat> por seguridad.
- Después de la condición de un <if> van las llaves "{}", no va un ";". Además tienes dos <if> seguidos con la misma condición pero con modificaciones que alteran el resultado de la condición y no entiendo muy bien eso.
- El contador <cont1> va a valer 0 o 1 ya que sólo se va a incrementar como mucho una vez. Y por qué hacer los contadores de tipo <float>?? Un contador vale 1 o 2 o 3... pero no 1.5...
- Tienes un bloque entre llaves en el <main> sin sentido. Osea unas llaves que se abren y se cierran pero no llevan ninguna sentencia antes como puede ser un <if> o un <while> o algo por el estilo.
- La función <registro()> recibe como parámetros matrices de tipo <char> y tú le mandas arrays en el <main>.

Otro par de cosas que deberías mejorar:
- No usar <fflush(stdin)>.
- No usar <system("pause")>. Sustitúyelo por <getchar()>.
- No usar <gets>. Usar <fgets> en su lugar.
- Qué narices es el parámetro <n> que pasas por referencia?? Creo entender que es el contador, pero...

Ahora sólo te queda investigar un poco lo que te hemos aconsejado y ver cómo modificas tu programa. Y ahora me voy a dormir que me iba a ir cuando he visto el programa pero iba a tener pesadillas si no hacía nada al respecto. Suerte :rolleyes:
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

AlbertoBSD

Cita de: YreX-DwX en  3 Diciembre 2018, 00:31 AM
Y ahora me voy a dormir que me iba a ir cuando he visto el programa pero iba a tener pesadillas si no hacía nada al respecto. Suerte :rolleyes:

Jajajaja, ya me imagino, No me comaaa serñor fflush(stdin); ya voy a utiliza  fseek(stdin, 0, SEEK_END); como indican en ¿Queda algo en el Buffer de Entrada stdin? (Solucionado)

Por cierto date una vuelta por este tema: Lo que no hay que hacer en C/C++. Nivel basico

Saludos!

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

LARANARENElol

bueno, me pudenen hacer mi tarea, o parte de ella, es que casi no le entiendo a vectores y este programa lo necesito para ahora eb la night, so me pueden ayudar?

el problema o programa es:
Elaborar un programa que capte un grupo de sueldos de los empleados de una empresa (nómina),
tomando en cuenta que el programa debe pedir sueldos mientras el usuario elija la opción de continuar.
Al finalizar la captura de la nómina, el programa deberá generar un reporte con lo siguiente:
● Total de nómina de la empresa
● Los sueldos ordenados de menor a mayor
● Cantidad de empleados capturados
● Promedio de sueldo de la nómina
● Cantidad de empleados con un sueldo superior al promedio
El programa debe usar funciones y considerar un grupo máximo de 100 empleados. Validar que no
existan sueldos negativos.

si no quieren pues no pasa nada, ya me han ayudado mucho por muchas semanas, son geniales y gracias en serio, no puedo pedir una mejor comunidad, pero a ver si me podrian ayudar

AlbertoBSD

Para capturar datos te recomiendo el post que publique:

https://foro.elhacker.net/programacion_cc/plantillas_programas_escolares_en_c-t489889.0.html

Ahi podrar captirar N cantidad de empleados y sus sueldos, posteriormente solo te quedara sacar el progrmedio.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

dariodr01

Hola, la entrada de datos podria ser asi:
Salu2.

while (opcion != 'n') {
        printf("Nombre del alumno: ");
        scanf("%s",nombre[i]);
        printf("Apellido paterno: ");
        scanf("%s",apellidoPaterno[i]);
        printf("Apellido materno: ");
        scanf("%s",apellidoMaterno[i]);
        printf("Promedio del alumno: ");
        scanf("%f",&promedio[i]);
        getchar();

        printf("Capturar mas alumnos s/n: ");
        scanf("%c",&opcion);
        getchar();
        printf("\n");

        if (opcion == 's')
            i++;

        if (i > 100) {
            printf("Lo siento, la lista esta llena.");
            break;
        }
    }


Y la comparacion del apeellido podria ser asi:

for (j=0; j<i+1; j++) {
        if (strcmp(apellidoPaterno[j],patron) == 0) {
            printf("Nombre: %s\n",nombre[j]);
            printf("Apellido paterno: %s\n",apellidoPaterno[j]);
            printf("Apellido materno: %s\n",apellidoMaterno[j]);
        }
    }


Ahora te toca armas el programa.

K-YreX

Cita de: dariodr01 en  3 Diciembre 2018, 14:53 PM
Hola, la entrada de datos podria ser asi:
Salu2.

while (opcion != 'n') {
       printf("Nombre del alumno: ");
       scanf("%s",nombre[i]);
       printf("Apellido paterno: ");
       scanf("%s",apellidoPaterno[i]);
       printf("Apellido materno: ");
       scanf("%s",apellidoMaterno[i]);
       printf("Promedio del alumno: ");
       scanf("%f",&promedio[i]);
       getchar();

       printf("Capturar mas alumnos s/n: ");
       scanf("%c",&opcion);
       getchar();
       printf("\n");

       if (opcion == 's')
           i++;

       if (i > 100) {
           printf("Lo siento, la lista esta llena.");
           break;
       }
   }

No es recomendable usar <break> para salir de un bloque que no sea un <switch>. Lo correcto sería un <do while> y en el <while> dos condiciones (opcion != 'n' && i < 100). :rolleyes:

Y no controlo demasiado de C sin compilar pero igual tienes problemas con los saltos de línea en el buffer...
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;