Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - K-YreX

#771
Código (cpp) [Seleccionar]

Complejo sumar(Complejo, Complejo);

Esto es el prototipo de una función a la que se le pasan dos variables de tipo <Complejo> (que es la <struct> que has creado) y retorna otro valor de tipo <Complejo>. Es como poner:
Código (cpp) [Seleccionar]

int sumar(int, int); // suma dos enteros y retorna la suma


Cuando haces un prototipo no es necesario poner el nombre de la variable ya que no lo vas a usar pero cuando defines la función, sí. Por eso en el prototipo (línea 7) sólo he puesto el tipo de variable que toma como parámetros y en la definición de la función (líneas 19-24) les pongo nombre a cada parámetro (a y b respectivamente) porque en la definición sí los voy a usar.

Si pones en la línea 7:
Código (cpp) [Seleccionar]

Complejo sumar(Complejo a, Complejo b);

también es válido. O con cualquier otro nombre en vez de a y b puedes poner num1, num2 o lo que quieras. En esta función no importa mucho el nombre porque es algo muy sencillo pero en funciones más largas o complejas es recomendable usar nombres que te ayuden a entender lo que hacen por ejemplo:
Código (cpp) [Seleccionar]

Complejo convertir(double real, double imaginaria){
    Complejo resultado;
    resultado.real = real;
    resultado.imaginaria = imaginaria;
    return resultado;
}


Suerte :-X
#772
Cita de: CalgaryCorpus en  4 Enero 2019, 11:03 AM
Sugeriría escribir los métodos de conversión fuera de las clases, para no crear una dependencia entre ellas.
Entiendo que con escribir los métodos de conversión fuera de las clases te refieres a hacer dos funciones. Mi primera duda es por qué sería mejor así? Es algo que desconozco :rolleyes:
Y tampoco sé si habría alguna diferencia entre hacer dos funciones con nombres distintos y parámetros distintos es decir...:
Código (cpp) [Seleccionar]

Rectangular convertirEnRectangular(Polar);
Polar convertirEnPolar(Rectangular);

... o sobrecargar una misma función para ambos casos:
Código (cpp) [Seleccionar]

Rectangular convertir(Polar);
Polar convertir(Rectangular);
#773
Cita de: fary en  4 Enero 2019, 15:16 PM
He he estado dando vueltas a la cosa... :rolleyes:  quizás así es mejor  :laugh:

int NumeroVocales(char * Cadena)
{
    int i,x,a = 0 ;
    for (i=0; Cadena[i] != '\0';i++)
    {
       x = Cadena[i];
       if (x <= 90) x += 32;
       if (x == 'a'|| x == 'e' || x == 'i' || x == 'o' || x == 'u')a++;
    }
    return a;
}


Aunque para este caso puede funcionar no es muy recomendable ese <if> de la línea 7. Ya que vas a convertir más caracteres de los que deberías, por ejemplo, los espacios los vas a convertir en arrobas y repito, aunque para este ejercicio no influye, no es muy correcto. Para eso está la función <tolower()> o si se hace usando los valores en ascii es mejor comprobar que es una letra es decir:

// usando variable char
char caracter;
if(caracter >= 'A' && caracter <= 'Z'){
    // es mayuscula, haces lo que sea...
}

// usando variable entera
int caracter_ascii;
if(caracter_ascii >= 65 && caracter_ascii <= 90){
    // es mayuscula, haces lo que sea...
}
#774
Las funciones se declaran fuera del main y se usan dentro de este
Código (cpp) [Seleccionar]

struct Complejo{
    double real;
    double imaginario;
};

Complejo sumar(Complejo, Complejo);

int main(){
    Complejo num1, num2; // mejor declararlos locales, no globales
    num1.real = 2;
    num1.imaginario = 1;
    num2.real = 3;
    num2.imaginario = 2;

    Complejo suma = sumar(num1, num2);
}

Complejo sumar(Complejo a, Complejo b){
    Complejo suma;
    suma.real = a.real + b.real;
    suma.imaginario = a.imaginario + b.imaginario;
    return suma;
}


Las sumas de tu función sobra el = de cada +=. Eso se usa para otra cosa. Suerte :-X
#775
Aquí tenéis otra solución:
Código (cpp) [Seleccionar]

