Alguien que me ayude en C(programacion)?

aqui esta terminada:

#include <stdio.h>
#include <stdlib.h>
int main()
{
   //lo primero son las variables
float n1;
float n2;
float suma,resta,producto;
float division;
char final;
char cadena[21]="calculadora by alberto m";
printf("introduce numero 1:\n");
scanf("%f",&n1);
printf("introduce numero 2:\n");
scanf("%f",&n2);
suma=n1+n2;
resta=n1-n2;
producto=n1*n2;
division=(float)n1/(float)n2;
printf("la suma es %.2f\n",suma);
printf("la resta es %.2f\n",resta);
printf("la multiplicacion es %.2f\n",producto);
printf("la division es %.2f\n",division);
printf("Calculadora by Alberto M\n\n",final);
system("pause");
return 0;
}


y este es otro para calcular la media de 3 numeros :

#include <stdlib.h>
#include <stdio.h>
int main()
{
    //Añadimos las variables
    float n1;
    float n2;
    float n3;
    float suma;
    float media;
    int total;
    //Añadimos las ordenes
    printf("introduce el primer numero:\n");
    scanf("%f",&n1);
    printf("introduce el segundo numero:\n");
    scanf("%f",&n2);
    printf("introduce el tercer numero:\n");
    scanf("%f",&n3);
    total=3;
    suma=n1+n2+n3;
    media=(float)suma/(float)total;
    printf("la media obtenida de los 3 numero es %.2f\n\n",media);
    printf("Calculador de media v1.0 realeased by Alberto yeah\n\n");
    system("pause");
   
       

    return 0;
}
por que pones las cosas en spoiler? no sería mejor en "code"? mayormente para que te puedan ayudar...


los operandos, son parámetros del programa, o los pides ya en él?
ahora mismo lo cambio perdon.
No entiendo lo que me preguntas, soy noob en esto :(
Hombre... has empezado a preguntar un poco pronto... lo siguiente sería mirar la documentación de scanf

- ferdy

----

Dicho sea de paso, este tipo de programas 'tontos' son bastante más difíciles de lo que parecen (si lo quieres hacer bien). De hecho, conozco a pocos "programadores" que sean capaces de implementarlo bien en C o en Java, por ejemplo.

- ferdy

----

Por cierto, si no ha sonado suficiente a reto, si, lo es. Si alguien tiene la curiosidad de saber por qué se equivoca casi todo el mundo, debe probar primero :)

- ferdy
yo esque oi a sio el primer dia de clase que hemos hecho C y ahí nos hemos quedao cuando a tocao el timbre xDDDDD y me he intentado informar en internet pero no tengo "webos" a sacarlo... sino tendre que esperar a mañana y ponerlo aqui entero ^^

Gracias y un saludo
Ferdy escribió:http://en.wikipedia.org/wiki/Scanf

gracias tio pero no me entero de na xDDD esperare a mañana a clase :( ... las ansias de aprender xD
Para leer las variables desde teclado tienes que usar scanf, para operar usas los operadores correspondientes (+,-,*,/). Para asignar el resultado de esas operaciones usas el operador de asignacion (=) y para mostrar el resultado por pantalla usas printf.

Para poder usar correctamente printf y scanf debes conocer lo que hacen exactamente, y su sintaxis.

scanf te almacena un dato (desde teclado) en una direccion de memoria, por ejemplo, si pones:

scanf("%d",&a);

Al ejecutar el programa y llegar a este punto, te dejara meter una variable (en este caso un entero, por lo de %d) y lo almacenara en la direccion de memoria donde se encuentra la variable a (que tienes que haberla declarado antes con
int a;
).

printf te muestra un texto por la salida estandar (en este caso tu monitor), por ejemplo si pones:
printf("la variable a contiene %d",a);

te mostraria por pantalla:
la variable a contiene x

donde x es el valor que tenga a en ese momento.




Conseguir que te muestre la suma, resta y producto no debe ser un problema, pero seguramente tendras problemas para calcular esa division.

Venga, ahora te toca a ti currartelo. [carcajad]


PD: Ferdy, aparte de tener que hacer un casting para hacer la division, que dificultad ves tu aqui para un programador experimentado? :-?
Korso10 escribió:PD: Ferdy, aparte de tener que hacer un casting para hacer la division, que dificultad ves tu aqui para un programador experimentado? :-?


Supongo que a lo que se refiere Ferdy, es mas metodológicamente y referente a la simplicidad del código, ya que generalmente la gente tiende a emperifollar demasiado el código y dar muchas vueltas inútiles. Supongo.

Un saludo.
Supongo que a lo que se refiere Ferdy, es mas metodológicamente y referente a la simplicidad del código, ya que generalmente la gente tiende a emperifollar demasiado el código y dar muchas vueltas inútiles. Supongo.


Se que es raro... pero no, no me refiero a eso. Haz la prueba :)

