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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2016, 22:00   #1
99alinka
 
Регистрация: 04.09.2016
Сообщений: 4
По умолчанию Блок-схема ( но можно и программу в Паскаль или С++)

Здравствуйте! Помогите, пожалуйста, составить блок-схему по задаче или написать программу. Задача: даны 5 чисел a,b,c,d,e. Подсчитать, сколько раз встречается каждое число.
99alinka вне форума Ответить с цитированием
Старый 04.09.2016, 22:14   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Где встречаются?
p51x вне форума Ответить с цитированием
Старый 04.09.2016, 22:29   #3
99alinka
 
Регистрация: 04.09.2016
Сообщений: 4
По умолчанию Ответ р51х

Извините, но я уже несколько дней пытаюсь решить и выходит либо 60 развилок, либо 20, но с некорректным ответом. В задаче нужно подсчитать, сколько раз в ряду a,b,c,d,e повторяются числа. Т.е., если входные данные 2 5 2 5 2, то ответ нужно выдать соотношением 2:3, 5:2
99alinka вне форума Ответить с цитированием
Старый 05.09.2016, 01:40   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А как ты представляешь себе решение задачи?

Я хочу услышать от тебя "общее направление решения" без привязки к программированию (это мы сделаем потом).

Покажи ручной счет (шаг за шагом). Что делать?

Последний раз редактировалось ura_111; 05.09.2016 в 01:55.
ura_111 вне форума Ответить с цитированием
Старый 05.09.2016, 12:13   #5
Максай
Пользователь
 
Аватар для Максай
 
Регистрация: 21.07.2008
Сообщений: 40
По умолчанию

Цитата:
В задаче нужно подсчитать, сколько раз в ряду a,b,c,d,e повторяются числа. Т.е., если входные данные 2 5 2 5 2, то ответ нужно выдать соотношением 2:3, 5:2
Этот вариант программы работает при условии, что числа во входящем массиве находятся в диапазоне от 0 до 9:
Код:
#include <algorithm>
#include <iostream>

int main()
{
    // Создаём массив входных данных.
    int input_data[] = { 1, 1, 3, 7, 0, 0, 2, 2, 6, 9 };
    int input_data_size = sizeof(input_data) / sizeof(input_data[0]);

    // Считаем вхождения каждого числа.
    int counter[10];
    std::fill_n( counter, 10, 0 );
    for( int i = 0; i < input_data_size; i++ ) counter[input_data[i]]++;

    // Выводим результат.
    for( int i = 0; i < 10; i++ )
    {
        if( counter[i] )
        {
            std::cout << i << ':' << counter[i];
            if( i != 9 ) std::cout << ", ";
        }
    }
    std::cout << std::endl;

    return 0;
}
А этот вариант работает с любыми целыми числами:
Код:
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <map>
#include <vector>

int main()
{
    // Создаём массив входных данных.
    srand( time(NULL) );
    std::vector<int> input_data( 8 );
    std::generate( input_data.begin(), input_data.end(), rand );

    // Считаем вхождения каждого числа.
    std::map<int, int> counter;
    for( std::vector<int>::iterator
         it = input_data.begin(); it != input_data.end(); it++ )
    {
        std::pair< std::map<int, int>::iterator, bool > ret;
        ret = counter.insert( std::pair<int, int>(*it, 1) );
        if( ret.second == false ) ret.first->second++;
    }

    // Выводим результат.
    for( std::map<int, int>::iterator
         it = counter.begin(); it != counter.end(); it++ )
    {
            std::cout << it->first << ':' << it->second;
            if( std::distance(it, counter.end()) > 1 ) std::cout << ", ";
    }
    std::cout << std::endl;

    return 0;
}

Последний раз редактировалось Максай; 05.09.2016 в 12:56. Причина: Сначала написал, потом подумал.
Максай вне форума Ответить с цитированием
Старый 05.09.2016, 15:52   #6
99alinka
 
Регистрация: 04.09.2016
Сообщений: 4
По умолчанию

Спасибо, Максай. Но я все равно не могу составить схему, а в этом заключается главное задание. ura_111, можно использовать развилки if, цикл с предусловием и с постусловием. Если не считать длинного алгоритма, то у меня получился простой и короткий. Он рассматривает каждое число отдельно. Но в ответе повторяется. Т.е. если даны числа 2 5 2 5 2, то он выдает 2:2, 5:2, 2:2, 5:2, 2:2. Подскажите, как этого избежать или как построить другой алгоритм
Изображения
Тип файла: jpg IMG-1473014386277-V.jpg (84.0 Кб, 113 просмотров)
99alinka вне форума Ответить с цитированием
Старый 05.09.2016, 16:14   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

99alinka, мне кажется, что Вы стали заложницей задания, а конкретно фразы " 5 чисел a,b,c,d,e"...

Вы знаете, что такое массивы?
Допустимо вместо "a,b,c,d,e" воспользоваться массивом?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.09.2016, 17:50   #8
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Делаю тяп-ляп. Протестируй при разных значениях чисел (если чё - пиши).


1.jpg


Пока вставил код - заметил опечатку (поправь, выделил красным).

в месте:

Код:
	if (kol_d != -1)
	{
		cout << d << ":" << kol_e + 1 << endl;
	}

поправь на:


Код:
	if (kol_d != -1)
	{
		cout << d << ":" << kol_d + 1 << endl;
	}

Последний раз редактировалось ura_111; 05.09.2016 в 18:02.
ura_111 вне форума Ответить с цитированием
Старый 05.09.2016, 18:26   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

За такой говнокод надо бить и долго...
p51x вне форума Ответить с цитированием
Старый 05.09.2016, 20:09   #10
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

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

В принципе я мог бы написать сложнее (компактней, красивее) и уже начал это делать, но... Максай, ну какие "<algorithm>", ну какие "<vector>" - она даже слов таких не знает. Это ты мне можешь такое написать и я тебя пойму (заценю), а ей...

Раньше (напомню, я не давно на форуме) я тоже писал как Максай - по своему, но потом я подумал, что я подставляю студентов, - и после этого начал их расспрашивать что они знают, что проходили, на каком уровне развития в программировании находятся, и только после этого помогать студентам. Советую и Максай делать тоже самое.

Например. Если в имени "99alinka", "99" - это год рождения, тогда её сейчас 17 лет (эх, где мои 17-ть), первый курс, начало учебного года, первая лабораторная... Всё что успела пройти к этому времени - привела на блок-схеме... Мне кажется, логика моих дальнейших рассуждений понятна.


p.s.: Обрати внимание, я начал программы чисто в картинках выдавать. Это связано с тем, что пусть студенты "ручками поработают" может что-то и останется в голову (по принципу: шпаргалки писать можно, а пользоваться нет).

Последний раз редактировалось ura_111; 05.09.2016 в 20:12.
ura_111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен или код, или блок схема, или просто обьяснение. shewlett Помощь студентам 1 03.06.2015 16:34
Блок схема на программу DimaLord Помощь студентам 0 23.01.2014 17:02
Блок схема или алгоритм по шагам! sky-flame Помощь студентам 0 29.12.2012 10:46
блок схема на программу С++ dimitrijiyul Помощь студентам 0 08.11.2012 23:31
программа или блок-схема skycool Помощь студентам 3 23.01.2012 17:29