Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2021, 17:16   #1
triangleproject
Новичок
Джуниор
 
Регистрация: 10.03.2021
Сообщений: 2
Восклицание Поиск ранга по убыванию

Добрый день. Имеется .csv файл. 1 колонка содержит имя, 2 - пол (М - мужчины, F - женщины), 3 - количество человек.
Задача в следующем: необходимо определить ранг указанного в тесте человека. 1 ранг присваивается наибольшему количеству человек (в файле имя Noah будет иметь первый ранг), соответственно чем меньше количество человек, тем больше ранг. Если количество человек повторяется в нескольких строках подряд, то ранг увеличивается.

В тесте указан Mason, выводимый результат должен быть равен 4, по итогу выполнения моего решения результат равен 3. Одно дело, если бы цифры были отсортированы по убыванию, то моё решение было бы рабочим. Но нужно найти решение в данном примере. Прошу помощи в дописании метода по возможности. Буду очень благодарен.

Код:
public int getRank (int year, String name, String gender) {
        FileResource fr = new FileResource("us_babynames_test/yob" + year + "short.csv");
        CSVParser parser = fr.getCSVParser(false);
        int rank = 1;
        for (CSVRecord rec : parser) {
            if (rec.get(1).equals(gender)) {
                if (rec.get(0).equals(name)) {
                    return rank;
                }
                rank++;
            }
        }
        return -1;
    }
public void testGetRank () {
        int year = 2013;
        String name = "Mason";
        String gender = "M";
        System.out.println("rank of the name in the file for the given gender: " + getRank (year, name, gender));
Содержимое файла yob2013short.csv :
Sophia,F,10
Emma,F,8
Olivia,F,8
Isabella,F,7
Ava,F,6
Liam,M,9
Jacob,M,8
Mason,M,8
William,M,7
Noah,M,12
triangleproject вне форума Ответить с цитированием
Старый 10.03.2021, 20:31   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,342
По умолчанию

C# не знаю, поэтому не могу сказать, есть ли более удобные методы решения. Можно пройтись по записям файла два раза. На первом проходе узнать количество человек с нужным именем. Если нужного имени нет, то вернуть -1. На втором проходе рассчитывать ранг: рассматривать записи только с нужным гендером, если количество больше сохраненного, то увеличить ранг; если количество равно, то сравнить имя записи с запрашиваемым именем - если меньше, то увеличить ранг. После полного прохода вернуть ранг.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.03.2021, 12:58   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,528
По умолчанию

Цитата:
Код:
        for (CSVRecord rec : parser) {
            if (rec.get(1).equals(gender)) {
                if (rec.get(0).equals(name)) {
                    return rank;
                }
                rank++;
            }
        }
        return -1;
вы посчитали ранг по тем кто был в списке ДО нужного человека.
а еще надо посчитать тех кто в списке после и при этом будет иметь высший ранг.
( в данном случае noah )
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 14.03.2021, 17:18   #4
triangleproject
Новичок
Джуниор
 
Регистрация: 10.03.2021
Сообщений: 2
По умолчанию

я ж спрашиваю как это в коде описать, алгоритм мне сам понятен.
triangleproject вне форума Ответить с цитированием
Старый 14.03.2021, 20:25   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,528
По умолчанию

Цитата:
я ж спрашиваю как это в коде описать, алгоритм мне сам понятен.
1.записать данный алгоритм в в виде псевдокода.
2.доработать запись до кода.

Цитата:
а еще надо посчитать тех кто в списке после и при этом будет иметь высший ранг.
не прерывать проверку как только встретили указанное имя, а ...
продолжить подсчет ПОСЛЕ того как встретили искомое имя, но вероятно уже по немного другому правилу.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Oтслеживание диапазона чисел и присвоение ранга при изменении. FINt09 Microsoft Office Excel 35 29.11.2017 08:17
Вычисление ранга матрицы методом окаймления миноров Proxaaa Помощь студентам 3 10.12.2016 16:11
помогите пожалуйста с кодом на с. функция ранга матрицы meggot Помощь студентам 1 15.07.2015 20:32
О вставке ранга EXCEL в документ WORD Aent Microsoft Office Word 0 27.09.2009 13:30