PD: Ferdy, aparte de tener que hacer un casting para hacer la division, que dificultad ves tu aqui para un programador experimentado?


Haz la prueba. Verás como no es tan simple.

- ferdy
Haz la prueba. Verás como no es tan simple.

- ferdy[/quote]

#include <stdio.h>

int
main(void)
{
    int a,b,suma,resta,multi;
    double auxa,auxb,divi;
   
    scanf("%d%d",&a,&b);
    auxa = (double)a;
    auxb = (double)b;
   
    suma = a+b;
    resta = a-b;
    multi = a*b;
    divi = auxa/auxb;
   
    printf("suma: %d\nresta: %d\nmulti: %d\ndivi: %lf\n",suma,resta,multi,divi);
   
    getchar();
    getchar();
    return 0;
}


PD: no controlo la division por 0 pero vamos, que basta hacer un if, y sigo sin verle dificultad.
No solo te falla la división por 0.
joder que rayada xDDDDD el profe se va a jartar de que le pregunte xD
Pues tu dirás que falta para que el programa sea correcto, pero vamos, que está probado y funcionar funciona.
Por probar:

Supongo que Ferdy habla del control de errores.

Yo usaría fgets, antes que scanf y evaluar que los datos obtenidos realmente son enteros.
Además con fgets, limitas el tamaño de la entrada.

Un saludo.
Se que metodologicamente no esta del todo correcto, pero bueno, no tengo demasiado tiempo.

#include <stdio.h>

main()
{

        int a,b;
        float c,d;

        printf("Introduce datos: ");
        scanf("%d %d",&a,&b);
        c = (float) a;
        d = (float) b;

          printf("El valor de la suma es: %d\n",(a+b));
          printf("El valor de la resta es: %d\n",(a-b));
          printf("El valor de la multiplicación es: %d\n",(a*b));
          printf("El valor de la división es: %f\n",(c/d));
}
Jaime escribió:Por probar:

Supongo que Ferdy habla del control de errores.

Yo usaría fgets, antes que scanf y evaluar que los datos obtenidos realmente son enteros.
Además con fgets, limitas el tamaño de la entrada.

Un saludo.


por eso mismo he dicho que el programa es correcto, no he hablado ni de robusto ni de amigable, ya que si no la cosa se guarrea bastante.

Iverson88, si estás empezando ahora mismo con C, tanto mi código como el de DSC son correctos a mi parecer, asi que si tienes alguna duda pregunta.
Obviamente, ninguno de vuestros códigos funciona si las entradas son INT_MIN y -1 . Así que no, ninguno de los dos es correcto.

- ferdy
Por curiosidad Ferdy ¿trabajas de programador?
Escueto, conciso y concreto, sí señor...

De todas maneras darle tantas vueltas a este programilla... Mientras no lo vayan a poner en el Apollo XXIII ponerse a comprobar si las cuentas se salen de rango me parece muy jevi.
Pse, si querías más información es cuestión de pedirla. Soy estudiante de informática y trabajo en entornos académicos. Algunos proyectos de software libre llevan código mío.

