1

Este es mi codigo:

#include <iostream>

using namespace std;

int main()
{
    int c, floor, colum;
    float rent;
    cout<<"\n\n\t\t\t\t< Sistema de calculo de arriendos >"<<endl<<endl<<endl;
    cout<<"> Ingrese el valor de la renta: "<<char(36);
    cin>>rent;
    cout<<endl;
    cout<<"> Ingrese la cantidad de pisos: ";
    cin>>floor;
    cout<<endl<<"> Ingrese la cantidad de habitaciones por piso: ";
    cin>>colum;
    cout<<endl<<endl;
    string edificio[floor][colum];
    int vpiso[floor];
    for (int x=0, y=0; x<floor && y<=colum; y++)
    {
        if (y==colum)
        {
            y=0;
        }
        cout<<"> En el Piso "<<x+1<<" la habitacion "<<y+1<<" esta ocupada? (si/no): ";
        cin>>edificio[x][y];
        cout<<endl;
        if (edificio[x][y]=="si")
        {
            c++;
        }
        if (y==colum-1)
        {
            x++;
        }
    }
    cout<<"\n\n\t\t";
    for (int x=0, y=0; x<floor && y<=colum; y++)
    {
        if (y==colum)
        {
            y=0;
        }
        cout<<edificio[x][y]<<"\t";
        if (y==colum-1)
        {
            x++;
            cout<<"\n\n\t\t";
        }
    }
    cout<<endl<<"> Debe cobrar a "<<c<<" personas un valor de: "<<char(36)<<rent*c;
    cin.get();
    cin.get();
    return 0;
}

PD: Rehice el programa de 0, pero lo que quiero es mostrar por pantalla es el valor a cobrar por cada fila

ej:

"En el piso 1 deben" x personas "y tienen que pagar" x valor

"En el piso 2 deben" x personas "y tienen que pagar" x valor

Malthael
  • 796
  • 5
  • 12
  • 23
  • Y cual es el error? que esperas obtener? Cual es exactamente el problema? que intentas solucionar? – gbianchi Sep 21 '16 at 18:45
  • El problema no es el codigo, de funcionar funciona, el problema es al final, el calculo no lo hace correctamente, el problema ya lo explique arriba – Malthael Sep 21 '16 at 18:51
  • Ademas de que veo muchos problemas con el codigo, sigues sin explicar a que resultado quieres llegar, como quieres llgar a el, y que hace tu codigo. De por si, deberias verificar que valores llegan a media y cmedia, para ver en que punto esta el error. Te aclaro que las matrices se recorren usualmente con dos for anidados, no con un for y montones de switch e if. – gbianchi Sep 21 '16 at 19:41
  • 1
    Porfavor intenta explicarnos que es lo que hace el código, cuales son los resultados que esperas con el y la linea exacta donde está fallando. – NaCl Sep 21 '16 at 20:05
  • Intenta cambiar esto `int calta, cmedia, cbaja;` por `float`. –  Sep 21 '16 at 20:13
  • 1
    @ArtEze rehice el codigo de 0 y mejore ciertas cosas, la cosa es que quiero mostrar el calculo de cada fila y no se como – Malthael Sep 21 '16 at 22:42
  • @NaCl el problema es al final, rehice el programa pero el problema es que quiero mostrar cada fila por separado, arriba en la pregunta lo explique – Malthael Sep 21 '16 at 22:43

2 Answers2

5

Esto está mal redactado, si dijeras "tantos" o "tantas", sería más entendible, pero como pusiste la letra x parece como si fuera una variable.

"En el piso 1 deben" x personas "y tienen que pagar" x valor.

Yo lo cambiaría por esto, ya que no es probable que la cantidad de personas sea la misma que el valor a pagar. La magia está en cambiar el número de piso por el de una variable.

Sospecho que las variables deberían ser...

cantidadPisos = floor;
piso = x;
cantidadPersonas = c;
valor = rent*c;

