Как найти максимальный double в массиве целых и двойных чисел (C ++)? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть массив: values ​​[], который заполняется целыми числами и удваивается в формате:

количество учеников, идентификатор ученика, количество оценок, класс 1 ... класс n, ...

То есть 2 1534 3 90,0 76,8 100,0 1245 1 99,0 будут интерпретироваться как 2 ученика, ученический идентификатор 1534 имеет 3 класса (90,0, 76,8, 100,0) и ученический идентификатор 1245 имеет 1 класс (99,0).

Мне нужно написать функцию, которая находит наибольшую оценку в этом массиве.Мой мыслительный процесс проходит по следующим направлениям:

double max_grade = -1.0;

for(int i = 0; i < size; ++i) {
    if(values[i] > max_grade){
       max_grade = values[i];
    }
}

, однако я думаю, что это будет сравнивать все значения в массиве, и я хочу сравнить только двойные значения.

Как проверить толькоудваивается в массиве, смешанном с удвоенными числами и целыми числами для наибольшего двойника?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019
double max_grade = -1.0;

for(int i = 0; i < size; ++i) {
    if(values[i] != int(values[i]) && values[i] > max_grade){
       max_grade = values[i];
    }
}

если значения [i] двойные (например, 5.2), то 5.2! = Int (5.2), потому что приведение типа int округляется вниз

, но если значения [i] целочисленные (например, 5.0)) затем 5.0 = int (5.0), поскольку округление до 5.0 аналогично 5.0

, поэтому, если мы хотим убедиться, что значения [i] являются двойными, нам нужно убедиться, что приведение значений [i] к«int» не будет равняться исходным значениям

. Поэтому я добавил это условие перед сравнением с максимальным значением (values ​​[i]! = int (values ​​[i]))

0 голосов
/ 19 февраля 2019

У меня есть массив: values ​​[], который заполняется целыми числами и удваивается

Hello Zari Case,

Прежде всего, не существует такой вещи, как"массивы смешанного типа" в C или C ++.Если вам нужно удваивать в вашем массиве, тогда вам нужен массив типа double , что означает, что все ваши элементы массива будут иметь тип double .

Ну, это неЭто не проблема, потому что вы можете представить целое число в десятичной форме, указав десятичное число 0 , например:

  • 5 -> 5.0
  • 1337 ->1337,0
  • 0 -> 0,0

и т. Д.

Итак, 2 1534 3 90,0 76,8 100,0 1245 1 99,0 будут интерпретироваться как 2 студента,У студента 1534 есть 3 класса (90,0, 76,8, 100,0), а у студента 1245 - 1 класс (99,0).

Если вам нужен такой точный синтаксис, вы можете быстро кодировать парсер , который пройдет через ваши записи и даст вам наивысшую оценку для каждого учащегося.
Полагаю, вам нужно что-то подобное (например, я добавил данные в ваш массив):

#include <stdio.h>

double highest_mark(double *mark_array, int number_of_marks)
{
    double max_grade = -1.0;
    for (int i = 0; i < number_of_marks; i++)
        if (mark_array[i] > max_grade)
            max_grade = mark_array[i];
    return max_grade;
}

int main()
{
    double student_info[] = {5.0, 1534.0, 3.0, 90.0, 76.8, 100.0, 1245.0, \
1.0, 99.0, 5555.0, 7.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 42.0, 2, 99.0, 98.0, \
1337.0, 1.0, 0.0};
    int number_of_students = (int)student_info[0], number_of_marks, student_id;
    int current_index = 1;

    printf("Number of students: %d\n---\n", number_of_students);
    while (number_of_students--) {
        student_id = student_info[current_index];
        number_of_marks = student_info[current_index + 1];
        printf("Student ID: %d\n", student_id);
        printf("Number of marks: %d\n", number_of_marks);
        for (int i = 0; i < number_of_marks; i++)
            printf("\tMark %d: %.1f\n", i + 1, student_info[current_index + i + 2]);
        printf("\t\tMax grade: %.1f\n", highest_mark(&student_info[current_index + 2], number_of_marks));
        current_index += (2 + number_of_marks);
    }

    return 0;
}

Это даст такой результат:

Number of students: 5
---
Student ID: 1534
Number of marks: 3
    Mark 1: 90.0
    Mark 2: 76.8
    Mark 3: 100.0
        Max grade: 100.0
Student ID: 1245
Number of marks: 1
    Mark 1: 99.0
        Max grade: 99.0
Student ID: 5555
Number of marks: 7
    Mark 1: 1.0
    Mark 2: 2.0
    Mark 3: 3.0
    Mark 4: 4.0
    Mark 5: 5.0
    Mark 6: 6.0
    Mark 7: 7.0
        Max grade: 7.0
Student ID: 42
Number of marks: 2
    Mark 1: 99.0
    Mark 2: 98.0
        Max grade: 99.0
Student ID: 1337
Number of marks: 1
    Mark 1: 0.0
        Max grade: 0.0

Не стесняйтесь спрашивать, есть ли у вас дополнительные вопросы или отмечать ваш квестИон как решено, если это помогло вам.

J.Smith

...