Bueno, la idea no es darle vueltas por darle vueltas. Simplemente demostrar que una cosa que parece tan fácil, no lo es realmente. No conocer estas cosas suele dar lugar a fallos de seguridad relativamente graves. He publicado cosas de este estilo y me he dado cuenta de que normalmente la gente no conoce realmente las herramientas que tiene entre manos. Por ejemplo:

char c1, c2, c3, c4;
/* leer valores para c1 c2 y c3 */
c4 = c1 + c2 +c3;
if (c1 + c2 + c3 != c4)
    printf("Es esto posible?\n");
else
    printf("No, siempre imposible\n");


No se trata de probar valores a lo loco... al fin y al cabo un ordenador puede calcularlos en unos minutos... la pregunta es 'por qué'.

- ferdy
Ferdy escribió:Dicho sea de paso, este tipo de programas 'tontos' son bastante más difíciles de lo que parecen (si lo quieres hacer bien). De hecho, conozco a pocos "programadores" que sean capaces de implementarlo bien en C o en Java, por ejemplo.

Como no des más pistas...
Yo tampoco le veo nada del otro mundo. Comprobar el parseo, la división por 0 y evitar el overflow.
Controlar el overflow en la división suele ser lo más complicado.

- ferdy
Ferdy escribió:Pse, si querías más información es cuestión de pedirla. Soy estudiante de informática y trabajo en entornos académicos. Algunos proyectos de software libre llevan código mío.

Bueno, la idea no es darle vueltas por darle vueltas. Simplemente demostrar que una cosa que parece tan fácil, no lo es realmente. No conocer estas cosas suele dar lugar a fallos de seguridad relativamente graves. He publicado cosas de este estilo y me he dado cuenta de que normalmente la gente no conoce realmente las herramientas que tiene entre manos. Por ejemplo:

char c1, c2, c3, c4;
/* leer valores para c1 c2 y c3 */
c4 = c1 + c2 +c3;
if (c1 + c2 + c3 != c4)
    printf("Es esto posible?\n");
else
    printf("No, siempre imposible\n");


No se trata de probar valores a lo loco... al fin y al cabo un ordenador puede calcularlos en unos minutos... la pregunta es 'por qué'.

- ferdy

No, bueno, no es que me haya molestado que no ampliases información, me ha hecho gracia nada más; y como estás en todas las preguntas de programación sea el lenguaje que sea y se nota que controlas pues me picaba la curiosidad.

Pero ya me has picado, ¿esas cosas en programas de verdad se controlan? Porque tendría que ser algo así como

int a, b;
leer los números

if (MAX_INT - b > a)
suma = a + b;
if (MIN_INT + b < a)
resta = a - b;
etc.

¿no? ¿No es un poco demasiado?
Ferdy escribió:Pse, si querías más información es cuestión de pedirla. Soy estudiante de informática y trabajo en entornos académicos. Algunos proyectos de software libre llevan código mío.

Bueno, la idea no es darle vueltas por darle vueltas. Simplemente demostrar que una cosa que parece tan fácil, no lo es realmente. No conocer estas cosas suele dar lugar a fallos de seguridad relativamente graves. He publicado cosas de este estilo y me he dado cuenta de que normalmente la gente no conoce realmente las herramientas que tiene entre manos. Por ejemplo:

char c1, c2, c3, c4;
/* leer valores para c1 c2 y c3 */
c4 = c1 + c2 +c3;
if (c1 + c2 + c3 != c4)
    printf("Es esto posible?\n");
else
    printf("No, siempre imposible\n");


No se trata de probar valores a lo loco... al fin y al cabo un ordenador puede calcularlos en unos minutos... la pregunta es 'por qué'.

- ferdy


Si, y tanto que es posible que entre en el primer caso, simplemente con que la suma salga de 8 bits (o 1 byte) que es un char, eso ya peta.

Es correcto, verdad?

Para slurp:

Si, y no. La verdad es que no veras muchos programas que lo implementen, sinceramente. En este caso tenemos que ir mas a lo profundo y segun codigo, mucho mas complejo que el simple echo de "programar", que es el analisis de complejidad, y el analisis temporal del programa.

