03. juli 2008 - 11:21Der 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; }
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; }
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.