• Miércoles 15 de Mayo de 2024, 01:51

Autor Tema:  problema programacion en c  (Leído 2100 veces)

cerberos1990

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
problema programacion en c
« en: Lunes 16 de Noviembre de 2009, 22:31 »
0
tengo este codigo es un programa que se ingresan numeros enteros y la salida es un ranking de 5 numeros mayores o menores ascendentes o descendentes segun quiera el usuario de numeros semiperfectos y el porcentaje de numeros semiperfectos. Y hasta ahroa tengo esto pero compilo y tira errores alguien me ayuda?

#include <stdio.h>



void RevisarFinDatos (int* haydatos)
{
char rta;
do{
printf('Desea ingresar dato? (S/N)');
scanf (rta);
}
while(rta != 'S' || rta != 'N')
*haydatos = 1;
if(rta == 'N') {
*haydatos = 0;
}
}

void IngresarOrden (char* orden1,char* orden2){
do
{
printf('Ingrese "A" si desea que el orden de salida de datos sea ascendente o "D" si desea que sea descendente');
scanf(*orden1);
}
while(*orden1 != 'A' || *orden1 != 'D');



do{
printf('Ingrese "M" si desea que se muestren los 5 mayores o "E" si desea que se muestren los 5 menores');
scanf(*orden2);
}
while(*orden2 != 'M' || *orden2 != 'E');
}


void PrimerIngreso (int* continuar,char* orden1,char* orden2)
{
Revisarfindatos(continuar);
if(*continuar == 1){
IngresarOrden (orden1, orden2);
}
}


void MostrarRanking(char orden1,int[] A,int CE)
{
if(CE != 0){
if(orden1 == 'A'){
for(int i = 0; i == ce-1; i++){
prinf(A);
}
}
else
{
for(int i = CE-1; i == 0; i++){
printf(A);
}
}
}
else
{
printf('No se ingresaron numeros');
}
}


void Ranking (int dato,char orden2,int[] A, int* CE)
{
if(orden2 == 'M'){
i = *CE-1;
while(i >= 0) {
if(A < dato ){
A[i+1] = A;
i = i-1;
}
}


A[i+1] = dato;
if(*CE < MAX-1){
ce++;
}
else
{
i = *CE-1;
}
while(i >= 0) {
if(A > dato ){
A[i+1] = A;
i--;
}
}
A[i+1] = dato;
if(*CE < MAX-1){
*CE++;
}
}
}


void IngresarEnteroPositivo (int* N)
{
do
{
printf('Ingrese entero positivo');
scanf(*N);
}
while(*N <= 0)
}



void Porcentaje (int total, int es)
{
if (total <> 0) {
printf('El porcentaje de numeros perfectos es', es*100/total);
}
else{
printf('No se procesaron numeros');
}


}


bool EsSemiperfecto(int n)
{
int suma = 0;
int es = 0;
for(int i = n/2; i= 1; i++){
if(n % i == 0)
{
suma++;
if(suma > n)
{
suma--;
}
}
}
if(suma == n)
{
es = 1;
}
return es;
}


void main()
{
int ce = 0;
int total = 0;
int es = 0;
int continuar;

PrimerIngreso(&continuar, &orden1, &orden2);


while (continuar != 0)
{


IngresarEnteroPositivo(&N);
total++;
if (EsSemiperfecto(N)){
Ranking(N, orden2, &salida, &CE);
es++;
}
RevisarFinDatos(&continuar);
}
MostrarRanking(salida, CE);
Porcentaje(total, es);
}

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: problema programacion en c
« Respuesta #1 en: Martes 17 de Noviembre de 2009, 01:43 »
0
Para empezar, cuando publiques codigo, utiliza las etiquetas de codigo [ code][ /code] (sin espacio) para encerrar tu codigo, hace que sea mas legible en el foro.

En segundo lugar, tu codigo tiene DEMASIADOS ERRORES para corregirlo, lo que me indica que no tienes ni idea de lenguaje C/C++, por lo que te recomiendo que te consigas un buen libro de programacion en C/C++ y te pongas a estudiar, porque asi no lograras mucho, y aqui nadie te hara tu trabajo si tu no lo haces.

