• Ir al contenido
  • Ir a la navegación
  • Ir al buscador
 
Portada Boludo
ING English
Directorio WAP para móvil, Tablet, iPhone o Smartphone

Centro de Noticias de la Universidad de Oriente

Categorías

 

Inicio  |  Contacto  |  Posts  |  TIENDA PUBLISHOP  |  Sobre nosotros  |  Registro y Planes  |  Pagos  |  Donaciones

Ver Código QR de esta página

Campaña #AyudemosaYuli  |  Campaña #AyudemosaStephany.  |  ¿Interesado(a) en cursos y resolución de ejercicios de materias prácticas? Para más información, contáctenos por: Teléfono: +58 (412) - 8226575. WhatsApp y Telegram: +58 (426) - 6836955 o escriba al correo: [email protected]. Únete al grupo: SISTEMAS (UDOMO).

[»] **Musica para tu celular

WEB TRANSLATOR

LINK for English Language

Use this link for translate into English


+ Buscar en BolUDO

 

Vectores (ordenamiento con vectores paralelos)

Tweet
 

lunes julio 11, 2016

Cuando se tienen vectores paralelos y se ordena uno de ellos hay que tener la precaución de intercambiar los elementos de los vectores paralelos.

Problema 1:

Confeccionar un programa que permita cargar los nombres de 5 alumnos y sus notas respectivas. Luego ordenar las notas de mayor a menor. Imprimir las notas y los nombres de los alumnos.

Programa:

#include<iostream>

using namespace std;

class NotaAlumnos {
private:
    char nombres[5][40];
    int notas[5];
public:
    void cargar();
    void ordenar();
    void imprimir();
};


void NotaAlumnos::cargar()
{
    cout <<"Carga de nombres y notas"<<"";
    for(int f=0;f < 5;f++) 
    {
        cout <<"Ingese el nombre del alumno:";
        cin.getline(nombres[f],40);
        cout <<"Ingrese la nota del alumno:";
        cin >>notas[f];
        cin.get();
    }
}

void NotaAlumnos::ordenar()
{
    for (int k = 0; k < 5; k++)
    {
        for (int f = 0; f < 4 - k; f++)
        {
            if (notas[f] < notas[f + 1])
            {
                int auxnota;
                auxnota = notas[f];
                notas[f] = notas[f + 1];
                notas[f + 1] = auxnota;
                char auxnombre[40];
                strcpy_s(auxnombre,40, nombres[f]);
                strcpy_s(nombres[f],40, nombres[f + 1]);
                strcpy_s(nombres[f + 1],40, auxnombre);
            }
        }
    }
}

void NotaAlumnos::imprimir()
{
    cout <<"Nombres de alumnos y notas de mayor a menor"<<"";
    for(int f=0;f < 5;f++) 
    {
        cout <<nombres[f] <<" - " <<notas[f] <<"";
    }
    cin.get();
}

void main()
{
    NotaAlumnos na;
    na.cargar();
    na.ordenar();
    na.imprimir();
}

Este proyecto lo puede descargar en un zip desde este enlace :

OrdenamientoVectoresParalelos

Definimos en la clase NotaAlumnos los dos vectores:

class NotaAlumnos {
private:
    char nombres[5][40];
    int notas[5];

Procedemos a cargar los dos vectores:

void NotaAlumnos::cargar()
{
    cout <<"Carga de nombres y notas"<<"";
    for(int f=0;f < 5;f++) 
    {
        cout <<"Ingese el nombre del alumno:";
        cin.getline(nombres[f],40);
        cout <<"Ingrese la nota del alumno:";
        cin >>notas[f];
        cin.get();
    }
}

Como podemos ver hemos introducido una nueva característica del cout que es la impresión de múltiples valores con un solo cout (nos ahorramos líneas de codificación):

    cout <<"Carga de nombres y notas"<<"";

En lugar de:

    cout <<"Carga de nombres y notas";
    cout <<"";

En el proceso de ordenamiento dentro de los dos for verificamos si debemos intercambiar los elementos del vector notas:

