Avatar billede diyar Nybegynder
03. juli 2008 - 11:21 Der er 4 kommentarer og
1 løsning

hvordan laver jeg om på while loop?

Hej

Jeg har fået en C++ opgave, hvor jeg skal lave en dynamisk array, og scanner den. Jeg har lyst problemet, men min lære er ikke tilfreds med en while lykke som jeg har lavet, han har peget på min while lykke og skrevet følegene:(Opfattes som dårlig sw skik! Med et fornuftigt design behøver du (næsten) aldrig break/continue). Så mit spørgsmål er: hvordan laver jeg min while loop om, så den stadigvæk udføre det samme? Her er koden:

#include <iostream>
using namespace std;
int main (void){
    int numberOfRooms =0, size = 1, index;
    double width, length, TotalArea = 0, LargestArea = 0;

    double *areas = new double [size];
    double *tempArea;
    cout<<"Enter the width of the room number 1 : " ;
    while (cin>>width){
        cout<<"\nEnter the length of the room number "<< numberOfRooms +1<< " : ";
        if (!(cin>>length)){
            break;
        }
        //der oprets en ny room, fordi en bredde og en lengde er indlæst..
        numberOfRooms++;
        //jeg fordobler arrayet hvis array længde er mendre end antal værelse.
        if (numberOfRooms > size){
            tempArea = new double[2*size];
            //kopier fra gamle værdier til det ny array...
            for(int i=0;i< numberOfRooms-1; i++){
                tempArea[i]=areas[i];
            }
            //indsæt det nyste værelse i den ny array
            tempArea[numberOfRooms-1]=width*length;
            //fjernelse af det gamle array
            delete[] areas;
            //den gamler array pointer peger på den ny
            areas = tempArea;
            //opdateres størrelse på arrayet
            size = 2*size;
        }
        else{
            areas[numberOfRooms-1]=width*length;
        }
        TotalArea += areas[numberOfRooms-1];
        cout<<"The are of room number "<<numberOfRooms<< " is "<< areas[numberOfRooms-1]<<" square metre."<<"\n";
            cout<<"\nEnter the width of the room number "<< numberOfRooms +1<< " : ";
    }
    cout<<"The total area of the rooms is "<< TotalArea<<" square metre. "<<"\n";
    for (int i = 0; i < numberOfRooms; i++){
        if (areas[i] > LargestArea){
            LargestArea = areas[i];
            index = i+1;
        }
    }
    cout<<"Room number "<<index<<",with an area wich is "<<LargestArea<<" square metre is the largest room."<<"\n";
    system("pause >> NULL");
        return 0;
}
Avatar billede arne_v Ekspert
03. juli 2008 - 14:12 #1
Hm.

Nu vil jeg hævde at break og continue bruges en hel del i professionel C/C++ programering.

Både while(true) og for(;;) bruges og uden en break, så kører de længe.

Men det skader naturligvis ikke at lave tingene pænt !

:-)

Hvad med (pseudo code):

cont = true;
do
{
    // indlaes data1
    // indlaes data2
    // indlaes data3
    if data1, data2 og data3 er valid
    {
      // gør noget
    }
    else
    {
      cont = false;
    }
}
while(cont);
Avatar billede diyar Nybegynder
03. juli 2008 - 15:00 #2
Tak for dit svar, men inden du skrev, har jeg selv løst det på en anden måde, brugte godt nok god tid på det.

har løst det på den her måde:
    bool validNumber = false;
    while (validNumber == false){
        cout<<"\nEnter the width of the room number "<< numberOfRooms +1<< " or any letter for no more rooms: ";
        if (cin >> width){
            cout<<"\nEnter the length of the room number "<< numberOfRooms +1<< " or any letter for no more rooms: ";
        }
        if (cin >> length){

            //der oprets en ny room, fordi en bredde og en lengde er indlæst..
            numberOfRooms++;
            //jeg fordobler arrayet hvis array længde er mendre end antal værelse.
            if (numberOfRooms > size){
                tempArea = new double[2*size];
                //kopier fra gamle værdier til det ny array...
                for(int i=0;i< numberOfRooms-1; i++){
                    tempArea[i]=areas[i];
                }
                //indsæt det nyste værelse i den ny array
                tempArea[numberOfRooms-1]=width*length;
                //fjernelse af det gamle array
                delete[] areas;
                //den gamler array pointer peger på den ny
                areas = tempArea;
                //opdateres størrelse på arrayet
                size = 2*size;
            }
            else{
                areas[numberOfRooms-1]=width*length;
            }
            TotalArea += areas[numberOfRooms-1];
            cout<<"\nThe area of room number "<<numberOfRooms<< " is "<< areas[numberOfRooms-1]<<" square metre."<<"\n";
        }
        else {
            validNumber = true;
        }

    }
Avatar billede diyar Nybegynder
03. juli 2008 - 15:05 #3
eller er det måske ligesom din løsning!?

Men da du har brugt tid på at give et svar, så synes jeg at du skal have de 30 point, læg venligst et svar. :)
Avatar billede arne_v Ekspert
03. juli 2008 - 15:50 #4
Det er ikke helt det samme.

Jeg ville læse begge tallene (length og width) først og derefter teste på om de begge er valide.
Avatar billede arne_v Ekspert
03. juli 2008 - 15:50 #5
Et svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester