gpt4 book ai didi

c++ - 将数据输入结构并对其进行排序

转载 作者:行者123 更新时间:2023-11-30 03:53:59 25 4
gpt4 key购买 nike

我创建了一个结构并创建了函数来在其上执行几项操作。我在使用 sortLength 函数时遇到了问题,因为当我运行程序时,只有长度中的数据被排序。其他一切都很好,虽然我想知道我的订单是否有点偏差,因为我使用的数组从 0 开始计数。我问我的教授澄清,他告诉我是否有这些(长度然后宽度)在数组中并使用逗号将它们清楚地分隔开

10,8       4,3       6,5      5,1       2,1      3, 2  

然后按长度排序,则数组为:

2 ,1    3,2     4, 3     5,1      6,5     10,8

但是,我没有得到我的输出。这是我得到的输出。

enter image description here

以下是 sortLength 函数的说明。

请注意,该函数将使用每个矩形的长度值(升序)进行排序。

您选择要使用的任何算法;气泡、选择或插入。

请记住,您正在对数组进行排序!


#include "stdafx.h"
#include <iostream>

using namespace std;

struct RECTANGLE
{
int length;
int width;
int area;
};

const int SIZE = 4;

// Function prototypes
void getValues(RECTANGLE[]);
void print(RECTANGLE[]);
int findMaxArea(RECTANGLE[]);
void sortLength(RECTANGLE[]);

int main()
{
RECTANGLE arrRect[SIZE];
//an array of type RECTANGLE

int whereMax; //where find max area

//put values to each element of array
getValues(arrRect);

cout << endl << endl;

//print out each element of array
print(arrRect);

whereMax = findMaxArea(arrRect);
//find where max area is

cout << endl;

cout << "Max area is " << arrRect[whereMax].area << " at position " << whereMax;

cout << endl;

sortLength(arrRect); //sort base on Length

cout << endl;

//print out each element of array
print(arrRect);

return 0;
}

/**
* Pre-Condition: This function accepts an array of type RECTANGLE.
* Post-Condition: It prompts the user for a length and width value
* and calculates the area.
*/
void getValues(RECTANGLE arrRect[])
{
//put values to each element of array
for (int i = 0; i<SIZE; i++)
{
cout << "\nEnter length and width : ";
cin >> arrRect[i].length >> arrRect[i].width;

arrRect[i].area = arrRect[i].length * arrRect[i].width;
//calculate area
}
}

/**
* Pre-Condition: This function accepts an array of type RECTANGLE.
* Post-Condition: It prints the data for length, width, and area.
*/
void print(RECTANGLE arrRect[])
{
//print out each element of array
cout << "Length Width Area" << endl;
for (int i = 0; i<SIZE; i++)
{
cout << arrRect[i].length << "\t\t" << arrRect[i].width << "\t"
<< arrRect[i].area << endl;
}
}

/**
* Pre-Condition: This function accepts an array of type RECTANGLE.
* Post-Condition: It returns an int which represents the position
* of the highest area in the data.
*/
int findMaxArea(RECTANGLE arrRect[])
{
int maxIndex = 0;
int max = arrRect[0].area;

for (int i = 0; i<SIZE; i++)
{
if (max < arrRect[i].area)
{
max = arrRect[i].area;
maxIndex = i;
}
}
return maxIndex;
}

/**
* Pre-Condition: This function accepts an array of type RECTANGLE.
* Post-Condition: It sorts the data in the array according to the
* length value.
*/
void sortLength(RECTANGLE arrRect[])
{
int temp;

for (int i = 0; i < (SIZE - 1); i++)
{
for (int j = i + 1; j < SIZE; j++)
{
if (arrRect[i].length > arrRect[j].length)
{
temp = arrRect[i].length;

arrRect[i].length = arrRect[j].length;

arrRect[j].length = temp;
}
}
}
}

最佳答案

您得到了意外的输出,因为您在排序时仅更改了 length 字段。

void sortLength(RECTANGLE arrRect[])
{
int temp;

for (int i = 0; i < (SIZE - 1); i++)
{
for (int j = i + 1; j < SIZE; j++)
{
if (arrRect[i].length > arrRect[j].length)
{
// ****** PROBLEM ******
// The lines below swap only the length field.
temp = arrRect[i].length;
arrRect[i].length = arrRect[j].length;
arrRect[j].length = temp;
}
}
}
}

你应该做的是交换整个对象。使用

void sortLength(RECTANGLE arrRect[])
{
// Make temp a RECTANGLE.
RECTANGLE temp;

for (int i = 0; i < (SIZE - 1); i++)
{
for (int j = i + 1; j < SIZE; j++)
{
if (arrRect[i].length > arrRect[j].length)
{
// Swap the entire object.
temp = arrRect[i];
arrRect[i] = arrRect[j];
arrRect[j] = temp;
}
}
}
}

关于c++ - 将数据输入结构并对其进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com