Autor Tema: [Tema Oficial] C/C++  (Leído 6346 veces)

0 Usuarios y 1 Visitante están viendo este tema.

DusknoirMaster

  • Ayudante de Profesor
  • ****
  • Mensajes: 1043
  • Karma: +0/-0
  • DusknoirMaster Rules!
    • Ver Perfil

  • Total Badges: 27
    Badges: (View All)
    Nivel 5 Sexto aniversario Usuario de Windows
Re:[Tema Oficial] C/C++
« Respuesta #20 en: 19 de Noviembre de 2010, 04:00:27 am »
Joe, pues era asi de fácil, os posteo un ejercicio que tengo que hacer para clase de Informática (A la que me tengo que ir en.....10 minutos)

Spoiler: mostrar



/*13.   En el fichero de entrada estándar están grabados cien valores enteros distintos.
Escríbase un programa que los grabe en el fichero de entrada estándar los pares seguido
de "PAR" y los impares de "IMPAR" dejando diez blancos por la izquierda.
Determinar también el mayor, el menor, el número de pares, ídem de impares,
la suma de los pares y el producto de los impares.

┌─────────────────────────────────────────────────┐
│ LOS NUMERO LEIDOS SON:                          │
│                                                 │
│           408 PAR                               │
│           IMPAR -39                             │
│                        .                        │
│                        .                        │
│  EL MAYOR ES:                                   │
│  EL MENOR ES:                                   │
│  NÚMERO DE PARES:                               │
│  NÚMERO DE IMPARES:                             │
│  SUMA DE LOS PARES:                             │
│  PRODUCTO DE LOS IMPARES:                       │
│                                                 │*/

#include <iostream>
using namespace std;