En este caso hacer

suma = a + b;
resta = a - b;

Tiene una complejidad temporal de "n" (creo que era 4, ahora no me acuerdo, pero te pongo n para que lo entiendas).

Hacer esto:

if (MAX_INT - b > a)
suma = a + b;
if (MIN_INT + b < a)
resta = a - b;

Es sumarle a ese "n", 2 mas (por hacer la resta entre MAX_INT y b, y por comparar).

Que pasa... que aqui jugamos (como siempre en programación) con la siguiente frase: que buscamos, y para que usuario y/o algoritmo esta implementado nuestro codigo?.

Segun para lo que, con lo primero basta, y si quieres estabilidad y muchisima seguridad tan solo con hacer un TAD (tipo abstraco de datos) y encapsular bien los datos y las funciones ya estara, aunque claro, eso requiere algo mas que saber "programar" n.n'...

Lo dicho, si estoy equivocado, decidmelo.
(mensaje borrado)
Hombre, la complejidad seguiría siendo la misma, variaría la constante nada más, así que no creo que perdiese mucho en un programa grande ¿no?

Ahora que lo miro otra vez, si b es -1 por ejemplo la primera condición se iría al carajo con lo cual tendría que ser más bien

if (b > 0 && MAX_INT - b > a)
suma = a +b;
if (b < 0 && MIN_INT - b < a)

... y el resto por el estilo o peor porque no estoy para calentarme ahora la cabeza con más "ysis", y las multiplicaciones y divisiones ni te cuento... Es demasiado.
Slurp escribió:Hombre, la complejidad seguiría siendo la misma, variaría la constante nada más, así que no creo que perdiese mucho en un programa grande ¿no?

Ahora que lo miro otra vez, si b es -1 por ejemplo la primera condición se iría al carajo con lo cual tendría que ser más bien

if (b > 0 && MAX_INT - b > a)
suma = a +b;
if (b < 0 && MIN_INT - b < a)

... y el resto por el estilo o peor porque no estoy para calentarme ahora la cabeza con más "ysis", y las multiplicaciones y divisiones ni te cuento... Es demasiado.


Si haces una suma o dos, el PC no lo va notar, haz millones y entonces hablamos y nos metemos en casos reales. Si se hace una cosa asi (una encapsulación con su posterior abstracción de funciones y analisis de posibles errores), no es porque se vaya a hacer muy puntualmente justamente, si no porque se van a hacer muchisims operaciones, y por probabilidad alguna puede petar (leyes de murphy ruleees xD) asi que se intenta anular ese posible error de la forma mas efectiva posible.

Te tardara mas, si, pero... en un programa que lleve millones de cuentas de credito, cuando tenga que sumar transacciones u otro ejemplo por el estilo, que prefieres, que te tarde 2 segundos mas (por poner un ejemplo muy bestia) en hacerte una operacion y saber que esta bien (o al menos deberia), o que te salga a deber millones y millones de pesetas, por haber tenido un bonito overflow? :p.

Pues en estos casos, es cuando los TAD cobran mas vida que nunca ^_^, y a parte de servir para esto, sirven para bastaaaaaantes cosas mas ^_^.
Slurp escribió:Pero ya me has picado, ¿esas cosas en programas de verdad se controlan? Porque tendría que ser algo así como

int a, b;
leer los números

if (MAX_INT - b > a)
suma = a + b;
if (MIN_INT + b < a)
resta = a - b;
etc.

¿no? ¿No es un poco demasiado?


En los programas serios, si. Particularmente si a y b son controlables por el usuario.

d4rkb1t escribió:Si, y tanto que es posible que entre en el primer caso, simplemente con que la suma salga de 8 bits (o 1 byte) que es un char, eso ya peta.

Es correcto, verdad?


Eso es correcto, lo que la gente no conoce es el POR QUÉ. Que realmente es porque la suma se computa como si todas las cantidades fueran un entero, solo que al igualarlo al char se trunca.

d4rkb1t escribió:Para slurp:

