-2

Мне нужно было ответить на эти две задачи на первую(которая с номером 6) ответить получилось а вот вторую нет.

Задачи из книги Programming: Principles and Practice Using C++ (2nd Edition).

  1. Напишите программу, предлагающую пользователю ввести три целых числа, а затем выводящую их в порядке возрастания, разделяя запяты­ми. Например, если пользователь вводит числа 10, 4 и 6, то программа должна вывести на экран числа 4, 6, 10. Если два числа совпадают, то они должны идти одно за другим. Например, если пользователь вводит числа 4, 5, и 4, то программа должна вывести на экран 4, 4, 5.

  2. Выполните упр. 1 для трех строковых значений. Так, если пользова­тель вводит значения Steinbeck, Hemingway, Fitzgerald, то вывод программы должен имеет вид Fitzgerald, Hemingway. Steinbeck.

Вопрос в том если я ответил правильно на задачу. Вот код:

#include <iostream>
#include<string>
using namespace std;
int main()
{
string line1 = "Eroor\n", line2 = "Eroor\n", line3 = "Eroor\n";
cout << "Enter Line1\n";
cin >> line1;
cout << "Enter Line2\n";
cin >> line2;
cout << "Enter Line3\n";
cin >> line3;
if ((line1 < line3) && (line2 < line3)) {
    if (line1 < line2) {
        cout << line1 << "," << line2 << "," << line3 << endl;
    }
    if (line1 > line2) {
        cout << line2 << "," << line1 << "," << line3 << endl;
    }
    if (line1 == line2) {
        cout << line1 << "," << line1 << "," << line3 << endl;
    }
}
if ((line2 > line1) && (line2 > line3)) {
    if (line1 > line3) {
        cout << line3 << "," << line1 << "," << line2 << endl;
    }
    if (line1 < line3) {
        cout << line1 << "," << line3 << "," << line2 << endl;
    }
    if (line1 == line3) {
        cout << line1 << "," << line3 << "," << line2 << endl;
    }
}
if ((line2 < line1) && (line3 < line1)) {
    if (line2 < line3) {
        cout << line2 << "," << line3 << "," << line2 << endl;
    }
    if (line2 > line3) {
        cout << line2 << "," << line3 << "," << line1 << endl;
    }
    if (line2 == line3) {
        cout << line2 << "," << line3 << "," << line1 << endl;
    }
}
if((line1 == line2) && (line3 == line2) && (line2 == line1)) {
    cout << "All lines = " << line1 << "\n";
}
    system("pause");
    return 0;
}
jfs
  • 52,361

2 Answers2

2

Правильность кода может быть легче определить, если его упростить. Чтобы прочитать три слова, разделённых пробелами и вывести построчно в порядке возрастания, можно использовать сеть сортировки с картинки:

#include <algorithm>
#include <iostream>
#include <string>
using namespace std; 

int main() {
  string a, b, c;
  cin >> a >> b >> c;
  if (a > b) swap(a, b);
  if (a > c) swap(a, c);
  if (b > c) swap(b, c);
  cout << a << '\n'  << b << '\n' << c;
}

Вывод:

Fitzgerald
Hemingway
Steinbeck

Версия, которая нефиксированное количество слов сортирует:

#include <algorithm>
#include <iterator>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
  istream_iterator<string> words { cin }, eof;
  vector<string> v(words, eof);
  sort(v.begin(), v.end());
  copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
}

Вывод тот же. Чтобы другие типы поддерживать, достаточно string заменить.

jfs
  • 52,361
0

Тоже читаю этот учебник, сначала сделал как у тебя, потом решил попробовать покороче этот алгоритм написать, вышла каша, но рабочая:

#include "std_lib_facilities.h"
int main()
{
    while(true){
    cout << "\nPlease enter three numbers: ";
    int max, low, medu;
    int a, b, c;
    cin >> a >> b >> c;
    if (a>=b){
        medu = a;
        low = b;}
    else{
        medu = b;
        low = a;}
    if (c >= medu){
        max = c;}
    else{
        max = medu;
        if (c >= low){
            medu = c;}
        else{
            medu = low;
            low = c;}}
    cout << low << ' ' << medu << ' ' << max;}
} 

Для строк я просто меняю тип с int на string