Solo para que te des cuenta de algunos de tus errores, pondre la primera funcion de tu programa corregida, no te corregire todo el programa, pero repito, consigue un buen libro y estudia.

Código: C++
  1. void RevisarFinDatos (int* haydatos)
  2. {
  3.     char rta;
  4.     do
  5.     {
  6.         // en C/C++, las cadenas van entre comillas "" no entre apostrofes ''
  7.         printf("Desea ingresar dato? (S/N)");
  8.         // Cuando usas scanf, debes poner el tipo de variable a leer, en esta caso %c,
  9.         // indicando que es una variable de tipo char, ademas deberas usar el & antes de la variable
  10.         scanf ("%c", &rta);
  11.     }
  12.     // Te falto ; al final del do..while
  13.     while (rta != 'S' || rta != 'N');
  14.     *haydatos = 1;
  15.     if (rta == 'N')
  16.     {
  17.         *haydatos = 0;
  18.     }
  19. }
  20.  
  21.  

Saludos y suerte :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

cerberos1990

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: problema programacion en c
« Respuesta #2 en: Martes 17 de Noviembre de 2009, 03:41 »
0
Me re sirvio lo que me dijiste lo que si...

void MostrarRanking(char orden1,int[] A,int CE)

en esta linea me aparece ) expected :| y no encuentro la razon el resto ya lo solucione todo...

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: problema programacion en c
« Respuesta #3 en: Martes 17 de Noviembre de 2009, 19:50 »
0
El encabezado esta mal en lugar de:
Código: C++
  1.  
  2. void MostrarRanking(char orden1,int[] A,int CE)
  3.  

debe ser

Código: C++
  1. void MostrarRanking(char orden1,int A[],int CE)
  2.  

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

cerberos1990

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: problema programacion en c
« Respuesta #4 en: Martes 17 de Noviembre de 2009, 19:52 »
0
Por casualidad encontras algun error en el codigo del Procedimiento Ranking?

