Ayuda: con sustitución de funciones

Iniciado por do-while1, 5 Marzo 2013, 17:53 PM

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

amchacon

Cita de: leosansan en  6 Marzo 2013, 22:35 PM
Pues así, por ejemplo:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <float.h>

int main(void){
    int i=0;
    float num,mayor=-FLT_MAX ;
    do {
        printf ("Introduzca el numero %d : ",i+1);
        scanf("%f",&num);
        while (getchar()!='\n');
        if (num > mayor)
            mayor = num;
        i++;
    }while (num!=0);
    printf ("\n\nEl mayor es: %g",mayor);
return EXIT_SUCCESS;
}



Saluditos!. ...
Debo ser el rey de las cosas complicadas, eso no se me había ocurrido xD.

En su lugar tendría que haber dicho que ordenases esos numeros... Así no te ahorrarias de almacenarlos  ;D
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

85

sizeof es un operador
http://msdn.microsoft.com/es-es/library/0w557fh7.aspx

por qué una función?

en varios lugares le dicen función  :o
http://www.it.uc3m.es/labas/course_notes/dynamic_memory_sizeof_es.html

será porque se usa como una función?

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

rir3760

Cita de: amchacon en  6 Marzo 2013, 23:06 PM
Debo ser el rey de las cosas complicadas, eso no se me había ocurrido xD.

En su lugar tendría que haber dicho que ordenases esos numeros... Así no te ahorrarias de almacenarlos
En esa linea un ejercicio mencionado ocasionalmente es el calculo de la mediana: para encontrar al elemento central primero se debe ordenar la lista.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

rir3760

Cita de: amchacon en  6 Marzo 2013, 23:06 PM
Debo ser el rey de las cosas complicadas, eso no se me había ocurrido xD.

En su lugar tendría que haber dicho que ordenases esos numeros... Así no te ahorrarias de almacenarlos
Siguiendo esa linea un ejercicio seria el calculo de la mediana: para encontrar el elemento al centro primero debe ordenar la lista.

----

Cita de: 85 en  7 Marzo 2013, 03:10 AMen varios lugares le dicen función  :o
http://www.it.uc3m.es/labas/course_notes/dynamic_memory_sizeof_es.html

será porque se usa como una función?
Considerando que para obtener el tamaño de un tipo los paréntesis son obligatorios (con las expresiones no) me parece un error un tanto extraño (en algunos tutoriales).

Caso similar con las sentencias de retorno, frecuentemente se publican programas en estos foros utilizando paréntesis en la forma "return(N);". No se necesitan pero por alguna (extraña) razón los ponen.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

85

Cita de: rir3760 en  7 Marzo 2013, 03:41 AM
Siguiendo esa linea un ejercicio seria el calculo de la mediana: para encontrar el elemento al centro primero debe ordenar la lista.

----
Considerando que para obtener el tamaño de un tipo los paréntesis son obligatorios (con las expresiones no) me parece un error un tanto extraño (en algunos tutoriales).

Caso similar con las sentencias de retorno, frecuentemente se publican programas en estos foros utilizando paréntesis en la forma "return(N);". No se necesitan pero por alguna (extraña) razón los ponen.

Un saludo


AHAHAHAHAHAHA si RIR eso hace al codestyle de cada uno XD, ya se que lo decís por mi  ;-)

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

rir3760

Honestamente (y sin mala intención) no lo decía como una critica hacia ti.

Es un estilo relativamente usual, revisando mis mensajes el mas viejo es del 2011: Problemas con una funcion en c.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leosansan

Cita de: amchacon en  5 Marzo 2013, 20:59 PM
Otra forma de implementarlo sin vectores. Gracias a la magia de los punteros:

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

struct Eslabon
{
   int N;
   Eslabon* Anterior;
};
int main()
{
   Eslabon* Numero = (Eslabon*)malloc(sizeof(Eslabon));
   ...........................................................
[/quote]


amchacon ¿has usado algún modo especial al compilar. porque me saltan múltiples errores y en modo no pedantic?:

|8|error: expected specifier-qualifier-list before 'Eslabon'|
||In function 'main':|ntitled38.
|12|error: 'Eslabon' undeclared (first use in this function)|
12|error: (Each undeclared identifier is reported only once|
|12|error: for each function it appears in.)|
|12|error: 'Numero' undeclared (first use in this function)|
|12|error: expected expression before ')' token|
|13|error: 'Buffer' undeclared (first use in this function)|
|28|error: expected expression before ')' token|
||=== Build finished: 8 errors, 0 warnings (0 minutes, 0 seconds) ===|

Y rn PellesC:

Building 0.obj.
\0.c(8): error #2001: Syntax error: expected '}' but found 'Eslabon'.
\0.c(9): error #2156: Unrecognized declaration.
\0.c(12): error #2048: Undeclared identifier 'Eslabon'.
0.c(12): error #2048: Undeclared identifier 'Numero'.
\0.c(12): error #2039: Illegal expression.
\0.c(12): error #2001: Syntax error: expected ')' but found 'malloc'.
\0.c(12): error #2088: Lvalue required.
\0.c(12): error #2001: Syntax error: expected ';' but found 'malloc'.
\0.c(13): error #2048: Undeclared identifier 'Buffer'.
\0.c(18): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(18): error #2168: Operands of '=' have incompatible types 'int' and 'void *'.
0.c(23): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(25): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(28): error #2039: Illegal expression.
C\0.c(28): error #2001: Syntax error: expected ')' but found 'malloc'.
\0.c(28): error #2001: Syntax error: expected ';' but found 'malloc'.
\0.c(29): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(31): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(35): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(37): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(37): error #2168: Operands of '!=' have incompatible types 'int' and 'void *'.
0.c(39): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(40): error #2112: Left operand of '->' has incompatible type 'int'.
*** Error code: 1 ***
Done.

Saluditos".

amchacon

Pues lo debi hacer con el compilador de C++ sin darme cuenta.

Supongo que para que te corra en C tendras que poner la estructura al estilo C (con el typedef y tal).

Cuando éste en casa te confirmo.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

amchacon

En efecto, para que compile en C solo había que cambiar la declaración de la estructura eslabón:
typedef struct cadena
{
    int N;
    struct cadena* Anterior;
}Eslabon;
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

#29
Cita de: amchacon en  6 Marzo 2013, 21:00 PM
......................................
Te aventuro a que intentes crear en C el siguiente programa:

- Dado una lista de numeros terminados con un cero, calcula el numero mayor.

No puedes determinar el tamaño del array hasta que hayas terminado de guardar todos los números. Con array estáticos no puedes y con array dinámicos da bastantes problemas.


Aunque para calcular el mayor no hace falta punteros o arrays, para que no se diga que con arrays dinámicos hay grandes problemas:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <float.h>

int main(void){
   int i=0,n=1;
   float *num,mayor=-FLT_MAX ;
   num = (float *) malloc (10*sizeof(float));
   while (1) {
       printf ("Introduzca el numero %d : ",i+1);
       scanf("%f",&num[i]);
       if (num[i]==0)
           break;
       if (i>= 9*n){
           num = (float *) realloc (num,sizeof(float)*(i+10));
           n++;
           if ( num == NULL )  {
                           printf("\nOut of memory!\n");
                           return -1;
           }
       }
       if (num [i]> mayor)
           mayor = num[i];
       i++;
   }
   printf ("\n\nEl mayor es: %g",mayor);
return EXIT_SUCCESS;
}



Saluditos!. ....

P.D: Pongo 10 para que se pueda "ver" que el realloc funciona.