Si, y no. La verdad es que no veras muchos programas que lo implementen, sinceramente. En este caso tenemos que ir mas a lo profundo y segun codigo, mucho mas complejo que el simple echo de "programar", que es el analisis de complejidad, y el analisis temporal del programa.

En este caso hacer

suma = a + b;
resta = a - b;

Tiene una complejidad temporal de "n" (creo que era 4, ahora no me acuerdo, pero te pongo n para que lo entiendas).

Hacer esto:

if (MAX_INT - b > a)
suma = a + b;
if (MIN_INT + b < a)
resta = a - b;

Es sumarle a ese "n", 2 mas (por hacer la resta entre MAX_INT y b, y por comparar).

Que pasa... que aqui jugamos (como siempre en programación) con la siguiente frase: que buscamos, y para que usuario y/o algoritmo esta implementado nuestro codigo?.

Segun para lo que, con lo primero basta, y si quieres estabilidad y muchisima seguridad tan solo con hacer un TAD (tipo abstraco de datos) y encapsular bien los datos y las funciones ya estara, aunque claro, eso requiere algo mas que saber "programar" n.n'...

Lo dicho, si estoy equivocado, decidmelo.


Excepto que la complejidad de la suma, resta, multiplicación y división de enteros "pequeños" es O(1) en cualquier lenguaje y arquitectura. (Digo "pequeños" porque algunos lenguajes promocionan a bigints cuando lo necesitan, en cuyo caso la complejidad se dispara).

- ferdy
Se me acaba de ocurrir... Y si almacenamos los resultados en un long int (o incluso un long long int), es decir, limitamos al usuario al rango que nos da int, pero el resultado lo almacenamos con 32 (o 64) bits. Asi solo tendriamos que comprobar una vez al introducir los datos.


#include <stdio.h>
#define MAX_INT
#define MIN_INT


int
main(void)
{
    int a,b;
    long int res;
   
    do{
        scanf("%d%d",&a,&b);
    }while(a>=MAX_INT || b>=MAX_INT || a<=MIN_INT || b<=MIN_INT);
   
    res = a+b;
    printf("suma: %ld\n",res);
   
    getchar();
    getchar();
    return 0;
}
La idea es buena. De hecho, si no se requiere GRAN precisión, es lo que se suele hacer. (Si se quiere gran precisión hay otros métodos).

De todos modos, y para seguir reiterando la idea de que estas cosas no son tán fáciles, ese programa tampoco maneja el caso de INT_MIN y 0, o INT_MAX y 0 . Y esos casos no generan ningún tipo de overflow.

- ferdy
Aqui teneis, lo he probado y funciona todo salvo lo de las divisiones que no da decimales :S dice el profesor que mañana nos explicara el porqué.
#include <stdio.h>
#include <stdlib.h>
int main()
{
   //lo primero son las variables
int n1;
int n2;
int suma,resta,producto;
float division;
printf("introduce numero 1:\n");
scanf("%i",&n1);
printf("introduce numero 2:\n");
scanf("%i",&n2);
suma=n1+n2;
resta=n1-n2;
producto=n1*n2;
division=n1/n2;
printf("la suma es %i\n",suma);
printf("la resta es %i\n",resta);
printf("la multiplicacion es %i\n",producto);
printf("la division es %f\n",division);
system("pause");
return 0;
}

Ahora estoy haciendo uno de averiguar la media de tres numeros y me da 1 solo error :S
#include <stdlib.h
#include <stdio.h>
int main()
{
    //Añadimos las variables
    int n1;
    int n2;
    int n3;
    int suma;
    float media;
    int total;
    //Añadimos las ordenes
    printf("introduce el primero número:\n");
    scanf("%i",&n1);
    printf("introduce el segundo número:\n");
    scanf("%i",&n2);
    printf("introduce el tercer número:\n");
    scanf("%i",&n3);
    prinft("has introducido ya los tres numeros? Si=1 No=0\n");
    Scanf("%i",&total);
    total=total;
    suma=n1+n2+n3;
    media=suma/total;
    printf("la media obtenida de los 3 número es %f",media);
    system("pause");
   
       

    return 0;
}