El código debe quedar algo así, abajo del if que verifica la columna debe ir un cout .

    if (y==colum-1)
    {
        x++;
        cout<<"\n\n\t\t";
    }
    cout << "En el piso " << piso
    <<" deben " << cantidadPersonas << "personas"
    << "y tienen que pagar" << valor << "valor." <<endl;
  • 1
    Pues si.. con x me refiero a cualquier valor, no que x es la que debe enseñar, gracias por tu respuesta – Malthael Sep 22 '16 at 20:50
3

Problema.

Todo. El código que presentas no parece ajustarse, de ninguna manera, a lo que pretendes.

  1. vpiso no se usa.
  2. Usas std::string sin incluir <string>.
  3. Usas std::cin para hacer una pregunta binaria a tu usuario, usando una variable de texto para leer y comprobar el resultado.
    • Para empeorarlo más, usas un arreglo de tamaño variable (no soportados en C++ más que mediante extensiones de compilador) para guardar la respuesta.
  4. Abusas de std::endl.
  5. Quieres mostrar "En el piso 1 deben" x personas "y tienen que pagar" x valor al final y esa cadena ni siquiera forma parte del código.
  6. No inicializas ni una variable.
    • Y los nombres de las variables no son auto-explicativos, no uses variables cuyo nombre sea una sola letra.

El punto 3 es especialmente preocupante, todas estas respuestas se considerarán negativas:

  • Si.
  • SI.
  • Yes.
  • Da.
  • .

Mientras que estas respuestas negativas se consierarán positivas:

  • si claro, a ti te lo voy a decir!.
  • si vuelves a preguntarme algo, me comeré tu pez de colores a la parrilla.
  • si me entero de que trabajas para Skynet usaré tu CPU de pisapapeles.

Propuesta.

No necesitas un arreglo de dos dimensiones para guardar cada piso/habitación ya que sólo requieres el sumatorio de cada piso, así que usa un arreglo sólo para las habitaciones en que contarás cada piso ocupado.

unsigned floor{}, colum{}, *arrendados;
float rent{};
std::cout<<"\n\n\t\t\t\t< Sistema de calculo de arriendos >\n\n\n";
std::cout<<"> Ingrese el valor de la renta: $";
std::cin>>rent;
std::cout<<'\n';
std::cout<<"> Ingrese la cantidad de pisos: ";
std::cin>>floor;
std::cout<<"\n> Ingrese la cantidad de habitaciones por piso: ";
std::cin>>colum;
std::cout<<"\n\n";

arrendados = new unsigned[floor]{};

Los pisos no ocupados no nos importan para el cálculo, así que los ignoramos:

for (unsigned piso{}; piso < floor; ++piso)
{
    for (unsigned habitacion{}; habitacion < colum; ++habitacion)
    {
        std::string ocupada{};
        std::cout<<"\n> En el Piso "<<(piso+1)
                 <<" la habitacion "<<(habitacion+1)
                 <<" esta ocupada? (si/no): ";
        std::cin>>ocupada;

        arrendados[piso] += ocupada == "si" ? 0 : 1;
    }
}

Para acabar, mostramos los resultados y liberamos la memoria dinámica:

for (unsigned piso{}; piso < floor; ++piso)
{
    std::cout << "\nEn el piso " << piso
              << " deben " << arrendados[piso]
              << " personas y tienen que pagar "
              << (arrendados[piso] * rent) << " valor";
}

delete[] arrendados;

Puedes ver el código funcionando [aquí].

PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
  • 1
    Gracias por tu respuesta, sobre lo primero si, no uso vpiso, que lo intentaba usar para calcular el valor x piso, sobre string, bueno tengo entendido que string ya viene incluida en iostream pero no las funciones de la libreria x eso no la uso, y de ahi estudiare todo lo que has señalado gracias x las correciones aunque el ejercicio me exige que haga una matriz – Malthael Sep 22 '16 at 20:41
  • 2
    Si tu pregunta contiene limitaciones o requerimientos especiales **debes mencionarlo**, los demás usuarios no podemos *adivinar* tus requerimientos, debes ayudarnos a ayudarte. `` puede venir incluida en `` pero también debes incluir explícitamente lo que usas no confiar en que otras cabeceras lo incluirán por ti. – PaperBirdMaster Sep 23 '16 at 06:42