int num[100];
int main()
{
    int nume, counter;
    {
        for (counter=0; counter<100; counter++)
        {
           cout<<"Escribe 100 numeros: \n";
           cin>>nume;
           nume=num[counter];
        }
    }
    int par,countb,aux;
    {
        for (counter=0; counter<100; counter++)
        {
            aux==num[counter];
            if(2%aux==0)
            {
                countb++;
            }

        }
      cout<<"          PAR: "<<countb;


    }
    int impar, countc,auxb;
    {
        for (counter=0; counter<100; counter++)
        {
            auxb==num[counter];
            if(2%auxb!=0)
            {
                countc++;
            }

        }
      cout<<"          IMPAR: "<<countc;


    }
    cout<<"EL MAYOR ES: ";
    int may,cnt,auxcount,a,b,auxy;
    {

        for (cnt=0;auxcount=1;cnt<100;auxcount<=100;cnt++;auxcount++)
        {
            a==num[cnt];
            b==num[auxcount];
            if (a>b)
            auxy=a;
            else
            auxy=b;
        }
        cout<<auxy<endl;

    }
    cout<<"EL MENOR ES: \n";
    int men,cnta,cntb,c,d,auxx;
    {

        for (cnta=0;cntb=1;cnta<100;cntb<=100;cnta++;cntb++)
        {
            c==num[cnta];
            d==num[cntb];
            if (c>d)
            auxy=c;
            else
            auxy=d;
        }
        cout<<auxy<endl;

    cout<<"NUMERO DE PARES: "<<countb<<endl;
    cout<<"NUMERO DE IMPARES: "<<countc<<endl;
    int spares,countd,auxc,auxa,resulta;
    {
        for (countd=0; countd<100; countd++)
        {
            aux==num[countd];
            if(2%auxc==0)
            {
                num[countd]=auxa;
                resulta=auxc+auxa;
            }


        }
      cout<<"SUMA DE LOS PARES: "<<resulta;

    }
    int impares,counte,auxd,auxe,resultb;
    {
        for (counte=0; counte<100; counte++)
        {
            auxd==num[counte];
            if(2%auxd==0)
            {
                num[countd]=auxe;
                resultb=auxd*auxe;
            }


        }
      cout<<"PRODUCTO DE LOS IMPARES: "<<resultb;

    }





return 0;
}







Se que está un poco mal, pero es que tenia 3 examenes seguidos cada día (Maldigo a 3ºESO)

EDIT:
Este era una mierda, pero lo hice en 5 minutos y no tenía tiempo de pensar, aqui va el bueno(Y pasado a C):

Spoiler: mostrar



/*13.   En el fichero de entrada estándar están grabados cien valores enteros distintos.
Escríbase un programa que los grabe en el fichero de entrada estándar los pares seguido
de "PAR" y los impares de "IMPAR" dejando diez blancos por la izquierda.
Determinar también el mayor, el menor, el número de pares, ídem de impares,
la suma de los pares y el producto de los impares.

┌─────────────────────────────────────────────────┐
│ LOS NUMERO LEIDOS SON:                          │
│                                                 │
│           408 PAR                               │
│           IMPAR -39                             │
│                        .                        │
│                        .                        │
│  EL MAYOR ES:                                   │
│  EL MENOR ES:                                   │
│  NÚMERO DE PARES:                               │
│  NÚMERO DE IMPARES:                             │
│  SUMA DE LOS PARES:                             │
│  PRODUCTO DE LOS IMPARES:                       │
│                                                 │*/

#include <stdio.h>

#define CANT 100

int num[CANT];
int main()

{
    int nume, counter,i;
    int par,countb,aux;
    int impares, countc,auxb;
    int may,cnt,auxcount,a,b,auxy;
        int men,cnta,cntb,c,d,auxx;
            int spares,countd,auxc,auxa,resulta;

    for (counter=0; counter<CANT; counter++)
        {
           printf("Escribe %d numeros: \n",CANT);
           scanf(&nume);
           nume=num[counter];
        }



    for (counter=0; counter<CANT; counter++)
        {
            aux=num[counter];
            if(aux%2==0)
            {
                countb++;
                for(i=1;i<11;i++) printf("PAR: %\n", aux);
            }
           else {
                 countc++;
                for(i=1;i<11;i++) printf("IMPAR: %\n", aux);

                }
        }

   for (cnt=0;cnt<CANT;cnt++)
        {
         if (cnt==0) auxy=num[cnt];
         else
              if (num[cnt]>auxy) auxy=num[cnt];
        }
        printf("\nEL MAYOR ES: %d", auxy);

   for (cnt=0;cnt<CANT;cnt++)
        {
         if (cnt==0) auxx=num[cnt];
         else
              if (num[cnt]<auxx) auxx=num[cnt];
        }
        printf("\nEL MENOR ES: %d", auxx);


     countb=0; countc=0;

    spares=0;impares=1;

    for (countd=0; countd<CANT; countd++)
        {
            if (num[countd]%2==0) {spares=spares+num[countd]; countb++;}
            else
             {
               impares=impares*num[countd];
               countc++;
               }

       }

   printf("\n NUMERO DE PARES: %d", countb);
   printf("\n NUMERO DE IMPARES: %d", countc);
   printf("\n NUMERO DE PARES: %d", countb);
   printf("\n SUMA DE PARES: %d", spares);
   printf("\n PRODUCTO DE IMPARES: %d", impares);

return 0;
}



Aun siendo el bueno, tiene unos problemas que no logro arreglar, a ver si lo encontrais y me ayudais...
« Última modificación: 19 de Noviembre de 2010, 07:39:32 am por DusknoirMaster »
No creo que pase mucho por Pokexperto, no hasta vacaciones....


Alliare

  • Administrador
  • Pokéxperto Alpha
  • *
  • Mensajes: 7293
  • Karma: +4/-0
  • ...
    • Ver Perfil
    • Pokexperto
  • FC - 3DS: 2964-9235-9718

  • Total Badges: 47
    Badges: (View All)
    Noveno aniversario Octavo aniversario Séptimo aniversario
Re:[Tema Oficial] C/C++
« Respuesta #21 en: 19 de Noviembre de 2010, 10:46:06 am »
Ni tengo ni la más remota idea de lo que has hecho:

Código: [Seleccionar]
countb=0; countc=0;

    spares=0;impares=1;

    for (countd=0; countd<CANT; countd++)
        {
            if (num[countd]%2==0) {spares=spares+num[countd]; countb++;}
            else
             {
               impares=impares*num[countd];
               countc++;
               }

       }


Muchas gracias a Pájaro por la fima y avatar *-*

Krub

  • Pokéxperto Alpha
  • ***
  • Mensajes: 7593
  • Karma: +23/-1
  • Karma: ¡QUINCE!
    • Ver Perfil

  • Total Badges: 41
    Badges: (View All)
    Nivel 7 Noveno aniversario Octavo aniversario
Re:[Tema Oficial] C/C++
« Respuesta #22 en: 19 de Noviembre de 2010, 11:08:14 am »
Cuando miro el código así, cuando lo pones, digo "ah, vale, es para calcular si un número es primo o no". Ahora que lo has explicado, no me entero de nada. Es lo que tiene saber cuatro cosas de pseudocódigo y no tener ni idea de programar.

Soy patética.

Barra libre para reírse de mí/meterse conmigo.


No seas tonta. Nadie nace sabiendo. En vez de pensar y decirte esas cosas, esfuerzate por aprender.
~Víctor Krub~

lolwhut

Alliare

  • Administrador
  • Pokéxperto Alpha
  • *
  • Mensajes: 7293
  • Karma: +4/-0
  • ...
    • Ver Perfil
    • Pokexperto
  • FC - 3DS: 2964-9235-9718

  • Total Badges: 47
    Badges: (View All)
    Noveno aniversario Octavo aniversario Séptimo aniversario
Re:[Tema Oficial] C/C++
« Respuesta #23 en: 19 de Noviembre de 2010, 03:59:53 pm »
Tienes razón. Tenía un mal día ayer. Gracias, Krub.

Muchas gracias a Pájaro por la fima y avatar *-*

sklsmly

  • Ayudante de Entrenador
  • **
  • Mensajes: 103
  • Karma: +0/-0
    • Ver Perfil

  • Total Badges: 16
    Badges: (View All)
    Súper combo Combo Democrático
Re:[Tema Oficial] C/C++
« Respuesta #24 en: 19 de Noviembre de 2010, 08:52:27 pm »
Ni tengo ni la más remota idea de lo que has hecho:


Ponlo en varias líneas:
Código: [Seleccionar]
countb=0; countc=0;

    spares=0;impares=1;

    for (countd=0; countd<CANT; countd++)
        {
            if (num[countd]%2==0)
             {
                 spares=spares+num[countd];
                 countb++;
             }
            else
             {
               impares=impares*num[countd];
               countc++;
               }

       }


Si el numero es divisible entre 2 aumenta el contador de pares y los va sumando. Si no, aumenta el impares y los multiplica.

****************

Comentarios (Por importancia):
En el bucle de entrada pones:

    for (counter=0; counter<CANT; counter++)
        {
           printf("Escribe %d numeros: \n",CANT);
           scanf(&nume);
          nume=num[counter];
        }

No estás rellenando el array. Estás machacando el valor introducido con un valor desconocido que haya en el array. Tendría que ser:

num[counter] = nume;

Al ser una cantidad fija (100 números) los impares son 100-pares, te ahorras una variable. La suma, multiplicación, mayor y menor los puedes hacer en el bucle de entrada, con lo que ahorras 4 bucles.

Se entiende mejor si el nombre de las variables son mas claras.

Creo que no me he equivocado, y no hay mas... Voy con un poco de prisa, mas tarde compruebo. Y por cierto, no usas ficheros, no?
« Última modificación: 19 de Noviembre de 2010, 08:57:18 pm por sklsmly »
by Alliare

DusknoirMaster

  • Ayudante de Profesor
  • ****
  • Mensajes: 1043
  • Karma: +0/-0
  • DusknoirMaster Rules!
    • Ver Perfil

  • Total Badges: 27
    Badges: (View All)
    Nivel 5 Sexto aniversario Usuario de Windows
Re:[Tema Oficial] C/C++
« Respuesta #25 en: 20 de Noviembre de 2010, 04:15:06 am »
No no uso ficheros, y gracias por la ayuda,  ^__^ ^__^,

Ya he avanzado en mi Decriptador/Encriptador, aunque aun tiene un fallo que no entiendo, aqui va el código:

Spoiler: mostrar



#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>


using namespace std;

  string decrypt()
    {
        //Numero secreto
        int secreto;
        cout<<"Escribe el numero secreto (Entre 1 y 100): \n";
        cin>>secreto;
        if (secreto<1||secret>100)
        cout<<"Numero erroneo, tiene que estar entre 1 y 100 \n";
        secreto;
        cout<<"Ahora escribe el numero que quieres desencriptar: \n";
        int tamano;
        string wordo;
        cin>>wordo;
        tamano=wordo.length();


        int u;
        char auxy;
        for (u=0;u<=tamano;u++)
        {
            auxy=wordo;
            auxy-secreto;
            cout<<auxy;
        }

  }

      string encrypt()
    {
        //Numero secreto
        int secret;
        cout<<"Escribe el numero de encriptacion (Necesario para desencriptar) \n";
        cin>>secret;
        cout<<"Ahora escribe la palabra que quieres encriptar: \n";
        int taman;
        string wordu;
        cin>>wordu;
        taman=wordu.length();


        int i, aux;
        for (i=0;i<=taman;i++)
        {
            aux=wordu;
            aux-secret;
            cout<<aux;
        }

  }

int main()
{
    char choice;
    {
        //Elegir, encriptar o decriptar
        cout<<"\\**Bienvenido al programa de Decriptacion/Encriptacion de Enrique Silvela**// \n";
        cout<<"___________________________________________________________ ___________________ \n";
        cout<<"********************************/&\******************************************* \n";
        cout<<"**********************-----_____\~/_____-----********************************* \n";
        cout<<"**********************-----_____/~\_____-----********************************* \n";
        cout<<"********************************\~/******************************************* \n";
        cout<<endl;
        cout<<endl;
        cout<<"Elige que quieres hacer: Decriptar o Encriptar (D para Decriptar y E para encriptar): \n";
        cin>>choice;
        if (choice == 'D'||'d')
        {
            decrypt();
        }

        else if (choice == 'E'||'e')
        {
            encrypt();
        }

        else
           cout<<"Seleccion erronea, vuelve a intentarlo: \n";
        choice;


    }













    return 0;
}



Lo hice con ANSI, porque es más fácil y me ahorro mucho, a ver si sklsmly me lo puede corregir.

P.D: Por fin una firma sklsmly, ya solo te falta el avatar ^__^.
No creo que pase mucho por Pokexperto, no hasta vacaciones....


sklsmly

  • Ayudante de Entrenador
  • **
  • Mensajes: 103
  • Karma: +0/-0
    • Ver Perfil

  • Total Badges: 16
    Badges: (View All)
    Súper combo Combo Democrático
Re:[Tema Oficial] C/C++
« Respuesta #26 en: 20 de Noviembre de 2010, 04:47:45 am »
Emm... No estoy con mi ordenador, asi que no puedo hacer pruebas. Pero si he entendido bien, la encriptación consiste en sumar un valor al ascii (no Ansi) de las letras, y desencriptas restando.

Pero en ambas funciones estás restando, por lo que nunca obtienes el valor original. Además, en los bucles de encriptado/desencriptado intentas tomar una letra para la operación, pero lees la palabra completa (aquí, por ejemplo:  auxy=wordo;). Tampoco controlas el numero de encriptación, lo que te dará error. Si introducen el 200 y meten la letra A el valor supera el numero 255, que es el máximo que puede entrar en un char. Además, al hacer la suma, y especialmente, la resta, te puedes meter en símbolos especiales que nunca podrán ser introducidos por teclado,y por tanto, desencriptados por tu programa (por ejemplo, si el resultado contiene el codigo 13 [Intro] cuando quieras desencriptar el programa lo interpretará como que ya has terminado de escribir, y no como un caracter a desencriptar). Y si al pedir el numero para desencriptar no le das el correcto, me parece que no te lo pide de nuevo.

Como comentarios aparte, facilita mucho la lectura que todas las variables estén declaradas al principio del procedimiento y que haya comentarios. También es más comodo el Scanf y el Printf, aunque eso es más cuestión personal  :D

Y qué compilador usas? Imagino que uno de C++, ya que usas el tipo String.

Y para qué es esto, que no lo veo?
Spoiler: mostrar
        cout<<"Numero erroneo, tiene que estar entre 1 y 100 \n";
        secreto;
        cout<<"Ahora escribe el numero que quieres desencriptar: \n";
[/color]
by Alliare

Pedro's

  • Pokéxperto
  • **
  • Mensajes: 5679
  • Karma: +20/-0
  • Penguin Army Leader
    • Ver Perfil
    • KAWAHAL
    • Email

  • Total Badges: 46
    Badges: (View All)
    Décimo aniversario Noveno aniversario Octavo aniversario
Re:[Tema Oficial] C/C++
« Respuesta #27 en: 20 de Noviembre de 2010, 04:50:05 am »
No no uso ficheros, y gracias por la ayuda,  ^__^ ^__^,

Ya he avanzado en mi Decriptador/Encriptador, aunque aun tiene un fallo que no entiendo, aqui va el código:

Spoiler: mostrar



#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>


using namespace std;

  string decrypt()
    {
        //Numero secreto
        int secreto;
        cout<<"Escribe el numero secreto (Entre 1 y 100): \n";
        cin>>secreto;
        if (secreto<1||secret>100)
        cout<<"Numero erroneo, tiene que estar entre 1 y 100 \n";
        secreto;
        cout<<"Ahora escribe el numero que quieres desencriptar: \n";
        int tamano;
        string wordo;
        cin>>wordo;
        tamano=wordo.length();


        int u;
        char auxy;
        for (u=0;u<=tamano;u++)
        {
            auxy=wordo;
            auxy-secreto;
            cout<<auxy;
        }

  }

      string encrypt()
    {
        //Numero secreto
        int secret;
        cout<<"Escribe el numero de encriptacion (Necesario para desencriptar) \n";
        cin>>secret;
        cout<<"Ahora escribe la palabra que quieres encriptar: \n";
        int taman;
        string wordu;
        cin>>wordu;
        taman=wordu.length();


        int i, aux;
        for (i=0;i<=taman;i++)
        {
            aux=wordu;
            aux-secret;
            cout<<aux;
        }

  }

int main()
{
    char choice;
    {
        //Elegir, encriptar o decriptar
        cout<<"\\**Bienvenido al programa de Decriptacion/Encriptacion de Enrique Silvela**// \n";
        cout<<"___________________________________________________________ ___________________ \n";
        cout<<"********************************/&\******************************************* \n";
        cout<<"**********************-----_____\~/_____-----********************************* \n";
        cout<<"**********************-----_____/~\_____-----********************************* \n";
        cout<<"********************************\~/******************************************* \n";
        cout<<endl;
        cout<<endl;
        cout<<"Elige que quieres hacer: Decriptar o Encriptar (D para Decriptar y E para encriptar): \n";
        cin>>choice;
        if (choice == 'D'||'d')
        {
            decrypt();
        }

        else if (choice == 'E'||'e')
        {
            encrypt();
        }

        else
           cout<<"Seleccion erronea, vuelve a intentarlo: \n";
        choice;


    }













    return 0;
}



Lo hice con ANSI, porque es más fácil y me ahorro mucho, a ver si sklsmly me lo puede corregir.

P.D: Por fin una firma sklsmly, ya solo te falta el avatar ^__^.

 ******Fábrica de avatares animados de Pedros*********
 Esto por si acaso :xD
 No se por qué, pero me parece que sklsmly va a ser un usuario muy apreciado por todos. O eso espero.

DusknoirMaster

  • Ayudante de Profesor
  • ****
  • Mensajes: 1043
  • Karma: +0/-0
  • DusknoirMaster Rules!
    • Ver Perfil

  • Total Badges: 27
    Badges: (View All)
    Nivel 5 Sexto aniversario Usuario de Windows
Re:[Tema Oficial] C/C++
« Respuesta #28 en: 24 de Noviembre de 2010, 07:05:13 am »
Sobre mi compilador, uso Code::Blocks, es el que mejor me va. Y uso cout y cin porque a mi me parecen mas cómodos,(Odio al scanf y al printf, pero mi profesor me obliga a ponerlos) Estoy avanzando mas, ya he arreglado unos problemas, ahora lo estoy probando y debugeando.
No creo que pase mucho por Pokexperto, no hasta vacaciones....


sklsmly

  • Ayudante de Entrenador
  • **
  • Mensajes: 103
  • Karma: +0/-0
    • Ver Perfil

  • Total Badges: 16
    Badges: (View All)
    Súper combo Combo Democrático
Re:[Tema Oficial] C/C++
« Respuesta #29 en: 24 de Noviembre de 2010, 07:23:25 am »
Nunca he usado ese. Y si trabajaras en una empresa, probablemente te dirían que los uses, aunque no te gusten =P Son más cómodos para insertar texto (P.E: "Tienes {variable} euros") y para definir el tipo de entrada. Pero para ti mismo, mientras te aclares...

Ya nos enseñarás el código  ^__^
by Alliare

DusknoirMaster

  • Ayudante de Profesor
  • ****
  • Mensajes: 1043
  • Karma: +0/-0
  • DusknoirMaster Rules!
    • Ver Perfil

  • Total Badges: 27
    Badges: (View All)
    Nivel 5 Sexto aniversario Usuario de Windows
Re:[Tema Oficial] C/C++
« Respuesta #30 en: 16 de Diciembre de 2010, 02:03:02 am »
Revivo este tema porque necesito un poco de ayuda, he empezado a dar las funciones en C (Por fin ^__^) Y he hecho este código:

Código: [Seleccionar]
[color=white][b]//Funciones
#include<stdio.h>

int SumaF (int a, int b)
{
    return(a+b);
}
void SumaP (int*c, int a, int b)
{
    *c= a+b;
}
int main()
{

    int a=5, b, c=7, Suma;
    Suma=SumaF(a,7);
    SumaP(b,a,c);
    printf("%d", b);

}
[/b][/color]

Pero no me va, me sale que no se puede convertir de "int*" a "int"......asi que espero que sklsmly lo pueda corregir....
No creo que pase mucho por Pokexperto, no hasta vacaciones....