En la pestaña de compiles me pone lo sigueinte:

1:10 C:\Documents and Settings\Alberto\Mis documentos\pruebas C\Nueva carpeta\main.c #include expects "FILENAME" or <FILENAME>

C:\Documents and Settings\Alberto\Mis documentos\pruebas C\Nueva carpeta\Makefile.win [Build Error] [main.o] Error 1

En la de Compile log me pone:

Compiler: Default compiler
Building Makefile: "C:\Documents and Settings\Alberto\Mis documentos\pruebas C\Nueva carpeta\Makefile.win"
Executing make...
make.exe -f "C:\Documents and Settings\Alberto\Mis documentos\pruebas C\Nueva carpeta\Makefile.win" all
gcc.exe -c main.c -o main.o -I"C:/Dev-Cpp/include"

main.c:1:10: #include expects "FILENAME" or <FILENAME>

make.exe: *** [main.o] Error 1

Execution terminated


¿alguien sabe el porque? Gracias ^^
Ferdy escribió:Controlar el overflow en la división suele ser lo más complicado.

- ferdy

No en este caso, en el que dividendo y divisor son enteros. ;)

Si pudiesen ser decimales, la verdad es que la cosa sería bastante curiosa, sí. :)

De todas formas, tengo el Java bastante olvidado, pero ¿no tiene java excepciones para el overflow? En .NET sí, con lo que es bastante sencillo programar esto :D

EDITO: Acabo de mirarlo y ya veo que no. Solución: No usar lenguajes tan rudimentarios. XDD
mirar mi ultimo post plish!! que he editado ^^ gracias
Iverson88 escribió:mirar mi ultimo post plish!! que he editado ^^ gracias


Fíjate en el error que te da y luego en la primera línea de tu código. ¿No echas nada en falta? ;)
Nose tio, mira el codigo:
#include <stdlib.h
#include <stdio.h>
int main()
{
    //Añadimos las variables
    int n1;
    int n2;
    int n3;
    int suma;
    float media;
    int total;
    //Añadimos las ordenes
    printf("introduce el primer número:\n");
    scanf("%i",&n1);
    printf("introduce el segundo número:\n");
    scanf("%i",&n2);
    printf("introduce el tercer número:\n");
    scanf("%i",&n3);
    prinft("has introducido ya los tres numeros? Si=1 No=0\n");
    Scanf("%i",&total);
    total=total;
    suma=n1+n2+n3;
    media=suma/total;
    printf("la media obtenida de los 3 número es %f",media);
    system("pause");
   
       

    return 0;
}

vale, el >
xD asias

PD: joder ahora me pone 3 errores xD
Te falta un ">" en la primera línea.

EDITO: Vale, veo que te diste cuenta xD
fixel:
#include <stdlib.h>
#include <stdio.h>
int main()
{
    //Añadimos las variables
    int n1;
    int n2;
    int n3;
    int suma;
    float media;
    int total;
    //Añadimos las ordenes
    printf("introduce el primer numero:\n");
    scanf("%i",&n1);
    printf("introduce el segundo numero:\n");
    scanf("%i",&n2);
    printf("introduce el tercer numero:\n");
    scanf("%i",&n3);
    total=3;
    suma=n1+n2+n3;
    media=suma/total;
    printf("la media obtenida de los 3 numero es %f\n\n",media);
    system("pause");
   
       

    return 0;
}

lo que tengo mal es lo mismo que lo de la calculadora, que aunque ponga float no me salen los decimales, me refiero que si la media es 13/4 pues me da de resultado 4.... una paranoya, el profesor ma dixo hoy que mañana nos explica el porque
EDITO: no habia visto el ultimo mensaje.

Si pones

int a = '3';

lo que haces es copiar a la variable a el valor ASCII del caracter 3. Para asignar el numero 3 pones simplemente a = 3.
Korso10 escribió:...