    for (int k = 0; k < 5; k++)
    {
        for (int f = 0; f < 4 - k; f++)
        {
            if (notas[f] < notas[f + 1])
            {

En el caso que la nota de la posición 'f' sea menor a de la posición siguiente 'f+1' procedemos a intercambiar las notas:

                int auxnota;
                auxnota = notas[f];
                notas[f] = notas[f + 1];
                notas[f + 1] = auxnota;

y simultánemamente procedemos a intercambiar los elementos del vector paralelo (con esto logramos que los dos vectores continúen siendo vectores paralelos):

                char auxnombre[40];
                strcpy_s(auxnombre,40, nombres[f]);
                strcpy_s(nombres[f],40, nombres[f + 1]);
                strcpy_s(nombres[f + 1],40, auxnombre);

Como vemos utilizamos dos auxiliares distintos porque los elementos de los dos vectores son de distinto tipo (int y cadena de caracteres)

Si deseamos ordenar alfabéticamente la condición dependerá del vector nombres.

Nuevamente en la impresión hemos utilizado el objeto cout con salidas múltiples:

void NotaAlumnos::imprimir()
{
    cout <<"Nombres de alumnos y notas de mayor a menor"<<"";
    for(int f=0;f < 5;f++) 
    {
        cout <<nombres[f] <<" - " <<notas[f] <<"";
    }
    cin.get();
}
  1. Cargar en un vector los nombres de 5 paises y en otro vector paralelo la cantidad de habitantes del mismo. Ordenar alfabéticamente e imprimir los resultados. Por último ordenar con respecto a la cantidad de habitantes (de mayor a menor) e imprimir nuevamente.
Solución
#include <iostream>

using namespace std;

class PaisesHabitantes {
private:
    char paises[5][40];
    int habitantes[5];
public:
    void cargar();
    void ordenarPorNombres();
    void ordenarPorHabitantes();
    void imprimir();
};

void PaisesHabitantes::cargar()
{
    cout << "Carga de paises y habitantes" << "";
    for (int f = 0; f < 5; f++)
    {
        cout << "Ingese el nombre del pais:";
        cin.getline(paises[f], 40);
        cout << "Ingrese la cantidad de habitantes:";
        cin >> habitantes[f];
        cin.get();
    }
}

void PaisesHabitantes::ordenarPorNombres()
{
    for (int k = 0; k < 5; k++)
    {
        for (int f = 0; f < 4 - k; f++)
        {
            if (strcmp(paises[f], paises[f + 1]) > 0)
            {
                char auxpais[40];
                strcpy_s(auxpais, 40,paises[f]);
                strcpy_s(paises[f], 40,paises[f + 1]);
                strcpy_s(paises[f + 1], 40, auxpais);
                int auxhabitante;
                auxhabitante = habitantes[f];
                habitantes[f] = habitantes[f + 1];
                habitantes[f + 1] = auxhabitante;
            }
        }
    }

}

void PaisesHabitantes::ordenarPorHabitantes()
{
    for (int k = 0; k < 5; k++)
    {
        for (int f = 0; f < 4 - k; f++)
        {
            if (habitantes[f] < habitantes[f + 1])
            {
                char auxpais[40];
                strcpy_s(auxpais,40, paises[f]);
                strcpy_s(paises[f],40, paises[f + 1]);
                strcpy_s(paises[f + 1],40, auxpais);
                int auxhabitante;
                auxhabitante = habitantes[f];
                habitantes[f] = habitantes[f + 1];
                habitantes[f + 1] = auxhabitante;
            }
        }
    }
}

void PaisesHabitantes::imprimir()
{
    for (int f = 0; f < 5; f++)
    {
        cout << paises[f] << " - " << habitantes[f] << "";
    }
}

void main()
{
    PaisesHabitantes ph;
    ph.cargar();
    ph.ordenarPorNombres();
    cout << "Ordenado por nombres" << "";
    ph.imprimir();
    ph.ordenarPorHabitantes();
    cout << "Ordenado por cantidad de habitantes" << "";
    ph.imprimir();
    cin.get();
}

Este proyecto lo puede descargar en un zip desde este enlace :OrdenamientoVectoresParalelos2

— @bolUDOoficial

— Síguenos en Twitter@bolUDOoficial

Categorías: #C++, #


[0] Atrás | Directorio
« Inicio

Apps Infoudo
Apps Infoudo ¡Descarga el icono directo en el menú de tu equipo!
[»] Las mejores Apps para tu celular
[»] Imágenes Gratis


Comenta o lee lo que otros opinan

COMPÁRTELO:

Indica que te gusta y comparte

Me Gusta :)Facebook Tuiteame :)Twitter .WhatsApp .Telegram . LinkedIn


También te puede interesar:

NOCIONES BÁSICAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS.
Material de Apoyo del Curso de Programación - Lenguaje C++ - Periodo (Feb - May) del año en curso
Parámetros por valor y por referencia de objetos
Parámetros por valor y por referencia de datos simples
Métodos constantes (const)
Parámetros de un método constante (const)
Definición de constantes (const)
Directiva #define
Puntero this
Métodos estáticos de una clase

Ver Todas Las Páginas Relacionadas

« Vectores (ordenamiento)  |  Estructura de datos tipo matriz »
 
Apps Infoudo
 
Buscador:
Powered by Google:


Web móvil
Imágenes
La Web

 

Síguenos por RSS


Puedes leerlos mediante el navegador Firefox, lectores de noticias en la computadora o el móvil o usando el servicio de Feedburner de Google para recibir las notificaciones por correo electrónico.
RSS - Suscribirse usando Feedburner de Google

email Recibir las nuevas publicaciones de Boludo por email

Atom


»Ir a URL
.....
Registra Gratis Tu Negocio
....
Sugerir un nuevo sitio WAP

...
¡Bloguea Ya!

..
Registro de Profesionales(Abogados, escritores, doctores, licenciados, ingenieros, etc.)
.
Soporte

Síguenos en las redes sociales

Síguenos en Facebook facebook.com/boludooficial Síguenos en Twitter @bolUDOoficial Síguenos en Instagram @boludooficial Síguenos en Telegram t.me/Boludooficial
Síguenos en WhatsApp BolUDOoficial Síguenos en YouTube youtube.com/@boludo.oficial
Síguenos en Facebook facebook.com/SergioAlemanFans Síguenos en Twitter @SergioAleman1 Síguenos en Instagram @sergioalemanfans
Síguenos en WhatsApp wa.me/qr/Y7Q232VLZPR5O1 Síguenos en Tiktok @sergioalemanoficial Síguenos en Tiktok @sergioalemanfans
Síguenos en Telegram t.me/SergioAlemanOficial Síguenos en YouTube youtube.com/@sergioaleman
Síguenos en Facebook facebook.com/INFOUDO.OFICIAL Síguenos en Twitter @infoudomon Síguenos en Instagram @infoudooficial Síguenos en Telegram t.me/Infoudooficial
Síguenos en Facebook facebook.com/tuinfou Síguenos en Twitter @infoudomonagas
Síguenos en WhatsApp INFO UDO Síguenos en YouTube youtube.com/@infoudooficial

Mis cuentas sociales

FB
Twitter
Pinterest
Instagram
Canales RSS con las últimas publicaciones
Otras  |  Linktree

Móvil: (0426 683 6955 - 0412 8226575) - E-mail: [email protected] - [email protected] - WhatsApp: +58 (0426) 683.69.55 / +58 (0412) 822.65.75


Copyscape
Volver arriba

Protocolo  |  Mapa del Sitio  |  Report Abuse - DMCA  |  Términos y Condiciones  |  Ayuda  |  Privacidad de Datos  |  Política de Cookies  |  Reportar un bug  |  Licencia: CC BY-NC-ND 3.0

Copyright ©2023 Boludo. Todos los derechos reservados. Diseñado, desarrollado, administrado y mantenido por Sergio Alemán Mi perfil en GitHub


SUBIR