int contarVocales(const string &frase){
    int contador = 0;
    for(size_t i = 0; i < frase.size(); i++){
        switch(tolower(frase[i])){
            case 'a': case 'e': case 'i': case 'o': case 'u':
                contador++;
        }
    return contador;
}


O sin usar el switch:
Código (cpp) [Seleccionar]

int contarVocales(const string &frase){
    int contador = 0;
    char actual;
    for(size_t i = 0; i < frase.size(); i++){
        actual = tolower(frase[i]);
        if(actual == 'a' || actual == 'e' || actual == 'i' || actual == 'o' || actual == 'u')
            contador++;
    }
    return contador;
}
#776
Pero en ese código no estás usando ninguna lista, imagino que quieres ir metiendo en una lista las variables <re> e <im> (te recomiendo nombres un poco más largos y que se entiendan mejor <real> e <imaginaria> porque variables con nombres muy cortos podrían significar más cosas, mejor el nombre completo si no es muy largo).

Para lo que quieres hacer te recomiendo empezar a usar objetos, es decir, crear una <struct> o <class> para almacenar un valor. Sería algo así:
Código (cpp) [Seleccionar]

struct Rectangular{
    double real;
    double imaginaria;
};

int main(){
    Rectangular variable_rectangular;
    cout << "Ingresa parte real: ";
    cin >> variable_rectangular.real;
    cout << "Ingresa parte imaginaria: ";
    cin >> variable_rectangular.imaginaria;
    // y aqui ya puedes meter la variable_rectangular en una lista
}


Te recomiendo mejor que crees dos clases, una Rectangular y otra Polar, hagas un constructor con parámetros, y métodos que te sirvan de algo por ejemplo:
Código (cpp) [Seleccionar]

class Rectangular{
    private:
        double real;
        double imaginaria;

    public:
        Rectangular(); // constructor por defecto
        Rectangular(double real, double imaginaria); // constructor con parametros
        Polar convertir(); // convierte una variable Rectangular en Polar
        //...
};

class Polar{
    private:
        double modulo;
        double angulo;

    public:
        Polar();
        Polar(double modulo, double angulo);
        Rectangular convertir(); // convierte una variable Polar a Rectangular
        //...
};


Puedes agregarle más métodos si los necesitas y para meterlos en una lista sólo tienes que crear una lista de variables <Rectangular> para meter esos valores y una lista de tipo <Polar> para meter esos valores. Suerte :-X
#777
<valor> es el número que vayas a guardar, en tu caso un número aleatorio. He puesto <valor> para no escribirlo todo.
#778
La suma de columnas está mal porque si te fijas tienes una matriz de 12 columnas y tú estás intentando guardar la suma en la columna 15...
Código (cpp) [Seleccionar]

for(x=0;x<15;x++){
    acu=0;
    for(y=0;y<11;y++)
        acu=acu+arr[x][y];
    arr[y][15]=acu; // Esto siempre vale arr[11][15]
}


Tienes que pensar bien la relación de los índices. Por ejemplo la suma de filas lo que hace es sumar la fila x y lo guarda en la posición matriz
  • [11]. Pero la suma de columnas, suma la columna x y lo estás guardando en la posición matriz[11][15]. Entonces tienes dos problemas, primero que siempre sobrescribes la misma posición y segundo que esa posición está fuera de la matriz.

    PD: Si quieres sumar una columna y guardar la suma en la última posición de esa columna tienes que dejar la última fila sin valores al igual que la última columna.
    Código (cpp) [Seleccionar]

    const int FILAS = 16, COLUMNAS = 12;
    int i, j;
    int matriz[FILAS][COLUMNAS];

    for(i = 0; i < FILAS-1; i++) // no escribimos en la ultima fila
        for(j = 0; j < COLUMNAS-1; j++) // no escribimos en la ultima columna
            matriz[i][j] = valor;

    // suma de filas
    for(i = 0; i < FILAS-1; i++){ // este for recorre las filas desde la 0 hasta la 14 incluida
        suma = 0;
        for(j = 0; j < COLUMNAS-1; j++) // este for recorre las columnas desde la 0 hasta la 10 incluida
            suma += matriz[i][j];
        matriz[i][j] = suma; // guardamos en la posicion [x][11] la suma de la fila x

    // tambien se puede hacer sin usar una variable suma
    for(i = 0; i < FILAS-1; i++){
        matriz[i][COLUMNAS-1] = 0; // ponemos la ultima posicion de la fila a 0...
        for(j = 0; j < COLUMNAS-1; j++)
            matriz[i][COLUMNAS-1] += matriz[i][j]; // ... y vamos acumulando cada posicion de esa fila


    La parte de sumar las columnas te la dejo a ti para que practiques. Suerte :-X
    Pista: Tienes que darle la vuelta a los <for> y guardar en la posición [15]
  • la suma de la columna x... :silbar:
#779
Muestra cómo estás haciendo la suma por columnas para poder ver el error...
#780
Lo primero de todo coloca tu código entre etiquetas GeSHi, ya que como puedes comprobar tú mismo ese código es ilegible. Y también hay alguna instrucción en dos líneas, corrige eso para que se pueda entender mejor.

Para sumar cada columna tienes que pensar la relación que tiene una columna (la segunda coordenada es siempre la misma). Entonces dos bucles anidados, el exterior se mueve por las columnas y el interior por las filas, y una vez que acaba el bucle interior y se ha ido sumando cada valor, se almacena al final de esa columna. Suerte :-X

PD: No uses la librería <conio.h> ya que no es estándar. Sólo la necesitas para usar <getch()>. Puedes sustituir <getch()> por <getchar()> y así ya no necesitas incluir esa librería.