gracias por tu ayuda, mira mi ultimo post, me ha salido así correctamente pero lo de siempre, el tema de los decimales en las divisiones... jejeje, un saludo
bastian escribió:De todas formas, tengo el Java bastante olvidado, pero ¿no tiene java excepciones para el overflow? En .NET sí, con lo que es bastante sencillo programar esto


Je, Java no muestra nada en el caso de -2^31 * -1 (lo mismo para la división).

bastian escribió:EDITO: Acabo de mirarlo y ya veo que no. Solución: No usar lenguajes tan rudimentarios. D


En ese caso, tendrás otro montón de problemas si no conoces ciertas cosas.... Es decir, no hay solución para no tener ciertas nociones de aritmética :P

- ferdy
Esto deberia funcionar, la media sale con 2 decimales, eso si la entrada de los 3 numeros sigue siendo entera.
Yo tamb estoy aprendiendo asi que no espereis que el programa contemple todo tipo de posibilidades y errores, metes 3 enteros y funciona.


#include <stdio.h>
void main()
{
   
  int n1,n2,n3,suma;
   float media;
    int total;
    printf("introduce el primero número:\n");
    scanf("%i",&n1);
    printf("introduce el segundo número:\n");
    scanf("%i",&n2);
    printf("introduce el tercer número:\n");
    scanf("%i",&n3);
    total=3;
    suma=n1+n2+n3;
    media=(float)suma/total;

    printf("la media obtenida de los 3 número es %.2f\n",media);

 
   }
aqui esta terminada:

#include <stdio.h>
#include <stdlib.h>
int main()
{
   //lo primero son las variables
float n1;
float n2;
float suma,resta,producto;
float division;
char final;
char cadena[21]="calculadora by alberto m";
printf("introduce numero 1:\n");
scanf("%f",&n1);
printf("introduce numero 2:\n");
scanf("%f",&n2);
suma=n1+n2;
resta=n1-n2;
producto=n1*n2;
division=(float)n1/(float)n2;
printf("la suma es %.2f\n",suma);
printf("la resta es %.2f\n",resta);
printf("la multiplicacion es %.2f\n",producto);
printf("la division es %.2f\n",division);
printf("Calculadora by Alberto M\n\n",final);
system("pause");
return 0;
}


y este es otro para calcular la media de 3 numeros:

#include <stdlib.h>
#include <stdio.h>
int main()
{
    //Añadimos las variables
    float n1;
    float n2;
    float n3;
    float suma;
    float media;
    int total;
    //Añadimos las ordenes
    printf("introduce el primer numero:\n");
    scanf("%f",&n1);
    printf("introduce el segundo numero:\n");
    scanf("%f",&n2);
    printf("introduce el tercer numero:\n");
    scanf("%f",&n3);
    total=3;
    suma=n1+n2+n3;
    media=(float)suma/(float)total;
    printf("la media obtenida de los 3 numero es %.2f\n\n",media);
    printf("Calculador de media v1.0 realeased by Alberto yeah\n\n");
    system("pause");
   
       

    return 0;
}

Los he hecho yo con los que he aprendio esta semana, si he usado sintaxis que veais de noob lo siento, en este campo llevo 1 semana y media sorry xD
Buenas aqui estoy otra vez con algunas dudas, mirad le estoy haciendo un ejecutable basico a mi novia asin pa tontear jeje y no controlo mucho las cadenas, aber si me podeis ayudar:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char nombre[20];
    char lydia[20];
    char n1[20];
   
    printf("introduce tu nombre por favor:\n\n");
    scanf("%s",&nombre);
   
   
    switch(nombre)
                  {
                       case 1:
                       printf("Te llamas %s Eres la elegida,alberto te quiere mucho\n\n",nombre);
                       break;
                       default:
                       printf("Lo siento no estas en el corazon de alberto\n\n");
                       }[code]#include <stdio.h>