Código: Text
  1.  
  2. #include <stdio.h>
  3. #define MAX 6
  4.  
  5.  
  6.  
  7. void RevisarFinDatos (int* haydatos)
  8. {
  9.     char rta;
  10.     do{
  11.         fflush(stdin);
  12.         printf("Desea ingresar dato? (S/N)");
  13.         scanf("%c", &rta);
  14.     }
  15.     while(rta == 'S' && rta == 'N');
  16.         *haydatos = 1;
  17.     if(rta == 'N') {
  18.         *haydatos = 0;
  19.     }
  20. }
  21.  
  22. void IngresarOrden (char *orden1,char *orden2){
  23.     do
  24.     {
  25.         fflush(stdin);
  26.         printf("Ingrese 'A' si desea que el orden de salida de datos sea ascendente o 'D' si desea que sea descendente");
  27.         scanf("%c", orden1);
  28.     }
  29.     while(*orden1 != 'A' && *orden1 != 'D');
  30.  
  31.  
  32.  
  33.     do{
  34.         fflush(stdin);
  35.         printf("Ingrese 'M' si desea que se muestren los 5 mayores o 'E' si desea que se muestren los 5 menores");
  36.         scanf("%c", orden2);
  37.     }
  38.     while(*orden2 != 'M' && *orden2 != 'E');
  39. }
  40.  
  41.  
  42. void PrimerIngreso (int* continuar,char* orden1,char* orden2)
  43. {
  44.     RevisarFinDatos(continuar);
  45.     if(*continuar == 1){
  46.         IngresarOrden (orden1, orden2);
  47.     }
  48. }
  49.  
  50.  
  51. void MostrarRanking(char orden1,int A[],int CE)
  52. {
  53.     int i;
  54.     if(CE != 0){
  55.         if(orden1 == 'A'){
  56.             for(i = 0; i == CE-1; i++){
  57.                 printf("%d", &A[i]);
  58.             }
  59.         }
  60.         else
  61.         {
  62.             for(i = CE-1; i == 0; i--){
  63.                 printf("%d", &A[i]);
  64.             }
  65.         }
  66.     }
  67.     else
  68.     {
  69.         printf("No se ingresaron numeros");
  70.     }
  71. }
  72.  
  73.  
  74. void Ranking (int dato,char orden2,int A[], int* CE)
  75. {
  76. int i;
  77. if(orden2 == 'M'){
  78.     i = *CE-1;
  79.     while(i >= 0) {
  80.         if(A[i] < dato ){
  81.             A[i+1] = A[i];
  82.             i = i-1;
  83.         }
  84.     }
  85.  
  86.  
  87.     A[i+1] = dato;
  88.     if(*CE < MAX-1){
  89.         *CE++;
  90.     }
  91.     else
  92.     {
  93.         i = *CE-1;
  94.     }
  95.     while(i >= 0) {
  96.         if(A[i] > dato ){
  97.             A[i+1] = A[i];
  98.             i--;
  99.         }
  100.     }
  101.     A[i+1] = dato;
  102.     if(*CE < MAX-1){
  103.         *CE++;
  104.     }
  105. }
  106. }
  107.  
  108.  
  109. void IngresarEnteroPositivo(int* N)
  110. {
  111.     do
  112.     {
  113.         fflush(stdin);
  114.         printf("Ingrese entero positivo");
  115.         scanf("%d", N);
  116.     }
  117.     while(*N <= 0);
  118. }
  119.  
  120.  
  121.  
  122. void Porcentaje (int total, int es)
  123. {
  124.     int h = es*100/total;
  125.     if (total != 0) {
  126.         printf("El porcentaje de numeros perfectos es %d", h);
  127.     }
  128.     else{
  129.         printf("No se procesaron numeros");
  130.     }
  131.  
  132.  
  133. }
  134.  
  135.  
  136. int EsSemiperfecto(int n)
  137. {
  138.     int i;
  139.     int suma = 0;
  140.     int es = 0;
  141.     for(i = n; i >= 1; i--){
  142.         if(n % i == 0)
  143.         {
  144.             suma=suma+n;
  145.             if(suma > n)
  146.             {
  147.             suma=suma-n;
  148.             }
  149.         }
  150.     }
  151.     if(suma == n)
  152.     {
  153.         es = 1;
  154.     }
  155.     return es;
  156. }
  157.  
  158.  
  159. void main()
  160. {
  161.                 int ce = 0;
  162.                 int total = 0;
  163.                 int es = 0;
  164.                 int continuar;
  165.                 int salida[MAX];
  166.                 char orden1;
  167.                 char orden2;
  168.                 int N;
  169.                 int CE;
  170.  
  171.                 PrimerIngreso(&continuar, &orden1, &orden2);
  172.  
  173.  
  174.                 while (continuar != 0)
  175.                 {
  176.  
  177.  
  178.                     IngresarEnteroPositivo(&N);
  179.                     total++;
  180.                     if (EsSemiperfecto(N)){
  181.                         Ranking(N, orden2, salida, &CE);
  182.                         es++;
  183.                     }
  184.                     RevisarFinDatos(&continuar);
  185.                 }
  186.                 MostrarRanking(orden1, salida, CE);
  187.                 Porcentaje(total, es);
  188. }
  189.  
  190.  

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: problema programacion en c
« Respuesta #5 en: Martes 17 de Noviembre de 2009, 20:53 »
0
En Ranking no, pero en MostrarRanking tienes 2 errores en printf

Código: C++
  1.                 printf("%d", &A[i]);
  2.  
  3.  
debe ser:
Código: C++
  1.  
  2.                 printf("%d", A[i]);
  3.  
  4.  

El printf, a diferencia de scanf, no necesita &

Bueno, ya terminaste la parte facil, corregir los errores de sintaxis (compilacion) ahora viene lo mas dificil, corregir los errores de logica en tu programa, te deseo suerte :P

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

cerberos1990

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: problema programacion en c
« Respuesta #6 en: Miércoles 18 de Noviembre de 2009, 04:28 »
0
Me tira un error:

General Protection Exception

En la linea 79 osae en

Código: Text
  1.     if(*A[i] < dato ){^
  2.  


ni idea que sera