#include <stdlib.h>
int main()
{
    char nombre[20];
    char lydia[20];
    char n1[20];
   
    printf("introduce tu nombre por favor:\n\n");
    scanf("%s",&nombre);
   
   
    switch(nombre)
                  {
                       case 1:
                       printf("Eres la elegida,alberto te quiere mucho\n\n",nombre);
                       break;
                       default:
                       printf("Lo siento no estas en el corazon de alberto\n\n");
                       }
                       

   system("pause");
   return 0;
}[/code]
                       

   system("pause");
   return 0;
}


he probado tambien a cambiar el scanf por gets(nombre) y nada
me da error en el switch: switch quantity not an integer

Gracias

tambien he probado asin:
Iverson88 escribió:Buenas aqui estoy otra vez con algunas dudas, mirad le estoy haciendo un ejecutable basico a mi novia asin pa tontear jeje y no controlo mucho las cadenas, aber si me podeis ayudar:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char nombre[20];
    char lydia[20];
    char n1[20];
   
    printf("introduce tu nombre por favor:\n\n");
    scanf("%s",&nombre);
   
   
    switch(nombre)
                  {
                       case 1:
                       printf("Te llamas %s Eres la elegida,alberto te quiere mucho\n\n",nombre);
                       break;
                       default:
                       printf("Lo siento no estas en el corazon de alberto\n\n");
                       }[code]#include <stdio.h>
#include <stdlib.h>
int main()
{
    char nombre[20];
    char lydia[20];
    char n1[20];
   
    printf("introduce tu nombre por favor:\n\n");
    scanf("%s",&nombre);
   
   
    switch(nombre)
                  {
                       case 1:
                       printf("Eres la elegida,alberto te quiere mucho\n\n",nombre);
                       break;
                       default:
                       printf("Lo siento no estas en el corazon de alberto\n\n");
                       }
                       

   system("pause");
   return 0;
}[/code]
                       

   system("pause");
   return 0;
}


he probado tambien a cambiar el scanf por gets(nombre) y nada
me da error en el switch: switch quantity not an integer

Gracias

tambien he probado asin:


El error te lo está diciendo, el switch sirve para comparar enteros, no cadenas. Las variables n1 y lydia no las entiendo, porque no las usas en ningún momento. Si lo que quieres es comparar lo que ella escriba con la palabra lydia, yo lo dejaría así:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char nombre[20];
   
    printf("introduce tu nombre por favor:\n\n");
    scanf("%s",&nombre);
   
   
    if (!strcmp(nombre,"lydia"))
   printf("Te llamas %s Eres la elegida,alberto te quiere mucho\n\n",nombre);
    else
   printf("Lo siento no estas en el corazon de alberto\n\n");
                     
}


Aunque no se si era eso lo que querías hacer XD
lo que quiero haces es que introduzca ella un nombre y si pone lydia diga la primera frase y si pone otro diga la otra jeje

PD: if (!strcmp(nombre,"lydia")) eso no se lo que es, no lo he dao :(
Pues el código que te he puesto hace exactamente eso.

La función strcmp compara cadenas: http://www.conclase.net/c/librerias/fun ... fun=strcmp, en esa linea he comparado la palabra lydia con lo que la persona introduce por teclado.
Si no quieres usarla tendrías que hacer una función tú mismo que compare carácter a carácter, es bastante fácil, pero vamos, si te viene ya hecha...

Un saludo.
Aqui está solucionado:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char nombre[20];
   
    printf("introduce tu nombre por favor:\n\n");
    scanf("%s",&nombre);
   
   
    if (!strcmp(nombre,"lydia") || !strcmp(nombre,"Lydia"))
   printf("Te llamas %s Eres la elegida,alberto te quiere mucho\n\n",nombre);
    else
   printf("Lo siento no estas en el corazon de alberto\n\n");
       
  system("pause");
  return 0;             
}


Raper!! te falto lo de la libreriaaaaa jejejeje que estaba yo ya to locooo xD
ya que estamos con string.h, puedes usar las funciones "toupper()" o "tolower()" para obtener las cadenas en todo mayúsculas o todo minúsculas, y después comparar, así te evitas el tener que comparar por cada maldita letra que se le ocurra poner en mayúscula o en minúscula.
54 respuestas
1, 2