Cc++ — [Решено]Помочь разобраться с заданием


c++ — Помогите разобраться с заданием

Вообщем вот задание

Составить программу, которая будет записывать контейнер целых чисел в файл (текстовый или бинарный) читать целые числа из файла (текстового или бинарного) в контейнер Запись контейнера в файл ( template method ) должен содержать последовательность следующих операций открытие файла запись чисел закрытие файла Метод считывания ( template method ) из файла должен содержать последовательность следующих операций открытие файла Считывания чисел и добавления их в контейнер закрытие файла Использовать паттерн Шаблонный метод.

Тут проблема в том что запись и чтение 2 разные типа( ofstream и fstream ).И если в интерфейсе сделать один метод то потом при наследовании нельзя будет выбрать ofstream или ifstream а если сделать методы разные то тогда толку от этого паттерна. Вот код:

    5 1
  • 28 янв 2020 2020-01-28 12:41:49
  • Hadler2

1 ответ

Так как реализация метода doing может выполнять как запись так и чтение передача ссылки на std::ofstream не годится. Стандартная библиотека предоставляет класс std::fstream , который является слиянием std::ifstream и std::ofstream , то что нужно.

Далее, семантика методов doing (из Writer -а):

Этот код не выполняет то, что вы предполагаете. Вы берете адресс итератора it , что не имеет никакого отношения к данным, на которые указывает итератор. Нужно записывать не адресс итератора, а данные, которые он хранит.

Итератор это хорошо, но вам нужна работа с последовательностью. Должен быть передан итератор на начало и на конец последовательности.

Т.к. std::fstream работает как с потоками ввода, так и с потоками вывода, вам необходимо явно указывать для каких целей открывается поток: для ввода ( std::ios::in ) или для вывода ( std::ios::out ).

В данном отрезке кода: создается объект типа Writer (все сказанное также относится к Reader ). Выполняется операция взятия адресса, адресс записывается в массив arr и затем объект, адресс которого мы запомнили уничтожается. В результате получим висячий указатель.

Один из возможных корректных вариантов:

Base class

Writer class

Reader class

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

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

Задачи и решение. С++

На этой странице собраны все задачи по темам уроков, размещенных на нашем сайте. К каждой задаче прилагается наш вариант решения. Постарайтесь всё же решать их самостоятельно и только потом сравнивать наш исходный код со своим. “Хочешь научиться программировать – программируй”!

Больше практических заданий с решениями найдёте здесь.

Рекомендуем посетить Сайт для юных программистов – где вы найдете уроки по различным языкам программирования (в том числе для детей), 3D-моделированию, Linux и др.

Помогите разобраться с кодом программы на C++

Доброго времени суток!
Помогите пожалуйста разобраться с кодом программы на C++, завтра надо показать преподавателю, и объяснить что к чему. Пробовал разобраться сам, но не получается, времени уже нету, чтобы разбирать.
Очень надеюсь на вашу помощь!

[SIZE=»4″]Задача (на всякий случай, может кому пригодится):[/SIZE]
Предметный указатель организован в виде линейного списка.
Каждая компонента указателя содержит слово и номера страниц, на которых это слово встречается.
Количество номеров страниц, относящихся к одному слову, лежит в диапазоне от одного до десяти.
Написать программу, которая обеспечивает:
— начальное формирование предметного указателя;
— вывод предметного указателя;
— вывод номеров страниц для заданного слова.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.

Как стать программистом

Обучение основам программирования на C для чайников.

Страницы

Последние новости

YoungCoder теперь и на Stepikе. Записывайтесь: https://vk.cc/75rISy

Чтобы записаться на курс, необходимо зарегистрироваться на Степике: https://vk.cc/75rIC4

Это моя личная ссылка-приглашение на Stepik для вас. Регистрируясь по этой ссылке, записываясь на курсы и решая задачи, Вы помогаете автору данного сайта принять участие в конкурсе платформы Stepik! Подробности конкурса здесь: https://vk.cc/75rKuS

понедельник, 15 июля 2013 г.

Занятие 11. Одномерные массивы. Программирование для начинающих.

Прочитайте улучшенную версию этого урока «Одномерные массивы».

В новой версии:

  • Ещё более доступное объяснение
  • Дополнительные материалы
  • 9 задач на программирование с автоматической проверкой решения

Добрый день. Сегодня поговорим о массивах. Не будем тянуть быка за хвост, а сразу же возьмем его за рога. Вот представьте, вы хотите написать программу, которая будет вычислять среднее арифметическое ваших (или вашего чада) оценок за четверть/семестр. И при этом вы хотите не только посчитать среднее, а еще и по какому предмету, у вас максимальный средний балл, сколько пятерок получено за все предметы вместе взятые, и сколько неудов поставлено за весь период и много еще чего. Ясное дело все эти оценки надо где-то хранить. Можно конечно завести пару сотен переменных, придумать им всем разные названия, да еще и так, чтобы отличать в каких именно хранятся оценки по математике, а в которых по русскому. А как средний балл потом как считать? Складывать между собой 200 разных переменных и результат сложения делить на 200? Ну общая идея конечно такова, но в такой реализации её может исполнить только истинный мазохист. Но есть и хорошая новость для нас с вами. Для хранения больших объемов однотипной информации можно использовать массивы.

Как себе представить массив? Да легко. Можно считать, что массив это такая таблица, точнее один столбик (или одна строчка) некоторой таблицы. Возвращаясь к нашей задаче с оценками можно, это выглядело бы так.

Рис.1 Пример целочисленного массива оценок.

Кстати, запомните, в массиве могут храниться данные только одного типа. Т.е. нельзя в одном массиве хранить данные типа int и типа float. В примере выше, все данные в массиве целые числа. Это и понятно, так как оценок 3.7, 4.2, 2.73 не предусмотрено.

Теперь разберемся с тем, как объявить массив, как с ним работать и чем он может нам помочь.

Для начала научимся объявлять массив. Ничего нового тут нет, Америку сейчас я не открою.
Итак, внимание на экран.

Рис 2. Объявление массива

Как видите, объявление массива почти не отличается об объявления переменной. Точно так же сначала записывают типа данных, которые будут храниться в массиве. Далее следует имя будущего массива. А теперь, как говорится, десерт, а точнее именно то, что отличает массив от переменной. После имени массива в квадратных скобках пишут размерность массива. Размерность массива это количество данных, которые предполагается хранить в массиве. В нашем случае это 8. То есть мы предполагаем хранить в нашем массиве 8 элементов.

Пришло время рассказать еще об одной особенности массива. Каждый элемент массива имеет свой номер. И причем нумерация элементов начинается с нуля. Поэтому многие программисты, вероятно чувствуя свою элитарность начинают счет с нуля. Ну вы понимаете. =)))

Рис 3. Массив оценок

Кстати, это является не только поводом для шуток, но и для трудностей. Одной из самых распространенных ошибок, при работе с массивами является выход за пределы массива. Это когда у нас есть массив из 8 элементов, а мы пытаемся обратиться к элементу с номером 53. Как видите, размерность у нас 8, а последний номер элемента 7. Вроде бы ничего сложно, помни, что у тебя на один номер меньше, чем объявлял и всё. Но нет ошибались, ошибаются и будут ошибаться.

Теперь посмотрим как занести данные в массив, и как их оттуда извлечь.
Например, мы хотим сохранить данные в первый элемент массива ( помним, что это первый элемент это, элемент с цифрой 0).

Листинг 11.1
ochenka [0] = 4; // занести в нулевой элемент значение 4
printf( «%d » , ochenka[0]); // вывести значение хранящееся в // нулевом элементе

В общем и целом работа с отдельным элементом массива ничем не отличается от работы с обычной переменной. Элемент массива можно использовать везде, где вы использовали переменные. Единственно что нужно следить за типом данных, но это нужно делать и при работе с обычными переменными.

А теперь рассмотрим одну из задач, которые встречаются в ЕГЭ. Как будет выглядеть массив после выполнения следующей программы. Только не надо её переписывать в среду разработки, прокрутите программу ручками. Это называется компиляция в уме. Нарисуйте массив, и последовательно выполняйте операции, шаг за шагом.

for ( int i=0; i
A[i]=9-i;
for ( int i=0; i
k = A[i];
A[i] = A[9-i];
A[9-i] = k;
>
for ( int i=0; i
printf( «%d » , A[i]);
return (0);
>

Правильный ответ написан ниже, белым цветом.Выделите строку и сразу его увидите. Настоятельно вас прошу, проделать это упражнение самостоятельно, без помощи компьютера.
0 1 2 3 4 5 6 7 8 9

Вернемся на секундочку к нашему примеру, который мы описали в начале урока. Давайте таки найдем среднее арифметическое из оценок и посчитаем количество двоек например.

Результат выполнения данной программы представлен на следующем рисунке.

Рис 4. Программа вычисляющая средний балл и количество двоек.

Как видите, работа с массивами подразумевает неплохое владение операторами цикла. Редко используют лишь один какой-то элемент массива. Чаще изменения затрагивают все элементы массива, поэтому используются циклические конструкции. Работать же с конкретным элементом массива, приходится уже внутри цикла.

Хотел еще написать про основные алгоритмы, используемые при работе с массивами написать, но решил оставить это на следующий урок.

Резюме урока:

  • научились основным действия при работе с массивами: объявление массива из нескольких элементов, присвоение конкретному элементу некоторого значение.
  • попрактиковались выполнять программу в уме (на листочке)

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки

Вход Регистрация Donate FAQ Правила Поиск

Помогите разобраться, как работать с файлами на C++

На страницу Пред. 1 , 2 , 3 , 4 След.
Печатать страницу | Печатать всю тему Пред. тема | След. тема
Заслуженный участник

Программирование — это навык, и знакомством с темами не исчерпывается. Увы. Для него нужна практика, тренировка и опыт.

Не только. У вас проблемы с тем, чтобы вообще формулировать свои мысли на языке программирования, в достаточно строгом и связном виде, чтобы бездушная бездумная машина это кушала.

Например, кто за вас будет в строке

стоит в неправильном месте? Это всё ко вводу-выводу не имеет ни малейшего отношения, это расхлябанность и неаккуратность в мыслях и действиях, которая удаляется только практикой.

На всякий случай: у вас на вашем личном компьютере компилятор стоит? Или вы компилируете программы, только отсылая их на онлайновые олимпиадные сайты? Тесное личное общение с компилятором, его выдачей, и специализированным текстовым редактором не в последнюю очередь, многому бы вас научило.

Заслуженный участник

Заслуженный участник

Ну работать будет и то будет понятное дело. Зато с элсом будет работать для произвольного файла, где ищем цепочки нулей.

И всегда писать if-if ? По-моему тут не логика, а недостаток практики. Если ТС потренируется еще месяцок, то сам в подобном случае напишет else

Админ форума

i Тема перемещена из форума «Computer Science» в форум «Программирование»
Заслуженный участник

Я уже сказал, здесь — не значимо.

Да, в обычном программировании (как я уже и говорил). А здесь обсуждается олимпиадное . В олимпиадных тестах могут подсунуть файл, в котором будет 0 символов (или чисел, или строк — на что задача), но не подсовывают файл, который некорректен, не соответствует условиям задания. Это просто принятый стиль. Смысл олимпиады — решить задачу, которую, подразумевается, саму по себе решить сложно, а вовсе не заклеить все дыры, по нормам промышленного программирования.

Где я такое сказал? Писать надо так, как проще всего придумывается. Для Ubermensch на данный момент — if-if . Для вас — if-else . Главное, чтобы это быстро придумывалось, быстро в уме проверялось на правильность, и быстро записывалось. А считать, что это такой важный вопрос, как именно тут будут оформлены нюансы — это ошибка, которая как раз и повлечёт за собой потери времени, критичные на олимпиаде.

Последний раз редактировалось Pavia 02.08.2012, 20:16, всего редактировалось 1 раз.

По поводу того что писать if if или if else то лучше писать так как вам проще. Тоже на одной олимпиад решил только 1 задачу. На две других физически времени не хватила искал элегантное решения, а задачи были на перебор плюс ручками надо было написание 20 условий. Сложными они небыли, просто требовали много ручками написать и меньше думать.
Тогда многие решили по 1 задачи.

Заслуженный участник

Последний раз редактировалось Munin 02.08.2012, 20:24, всего редактировалось 2 раз(а).

Вообще, бывает, но обычно судей за это потом пинают долго и больно (а результаты иногда аннулируют). Принято все условия оговаривать в правилах конкретной олимпиады, и в условиях конкретной задачи, и не подсовывать некорректных тестов. Другое дело, если в условиях (или правилах) явно сказано , как программа должна реагировать на некорректный ввод — тогда, действительно, можно её помучить.

Файл может не содержать ни одного нуля или единицы, а сразу заканчиваться концом файла. По условиям, подразумеваемый результат выполнения — 0.

Входные данные
В первой строке входного файла INPUT.TXT записано натуральное число N (1 Alexu007

Последний раз редактировалось Alexu007 07.08.2012, 09:32, всего редактировалось 1 раз.

Удивляют участники олимпиады!, у которых непреодолимые затруднения вызывают запись-чтение в файл. Я уж не говорю про хотя-бы попытку отладить неверно работающую программу.

Если я правильно понял — удачное участие в олимпиаде позволяет поступить в ВУЗ без экзаменов. Господа преподаватели — готовьтесь к встрече нового студента.


Сейчас этот форум просматривают: нет зарегистрированных пользователей

C/c++ — [Решено]Помочь разобраться с заданием

Выпуск № 1067
от 07.05.2008, 05:35

Администратор: Калашников О.А.
В рассылке: Подписчиков: 483, Экспертов: 58
В номере: Вопросов: 46, Ответов: 56
Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>
Вопрос № 133.889
Здравствуйте, уважаемые эксперты! Пожалуйста, помогите решить следующую задачу конкретно на языке программирования C. Условие задачи: «Логическая функция ОдинРост(ГР) проверяет, есть ли в группе ГР хотя бы два человека одинакового роста (характеристики группы: <имя>, <пол, рост>)»
Отправлен: 24.04.2008, 05:38
Вопрос задал: Vesel4 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Vesel4!
Для этого необходимо сравнить попарно все элементы массива group по параметру роста. Если найдем хотя бы одно совпадение, то возвращаем истину. Если по окончанию прохода циклов таких не обнаружено, то возвращаем ложь. Пример написания программы смотрите в приложении.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 24.04.2008, 07:20
Оценка за ответ: 5
Комментарий оценки:
Качественно! Спасибо огромное!
Вопрос № 133.892
Здравствуйте. Помогите решить задачу

Даны две прямоугольные матрицы А и В. Определить- верно ли, что
А=В(транспонированной).

Отправлен: 24.04.2008, 06:09
Вопрос задал: Зыков Николай Павлович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Зыков Николай Павлович!
Для этого нужно осуществить проход по матрице А по строкам, сравнивая ее элементы с элементами матрицы В, проход по которой ведется по стоблцам. Если встречаем хотя бы одно расхождение, то возвращаем false. Если проход полностью выполнен то возвращаем true. Функцию смотрите в приложении.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 24.04.2008, 06:56
Вопрос № 133.977
Добрый день всем экспертам.
я сотворил программу которая должна найти максимум среди сумм диагоналей матрицы (правда максимум она пока не ищет ))) ) и должен идти подсчет времени работы алгоритма вычисления сумм диагоналей параллельной основной диагонали
подскажите пожалуйста как можно описать в программе квадратную матрицу например 1000 на 1000 элементов? матрица 100 на 100 работает нормально, а вот когда больше хочу сделать, прога виснет. И если несложно могли бы посмотреть как всетаки сделать чтобы она находила максимум среди сумм диагоналей.
за раннее благодарен

Приложение:

Отправлен: 24.04.2008, 16:53
Вопрос задал: Максим Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)
Отвечает: kool
Здравствуйте, Максим Сергеевич!
Нужно использовать динамическую память
см. приложение.
Удачи!

———
I am.

Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 24.04.2008, 18:33
Оценка за ответ: 5
Комментарий оценки:
Все получилось. спасибо огромное
Вопрос № 134.025
Здравствуйте, уважаемые эксперты. Прошу оказать мне помощь
в написании программы .
Задание:
Создать приложение Windows, позволяющее выполнять перевод вещественного числа из 18-ричной системы счисления в 12-ричную.
\ Желательно с комментариями (очень хочется разобраться в этом).
Отправлен: 24.04.2008, 21:11
Вопрос задал: BaJIbTeP (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Терсков Сергей
Здравствуйте, BaJIbTeP!
В приложении программа переводящая числа из различных систем счисления. Основа программы — это функция:

string change_calc_system(const string& number, int base_sys, int dest_sys, const string& digits_set)

На вход она принимает исходное число в системе счисления base_sys, и переводит его в систему dest_sys, и используя набор цифр digits_set.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 25.04.2008, 03:22
Оценка за ответ: 1
Вопрос № 134.031
Здравствуйте уважаемые эксперты. Прошу помочь в следующем вопросе. Нужно написать программу Змейка на языке Си (под Dos, не Си++), в игре должно быть реализовано несколько уровней сложности. Большое спасибо.
Отправлен: 24.04.2008, 21:38
Вопрос задал: Klassik1587 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Klassik1587!
В сети можно найти массу исходников для этой игры на разных языках. Например вот здесь (©sources.codenet.ru). Приложение для Windows, но переделать консольный вывод для ДОС большого труда не составит.
Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 25.04.2008, 03:43
Оценка за ответ: 4
Вопрос № 134.042
Здраствуйте,немоглибы вы мне помочь:мне надо перевести из пятнадцатиричной системы исчисления в десятичную только через цикл while
Отправлен: 24.04.2008, 22:34
Вопрос задал: Смирнов Сергей Александрович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Drumm3R
Здравствуйте, Смирнов Сергей Александрович!
вот код, компилировал в VC 6.0

Приложение:

Ответ отправил: Drumm3R (статус: 2-ой класс)
Ответ отправлен: 25.04.2008, 00:16
Оценка за ответ: 5
Вопрос № 134.047
Здравствуйте, уважаемые эксперты. Помогите пожалуйста в написании следующей программы:Дано натуральное число N >> (сообщений: )
Отвечает: shayen
Здравствуйте, Studentka23!
код в приложении компилировался на VS 2003. Для коректного отображения русских шрифтов в свойствах консоли необходимо выбрать шрифт Lucida Console

Приложение:

Ответ отправил: shayen (статус: 5-ый класс)
Ответ отправлен: 25.04.2008, 00:26
Оценка за ответ: 4
Вопрос № 134.111
Здравствуйте непоможите решить такую задачку: «перевод матрицы к треугольному виду».
Отправлен: 25.04.2008, 13:51
Вопрос задал: Смирнов Сергей Александрович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Терсков Сергей
Здравствуйте, Смирнов Сергей Александрович!
Определение (©ru.wikipedia.org) треугольной матрицы. Алгоритмы (©algolist.manual.ru) для матриц и систем линейных уравнений. Реализацию вашей задачи смотрите в приложении.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 05:54
Вопрос № 134.117
Здравствуйте.
Стоит задача ввести строку char с клавиатуры, вывести ее на экран и удалить в ней заданный символ.
Код следующий. Подпрограмма удаления вынесена в отдельную функцию. Но удаление символа проходит неправильно.
Подскажите, в чем ошибка.
Спасибо.

Приложение:

Отправлен: 25.04.2008, 14:41
Вопрос задала: Tanil (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Mitya86
Здравствуйте, Tanil!

Попробуйте так: см. приложение.

Приложение:

Ответ отправил: Mitya86 (статус: 4-ый класс)
Ответ отправлен: 25.04.2008, 14:54
Оценка за ответ: 5
Комментарий оценки:
с индексом в p[i]=s[++i]; вы правильно указали, но я сделала ошибку и за циклом while
Отвечает: Drumm3R
Здравствуйте, Tanil!
вот тут — «*p=’тут — «p[i]=s[i+1]» необходимо увеличить i.
Так же для выходного массива необходим отдельный указатель или индекс.
И ещё маленькое замечание, для вывода на экран строки необязательно выводить все символы по отдельности как для массива чисел, можно просто
cout 5
Комментарий оценки:
удаляет символ. но теперь вижу, что задачу надо формулировать по другому (взять более общий случай), потому, что если введенный символ не один, то размер и результирующей строки надо вычислить сначала. и цикл в функции для удаления символа менять надо. Пока не знаю как.
Отвечает: Терсков Сергей
Здравствуйте, Tanil!
Почему то никто из экспертов не указал на ваши очевидные ошибки, а именно проблемы с выделением и освобождением памяти. В этой строке:

char *tmp=new char[n-1];

вы выделяете блок памяти, указатель на котрый бесследно теряем здесь:

так как в функции char* del_char(char* s, char c), указатель char *p показывает на совершенно другой блок памяти. Плюс к этому память никак не освобождается. За этим всегда нужно следить, иначе затем большие проблемы при отладке неизбежны. Конечно данная программа небольших размеров, но все равно такого допускать нельзя.

Далее.. Основной цикл в функции работает неверно. Этим кодом вы вместо удаляемого символа поставите следующий за ним символ. Предложение эксперта Mitya86:
else p[i]=s[++i];
ни к чему хорошему не приведет, т.к. на месте удаляемых символов будут неинициализированные участки. Лучше сначала посчитать кол-во удаляемых символов и выделить блок памяти соответствующего размера, а затем уже переписать символы. И при это м не забывать про освобождение выделенной памяти. Рабочий вариант вашего задания смотрите в приложении..

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 28.04.2008, 04:42
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Только вы подробно объяснили и про память и про алгоритм. Я пыталась подсчитать число удаляемых символов используя strchr(s,c), но у вас понятнее. #include using namespace std; char * del_char(char *s, char c) < int count=0; char* r; for(r=s;r=strchr(r,c);r+=sizeof(c))++count; int p_len=strlen(s)-sizeof(c)*count+1; char *p=new char[p_len]; int i=0,j=0; while(s[i]!=\'\\0\')< if(s[i]!=c) p[j++]=s[i]; i++;>p[j]=\’\\0\’; return p;> int main()

Вопрос № 134.158
Написать программу по перемещению прямоугольника по экрану.
Отправлен: 25.04.2008, 18:37
Вопрос задал: Хой Алекснадр Валерьевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Dr_Andrew
Здравствуйте, Хой Алекснадр Валерьевич!
В приложении приведён один из вариантов решения. Вывод графики осуществляется с помощью библиотек Qt и OpenGL.
Для хранения координат вершин прямоугольника используем переменные — члены класса TOGLWidget, отвечающего, собственно, за отрисовку графики. В конструкторе этого класса происходит задание начальных значений вершин прямоугольника:
fX1 = -0.0f;
fY1 = -0.0f;
fX2 = -1.0f;
fY2 = -0.0f;
fX3 = -1.0f;
fY3 = -1.0f;
fX4 = -0.0f;
fY4 = -1.0f;
Также в конструкторе запускается таймер:
srand(time(NULL));
startTimer(nTIMER_INTERVAL);
В функции resizeGL происходит создание окна, в функции paintGL — отрисовка начального положения прямоугольника:
glBegin(GL_QUADS);
glColor3f(0.0f, 0.0f, 1.0f);

glVertex2f(fX1, fY1);
glVertex2f(fX2, fY2);
glVertex2f(fX3, fY3);
glVertex2f(fX4, fY4);
glEnd();
В качестве аргумента glVertex2f функция принимает начальные координаты вершин, заданные в конструкторе класса. Разумеется, поскольку будут изменяться лишь координаты X прямоугольника, можно было бы записать и так:
glVertex2f(fX1, -0,0f);
Но, возможно, Вы захотите реализовать движение прямоугольника и по вертикали.
Изменение координат X прямоугольника на величину смещения (const float fD = 0.1;) происходит по сигналу таймера:
void TOGLWidget::timerEvent(QTimerEvent*)
<
fX1 += fD;
fX2 += fD;
fX3 += fD;
fX4 += fD;

glVertex2f(fX1, fY1);
glVertex2f(fX2, fY2);
glVertex2f(fX3, fY3);
glVertex2f(fX4, fY4);
updateGL();
>
Поскольку проверка коллизии в программе не предусмотрена, прямоугольник постепенно «уплывает» за пределы окна.
P.S. Перед компиляцией добавьте в файл проекта строчку CONFIG += opengl

Приложение:

Ответ отправил: Dr_Andrew (статус: 10-ый класс)
Ответ отправлен: 26.04.2008, 00:57
Вопрос № 134.159
Написать программу,которая выполняет чтение из файла,и удаляет все комментарии из тела С-программы.
Отправлен: 25.04.2008, 18:38
Вопрос задал: Хой Алекснадр Валерьевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Терсков Сергей
Здравствуйте, Хой Алекснадр Валерьевич!
В языке С++ существуют два вида комментариев. Это комментарии языка С (/*текст*/). Они могут быть многострочными. И комментарии языка С++ (//текст). Такие комментарии бывают только однострочные. Задача состоит в поиске последовательностей символов между подстроками /**/ и //’ ‘. Реализация подобного поиска и удаления найденных подстрок находиться в приложении. Компилятор MS VS 2005.

Пример входного файла test.cpp:

using namespace std;

int main(int argc, char* argv[]) <

using namespace std;

int main(int argc, char* argv[]) <

using namespace std;

int main(int argc, char* argv[]) <

Вопрос № 134.252
Здравствуйте Эксперты. Я в С++ новичок, поэтому не могу понять одну вещь:
#include
using namespace std;

int main()
<
int b=68;
char c=’D’;
cout
using namespace std;

int main()
<
int b=131;
char c=’Г’;
cout >> (сообщений: )

Отвечает: mega
Здравствуйте, Olenev!

на кодировку русской буквы необходимо 8 бит, а на кодировку латиницы — 7 бит.

‘Г’ = 195(win-1251) = 11000011(bin).

Вспомните, как формируются знаковые числа: знаковый бит — самый старший, следовательно, преобразование (int)’Г’ его наследует (т.е. дополняет оставшиеся 24 разряда нулями или единицами, в зависимости от этого старшего бита).

Вот что получится, если это воспроизвести: 11111111111111111111111111000011.

Чтобы число со знаком привести к обычному виду, дополняем его инверсию до единицы, т.е not(11111111111111111111111111000011) + 1 = 111101 = 61

Вот и выходит, что 195 = -61.

Если не хотите такого результата, не используйте знаковые типы при выводе.

Ответ отправил: mega (статус: 4-ый класс)
Ответ отправлен: 26.04.2008, 16:06
Вопрос № 134.263
Как определить какие имена дисков в ОС соответствуют дискетам. По умолчанию это A и B, но ведь это можно менять. А мне в программе нужно, чтобы определенная функция выполнялась только для дискет.

Консольное приложение. BC 3.1++

Отправлен: 26.04.2008, 17:17
Вопрос задал: Warobushek (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: mega
Здравствуйте, Warobushek!

Ваш вопрос, скорее всего, относится к тематике WinApi

В приложении я выложил метод MediaIsFloppy, возвращающий true, только если данный путь определяет floppy-диск.

Использовать можно так:

MediaIsFloppy(_T(«\\.\A:»));
MediaIsFloppy(_T(«\\.\B:»));
MediaIsFloppy(_T(«\\.\PHYSICALDRIVE0»));
MediaIsFloppy(_T(«\\.\PHYSICALDRIVE1»));
.

здесь, я немного упростил реализацию: выбрал решение «от противного», т.е. если это не FixedMedia и не RemovableMedia, то floppy. И использовал малоинформативный метод. На самом деле, типов достаточно много, если есть желание, можете их все учесть, список приложен после метода.

Проверял на своих, получилось, что только floppy и поддерживает IOCTL_STORAGE_GET_MEDIA_TYPES, остальные либо заняты, либо не определяют свой тип.

Приложение:

Ответ отправил: mega (статус: 4-ый класс)
Ответ отправлен: 26.04.2008, 18:21
Вопрос № 134.275
Привет! Есть два вопроса.

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

У меня код есть, НО он отказывается воспринимать русские буквы. Т.е. английские увеличивает как надо, а русские оставляет как было.

2) Задание такое. Подсчитать количество слов в данной последовательности. Помогите сделать :)

Приложение:

Отправлен: 26.04.2008, 19:09
Вопрос задал: Tomas23 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: kool
Здравствуйте, Tomas23!
Для русских букв нужно свою функцию делать
(обычная таблица перекодировки), потому что
кто же знает кроме Вас в какой кодировке у
Вас русские буквы.
Удачи!

———
I am.

Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 26.04.2008, 20:02
Вопрос № 134.288
Здравствуйте.
Если можно, то хотел бы узнать где я могу скачать
среду программирования C++.
Будет лучше если это будет халява.
Отправлен: 26.04.2008, 19:55
Вопрос задал: Lm_ross (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Drumm3R
Здравствуйте, Lm_ross!

Microsoft Visual Studio 2005 Express
http://www.microsoft.com/express/

из проэктов с открытым исходным кодом наиболее популярны
CODE::BLOCKS
http://www.codeblocks.org/
DEV-C++
http://www.bloodshed.net/

Ответ отправил: Drumm3R (статус: 2-ой класс)
Ответ отправлен: 26.04.2008, 20:22
Отвечает: Kamerad
Здравствуйте, Lm_ross!

Здесь можно посмотреть Borland C++ 3.1

исправлена ссылка
——
• Отредактировал: Maxim V. Tchirkine (Академик)
• Дата редактирования: 27.04.2008, 04:13

Ответ отправил: Kamerad (статус: 2-ой класс)
Ответ отправлен: 27.04.2008, 00:42
Вопрос № 134.351
Здравствуйте,под скажите пожалуйста как соединить несколько маленьких программ в одну большую
Отправлен: 27.04.2008, 12:55
Вопрос задал: Smiti (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Виктор Пырлик
Здравствуйте, Smiti!

Всё зависит от того, в каком виде эти «маленькие программы» у вас имеются.
Если только в виде готовых программ и нет исходного кода, тогда, для этого надо или написать «главное» окошко (программу) в которой просто расположить кнопки /меню нажав/выбрав которые, просто будут запускаться «маленькие» программки.
Но при таком подходе, эти маленькие программы ни как не будут связаны между собой.
Или.. Если у вас есть множество программ, написанных вами, или вы имеете исходный код для них, то тогда каждую программу оформить в виде отдельных файлов — в которых будут собраны функции и из главной программы просто уже вызывать эти функции. Можно избавиться от множества, поместив всё в один файл, т.е. Файл исходного текста, в котором будут собраны только функции вызываемые из главной программы. В общем, это «кандидаты» для библиотеки.. В которые как правило, выносят отлаженные, отдельные функции, которые могут быть вызваны из любого приложения.

———
Если ничего не помогло — надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Профессионал)
Россия, Свердловская обл.
Тел.: +7(34386) 53-5-98
ICQ: 490191733
—-
Ответ отправлен: 27.04.2008, 13:16
Вопрос № 134.365
Здравтвуйте!
Функция, формирующая массив, каждый элемент которого равен минимальному из соответствующих значений двух других массивов — параметров.
Отправлен: 27.04.2008, 14:52
Вопрос задал: Ezhik (статус: Практикант)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Ross
Здравствуйте, Ezhik!

#define min(l,r) ((l) Доступно только то, что видимо (c) Б. Керниган

Ответ отправил: Ross (статус: Практикант)
Ответ отправлен: 27.04.2008, 19:56
Оценка за ответ: 5
Вопрос № 134.368
Привет! Напишите программу: Right (s,m). Выделение правой части строки s длинной m
Отправлен: 27.04.2008, 14:53
Вопрос задал: Иванов, Андрей, Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Ross
Здравствуйте, Иванов, Андрей, Сергеевич!

const char* Right(const char* s, unsigned int m)
< return (s + strlen(s) - m);
>
———
Доступно только то, что видимо (c) Б. Керниган

Ответ отправил: Ross (статус: Практикант)
Ответ отправлен: 27.04.2008, 19:48
Вопрос № 134.391
Решите задачу пожалуйста: Скопировать в другой файл по половине каждой строчки
Отправлен: 27.04.2008, 15:55
Вопрос задал: Иванов, Андрей, Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Иванов, Андрей, Сергеевич!
Решение вашей задачи смотрите в приложении. Компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 07:58
Вопрос № 134.462
Здравствуйте, уважаемые эксперты, помогите доделать курсовую работу, очень нужно.
Задан двунаправленный кольцевой список стран: название, столица, численность населени, занимаемая площадь суши, протяженность границ. Добавить в начало списка две страны и удалить из списка страны с численностью, меньше заданной. То есть,после того как добавляем сохраняем в файл, потом читаем с него и удаляем.

Приложение:

Отправлен: 28.04.2008, 07:45
Вопрос задал: Bear2008 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Терсков Сергей
Здравствуйте, Bear2008!
Вариант реализации вашего задания смотрите в приложении. Код, приведенный вами, не использовал ввиду полной его непригодности. Проект консольный, компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 29.04.2008, 06:19
Оценка за ответ: 5
Отвечает: Виктор Пырлик
Здравствуйте, Bear2008!

Вот реализация вашего задания — двунаправленный кольцевой список. Тут нет «раскраски».. только алгоритм:
Пишет и читает из файлов (имя вводится в программе)
Возможно выводить на экран весь список
Возможно добавлять в ручную
Возможно удалять по условию – количество населения..
Код полностью прокомментирован.
——————————-
Писалось в C++Builder 6, тестилось на Visual Studio 2005

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
———
Если ничего не помогло — надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Профессионал)
Россия, Свердловская обл.
Тел.: +7(34386) 53-5-98
ICQ: 490191733
—-
Ответ отправлен: 29.04.2008, 08:30
Оценка за ответ: 5
Вопрос № 134.468
Здравствуйте, как в Visual C++ 2005 написать консольную программу так, чтобы после ее запуска, окно не появлялось на секунду и исчезало, а оставалось. В С++ 6.0 такой проблемы не возникло с командой return 0;
Отправлен: 28.04.2008, 08:39
Вопрос задал: Новоселов Алексей Николаевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Терсков Сергей
Здравствуйте, Новоселов Алексей Николаевич!
Для этого можно воспользоваться функцией getch() из заголовочного файла conio.h. (Для MS VS 2005 _getch()). Просто вставьте ее вызов перед return 0; и программа будет ждать нажатия клавиши. Либо перед return 0; можно поставить system(«pause»). Команда останавливает консольный вывод и ждет от пользователя нажатия клавиши.
Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 28.04.2008, 08:50
Оценка за ответ: 5
Комментарий оценки:
Спасибо огромное))
Отвечает: Андрей Заплатин Алексеевич
Здравствуйте, Новоселов Алексей Николаевич!
Здравствуйте, Новоселов Алексей Николаевич!
в с++ существует такая функция getch(); она пишеться в конце перед return и ожидает когда пользователь нажмет любую клавишу,после этого выполняеться команда return и приложение заканчивает свою работу.Для работы этой функции необходимо подключать файл conio.h
в итоге все выглядит так #include
. ваш код.
getch();
return 0;
Ответ отправил: Андрей Заплатин Алексеевич (статус: 1-ый класс)
Ответ отправлен: 29.04.2008, 15:43
Вопрос № 134.498
Здравствуйте,помогите пожалуйста с программой,как написать в проге функцию для подсчета выйгрышных ходов.Заранее спасибо.
Отправлен: 28.04.2008, 12:23
Вопрос задал: Sashulya (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Dr_Andrew
Здравствуйте, Sashulya!
Поскольку Вы не указали для какой игры осуществляется подсчёт, то проверку условия выигрышного хода предоставляю написать Вам самому. В остальном — откомментированный код в приложении.

Приложение:

Ответ отправил: Dr_Andrew (статус: 10-ый класс)
Ответ отправлен: 28.04.2008, 15:21
Вопрос № 134.566
Здравствуйте уважаемые эксперты, просьба решить задачи с использованием C++ builder 6

Даны натуральное число N и ломаная линия, состоящая из N отрезков, заданных действительными числами
A1, L1, A2, L2, …, AN, LN, где Ai – угол наклона отрезка к положительному направлению горизонтальной полуоси, Li – длина отрезка (Li>=0). Найти координаты вершин ломаной линии, считая, что она начинается из точки с координатами (0, 0).

Отправлен: 28.04.2008, 19:36
Вопрос задал: Виктив Алексей Никифорович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Виктив Алексей Никифорович!
Задача решается следующим образом. Координаты каждой последующей точки находим как:

A(n).x = A(n-1).x + cos(angle)*length;
A(n).y = A(n-1).y + sin(angle)*length;

Где length — это длина текущего отрезка, а angle — угол его наклона. Реализация программы основанной на этих формулах смотрите в приложении. Компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 07:09
Оценка за ответ: 5
Комментарий оценки:
Отлично! Все прекрасно работает, очень благодарен за помощь!Хотелось бы получить решение других задач от вас.
Вопрос № 134.567
Здравствуйте уважаемые эксперты, просьба решить задачи с использованием C++ builder 6

Дана строка символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы внутри себя, будем называть словами. Определить, какие знаки препинания (точка, запятая, двоеточие, восклицательный и вопросительный знаки, дефис) встречаются в этой строке и сколько раз

Отправлен: 28.04.2008, 19:36
Вопрос задал: Виктив Алексей Никифорович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Виктив Алексей Никифорович!
Как разделяются символы в строке в данном случае неважно. Задача ведь стоит в подсчете кол-ва знаков препинания. Для этого ищем по всей строке знак и если находим, то увеличиваем значение счетчика. И так для всех знаков. Реализацию программы смотрите в приложении.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 06:31
Оценка за ответ: 5
Комментарий оценки:
Отлично! Все прекрасно работает, очень благодарен за помощь!Хотелось бы получить решение других задач от вас.
Вопрос № 134.570
Здравствуйте уважаемые эксперты, просьба решить задачи с использованием C++ builder 6

Дан файл координат точек на плоскости. Найти прямоугольную оболочку (координаты левого верхнего и правого нижнего углов), включающую в себя все эти точки. Стороны прямоугольной оболочки параллельны координатным осям.

Отправлен: 28.04.2008, 19:37
Вопрос задал: Виктив Алексей Никифорович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Виктив Алексей Никифорович!
Для этого необходимо найти среди точек минимальные значения координат x и y (это будут координаты левого нижнего угла), а также их максимальные значения (координаты правого верхнего угла). Реализацию программы смотрите в приложении.

Пример входного файла «Points.txt»
12.2 14.6
11.4 34.56
74.23 45.233

Вывод:
Point 0 :(12.2; 14.6)
Point 1 :(11.4; 34.56)
Point 2 :(74.23; 45.233)
In rectangle with corners : (11.4; 14.6), (74.23; 45.233) are contained all points


Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 07:39
Оценка за ответ: 5
Комментарий оценки:
Отлично! Все прекрасно работает, очень благодарен за помощь!Хотелось бы получить решение других задач от вас.
Вопрос № 134.647
Здраствуйте, помогите решить задачу пожалуйста:
Дано натуральное число N. Определить количество цифр в числе N.
Отправлен: 29.04.2008, 10:47
Вопрос задал: WhiteMatte (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Boriss
Здравствуйте, WhiteMatte!
Ну, это просто. Вот пример, как это можно сделать «в лоб». Может сами попробуете сделать через преобразование числа в строку?

———
Вывод — то место в тексте, где вы устали думать

Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: Мордовский госуниверситет, Саранск, Факультет Электронной Техники
WWW: Программирование на Паскале
—-
Ответ отправлен: 29.04.2008, 11:30
Оценка за ответ: 5
Вопрос № 134.649
Здраствуйте, помогите решить задачу пожалуйста:
Дана строка символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы внутри себя, будем называть словами. Подсчитать количество букв а в последнем слове строки.
Отправлен: 29.04.2008, 10:50
Вопрос задал: WhiteMatte (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, WhiteMatte!
Все достаточно просто. Читаем строку с конца пока не достигнем пробела или начала строки. Если текущий символ ‘a’, то увеличиваем соответствующий счетчик. Реализация программы в приложении.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 05:14
Вопрос № 134.653
Здраствуйте, помогите решите задачу пожалуйста:
Дан файл координат точек на плоскости. Переписать в файл G все точки, попадающие в окружность радиуса R и с координатами центра X,Y.
Отправлен: 29.04.2008, 10:56
Вопрос задал: WhiteMatte (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, WhiteMatte!
Для этого необходимо определить расстояние от точки до центра окружности. Формула следущая:

S = sqrt((p.x — c.x)^2 + (p.y — c.y)^2)

И если это расстояние меньше радиуса значит точка расположена в окружности. Реализацию программы смотрите в приложении.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 07:49
Вопрос № 134.709
Здравствуйте!Помогите пожалуйста написать программу вычисления объёма цилиндра.Заранее спасибо!
Отправлен: 29.04.2008, 17:02
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: )
Отвечает: Dr_Andrew
Здравствуйте, Vitaminka!
Константа M_PI, равная числу «пи» объявлена в заголовочном файле #include
В остальном — см. приложение.
P.S. Рекомендую ознакомиться с книгой «Культин Н.Б. C/C++ в задачах и примерах. — СПб: БХВ, 2001. — 288 с.»

Приложение:

Ответ отправил: Dr_Andrew (статус: 10-ый класс)
Ответ отправлен: 29.04.2008, 19:20
Оценка за ответ: 5
Комментарий оценки:
Dr_Andrew,oгромное спасибо за помощь!
Отвечает: Kamerad
Здравствуйте, Vitaminka!

#include
#include
#include //точно не помню но вроде здесь описан макрос числа ПИ=3.14
//можно и так #define PI 3.14
void main ()

Вопрос № 134.711
Здравствуйте!Помогите пожалуйста написать программу пересчёта расстояния из верст в километры(1 верста-1066,8 м.).Заранее спасибо!
Отправлен: 29.04.2008, 17:06
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: )
Отвечает: Dr_Andrew
Здравствуйте, Vitaminka!
А в чём сложность-то? Умножаем вёрсты на километры, выводим результат (код в приложении).

Приложение:

Ответ отправил: Dr_Andrew (статус: 10-ый класс)
Ответ отправлен: 29.04.2008, 19:04
Оценка за ответ: 5
Комментарий оценки:
Ещё раз спасибо!
Отвечает: Kamerad
Здравствуйте, Vitaminka!
#include
#include
#define versta 1066.8

cout 5
Комментарий оценки:
Спасибо за помощь!

Вопрос № 134.712
Здравствуйте!Помогите пожалуйста написать программу преобразования введённого с клавиатуры дробного числа в денежный формат.Например, число 12,5 должно быть преобразовано к виду 12 руб.50коп..Заранее спасибо!
Отправлен: 29.04.2008, 17:10
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Vitaminka!
Для этого необходимо отделить от числа его целую часть (это рубли) и дробную умноженную на 100 (это будут копейки). Реализация программы в приложении. Компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 04:47
Оценка за ответ: 5
Комментарий оценки:
Еще раз большое спасибо!Вы мне очень помогли!
Вопрос № 134.713
Здравствуйте!Помогите пожалуйста написать программу перевода времени и минут и секунд в секунды.Заранее спасибо!
Отправлен: 29.04.2008, 17:12
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Vitaminka!
Для этого можно воспользоваться формулой (часы*3600 + минуты*60 + секунды). Реализация программы в приложении. Компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 04:51
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо за помощь!
Вопрос № 134.714
Здравствуйте!Помогите пожалуйста написать программу,которая проверяет, делится ли на 3 введённое с клавиатуры целое число.Заранее спасибо!
Отправлен: 29.04.2008, 17:15
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: )
Отвечает: Dr_Andrew
Здравствуйте, Vitaminka!
Если число делится на другое число нацело (т.е. без остатка), то операция взятия остатка (%) будет возвращать ноль. Соответственно проверку этого условия для 3 — см. в приложении.

Приложение:

Ответ отправил: Dr_Andrew (статус: 10-ый класс)
Ответ отправлен: 29.04.2008, 18:51
Оценка за ответ: 5
Отвечает: Kamerad
Здравствуйте, Vitaminka!

#include
#include
#include

<
cout 5
Комментарий оценки:
Спасибо.

Вопрос № 134.715
Здравствуйте!Помогите пожалуйста написать программу,которая после введённого с клавиатуры числа (в диапазоне от 1 до 99), обозначающего денежную единицу,дописывает слово «копейка» в правильной форме.Например 5 копеек,41 копейка.Заранее спасибо!
Отправлен: 29.04.2008, 17:18
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Vitaminka!
Ваше задание решается следующим способом. Если число попадает в диапазон 11, 19 или его последняя цифра это 5, 6, 7, 8, 9, 0, то окончание будет «копеек». Если последняя цифра 1, то «копейка». И, наконец, если последняя цифра 2, 3, 4, то «копейки». Реализация программы в приложении. Компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 04:43
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое за помощь,как хорошо что есть люди,которые могут помочь!
Вопрос № 134.717
Здравствуйте!Помогите пожалуйста написать программу,которая выводит таблицу квадратов первых пяти целых положительных нечётных чисел.Заранее спасибо!
Отправлен: 29.04.2008, 17:20
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: )
Отвечает: Kamerad
Здравствуйте, Vitaminka!

#include
#include
#include

cout 5
Комментарий оценки:
Спасибо за помощь!

Отвечает: Терсков Сергей
Здравствуйте, Vitaminka!
Реализацию вашего задания смотрите в приложении. Компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 04:33
Оценка за ответ: 5
Комментарий оценки:
Спасибки за помощь.
Вопрос № 134.718
Здравствуйте!Помогите пожалуйста написать программу, которая вычисляет сумму первых n членов ряда:1,3,5,7. .Количество суммируемых членов ряда задаётся во время работы программы.Заранее спасибо!
Отправлен: 29.04.2008, 17:23
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Vitaminka!
Заданный вами ряд это арифметическая прогрессия с шагом 2. Подробную информацию об арифметической прогрессии смотрите здесь (©ru.wikipedia.org). Среди прочих, там есть формула суммы n первых членов прогрессий, что нам и необходимо. Реализацию программы смотрите в приложении. Компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 04:26
Оценка за ответ: 5
Комментарий оценки:
Пятёрка!Ну что ещё можно поставить человеку,который не отказал в помощи!
Отвечает: Kamerad
Здравствуйте, Vitaminka!
#include
#include

Вопрос № 134.719
Здравствуйте!Помогите пожалуйста написать программу,которая выводит таблицу значений функции y=(x-2)+(x+1).Диапазон изменения аргумента от -4 до 4, шаг приращения аргумента 0,5.Заранее спасибо!
Отправлен: 29.04.2008, 17:30
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Vitaminka!
Реализацию вашего задания смотрите в приложении. В цикле выполняется проход по диапазону (-4; 4) с шагом 0.5. Компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.04.2008, 05:00
Оценка за ответ: 5
Комментарий оценки:
Спасибо за помощь.
Вопрос № 134.720
Здравствуйте!Помогите пожалуйста написать программу,которая методом прямого выбора сортирует по убыванию введённый с клавиатуры одномерный массив.Заранее спасибо!
Отправлен: 29.04.2008, 17:32
Вопрос задала: Vitaminka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Kamerad
Здравствуйте, Vitaminka!
#include
#include
void main ()

<
int n,*mas;
int i,j,min,temp;
cout >n;

mas=new [n];
cout >mas[i];
>
________________________________
сортировка
________________________________

for (i = 0; i mas[j]) <
min = j;
>
>
temp = mas[i];
mas[i] = mas[min];
mas[min] = temp;
>

_____________________________
cout 5

Вопрос № 134.743
Здравствуйте уважаемые эксперты. Мне нужно создать Lib файл, но я не когда это не делал и не знаю как делать. Так что вот мой вопрос:
Как написать Lib файл и связать с ним h — ник? пожалуйста с примером.
Заранее спасибо.
Отправлен: 29.04.2008, 21:45
Вопрос задал: XeS (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: kool
Здравствуйте, XeS!
Этот файл является вспомогательным для
использования библиотек (*.dll). Поэтому создать
его из файла с исходным текстом можно или из
командной строки с использованием опций компилятора и
линковщика или прямо из среды программирования выбрав
в самом начале создание проекта для dll
Удачи!

———
I am.

Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 29.04.2008, 22:42
Вопрос № 134.853
Уважаемые эксперты . Огромная просьба помочь мне с решением заданий по динамическим массивам . ((( МЕНЯ МОГУТ ВЫГНАТЬ ИЗ ИНСТИТУТА ))) . Oчень очень нужна ваша помощь :( Простите за наглость НО ИНАЧЕ МЕНЯ ВЫПНУТ .
Вот сами заданиям (массивы должны быть динамические ):

Matrix9. Дана матрица размера M x N. Вывести ее элементы, расположенные в строках с четными номерами (2, 4, …). Вывод элементов производить по строкам, условный оператор не использовать.

Matrix16. Дана квадратная матрица A порядка M (M — нечетное число). Начиная с элемента A1,1 и перемещаясь против часовой стрелки, вывести все ее элементы по спирали: первый столбец, последняя строка, последний столбец в обратном порядке, первая строка в обратном порядке, оставшиеся элементы второго столбца и т. д.; последним выводится центральный элемент матрицы.

Matrix24|. Дана матрица размера M x N. В каждом столбце матрицы найти максимальный элемент.

Matrix28. Дана матрица размера M x N. Найти минимальный среди максимальных элементов ее столбцов.

Matrix44. Дана матрица размера M x N. Найти минимальный среди элементов тех строк, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные строки в матрице отсутствуют, то вывести 0.

Matrix54. Дана матрица размера M x N. Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.

Matrix69. Дана матрица размера M x N и целое число K (1 Ј K Ј N). После столбца матрицы с номером K вставить столбец из единиц.

Matrix96. Дана квадратная матрица A порядка M. Зеркально отразить ее элементы относительно главной диагонали (при этом элементы главной диагонали останутся на прежнем месте, элемент A1,2 поменяется местами с A2,1, элемент A1,3 — с A3,1 и т. д.).

Отправлен: 30.04.2008, 19:14
Вопрос задал: BaJIbTeP (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Kamerad
Здравствуйте, BaJIbTeP!

Программа к задаче Matrix24| находится в приложении.

Приложение:

Ответ отправил: Kamerad (статус: 2-ой класс)
Ответ отправлен: 01.05.2008, 01:18
Оценка за ответ: 5
Вопрос № 134.860
Help me,please. Составить программу на C++ Irina

1.В одномерном массиве,состоящем из n вещественных элементов,вычислить:
минимальный элемент массива;
сумму элементов массива,расположенных между первым и последним положительными элементами;

2.Подсчитайте количество элементов одномерного массива,которые совпадают со своим номером и минимальным элементом.

Очень надо. Заранее благодарна.

Отправлен: 30.04.2008, 20:24
Вопрос задала: Irina-19 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Терсков Сергей
Здравствуйте, Irina-19!
1.
Поиск минимального элемента.
Присваиваем переменной min значение первого элемента массива, а затем сравниваем с другими. Если текуший элемент меньше, то он и будет минимальным и т.д.
Сумма между первым и последним положительным элементом
В переменные l и заносим индексы первого и последнего элемента (каждый ищем в соответствующем цикле), а затем в еще одном цикле считаем сумму элементов между ними.
2.
В цикле проходим все элементы массива и сравниваем значение с нужным (номеров элемента i или минимальным min, найденным ранее). При совпадении увеличиваем счетчик count.

Реализация программы в приложении. Компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 04.05.2008, 06:44
Вопрос № 134.863
Составить программу вывода на экран всех натуральных чисел не превосходящих N и делящихся на каждое из своих цифр
Отправлен: 30.04.2008, 20:43
Вопрос задал: Викулин Степан Николаевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Ross
Здравствуйте, Викулин Степан Николаевич!

Вот решение.
Алгоритм:
Перебираем числа от 1 до N-1.
Для каждого числа получаем его цифры как остаток от деления на 10.
Если цифра равна 0 или число на нее не делится, значит число не подходит.

———
Доступно только то, что видимо (c) Б. Керниган

Ответ отправил: Ross (статус: Практикант)
Ответ отправлен: 02.05.2008, 14:18
Вопрос № 134.894
Всем привет! Напишите рекурсивную прогу, которая по заданым N и X вычисляет значения Полинома Лежандра:

Pn(x)=1,если n=0; x, если n=1; ((2n-1)xPn-1(x)-(n-1)Pn-2(x))/n, tckb n>=2

и печатает значение P0(x). Pn(x). Используйте примеры:

Входные данны
0 0
0 10
1 0,2
2 1
3 0,5

Выходные данны
1
1
1 0,2
1 111
1 0,5-0,125

Отправлен: 01.05.2008, 10:13
Вопрос задал: Иванов, Андрей, Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Виктор Пырлик
Здравствуйте, Иванов, Андрей, Сергеевич!

Код в приложении.

———
Если ничего не помогло — надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Профессионал)
Россия, Свердловская обл.
Тел.: +7(34386) 53-5-98
ICQ: 490191733
—-
Ответ отправлен: 01.05.2008, 16:50
Вопрос № 134.929
Уважаемые эксперты напишите пожайлуста комментарий к кадой строчке кода программы.

Код программы смотрите в приложении.

У меня было такое задание:

Разработать функцию: Add(constS:string):string,возвращающую строку, в котрой к S приписана она же в перевёрнутом виде. С помощью данной функции для каждой строки из введённого набора приписать её же в перевёрнутом виде.

Приложение:

Отправлен: 01.05.2008, 15:52
Вопрос задал: Королёв Александр Павлович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Макс Коваленко Юрьевич
Здравствуйте, Королёв Александр Павлович!
Сразу хотелось бы обратить внимание на то что стринг тип вы подключаете но не используете. И если вы правильно описали поставленною задачу то этот код будет выполнять немного другие действия. На вход в ф-и добавления мы подаём масив а. Вызываете вы как элемент в нём. Я не уверен что он будет работать. Но всё бывает =).

#include //для потока вывода
#include //для применения printf and scanf
#include //для подкоючения типа стринг

char* Add(char *s1) //ф-я возврощает строку. на вход ф-и тоже строка
<
int n=strlen(s1); //длина входной строки
for (int i = 0; i 5

Вопрос № 134.941
Есть программа (код) на Borland C++ Builder. Можно ли скомпилировать код для мобилника (для windows mobile)
Отправлен: 01.05.2008, 17:34
Вопрос задал: Goea goea
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Макс Коваленко Юрьевич
Здравствуйте, Goea goea!

Создание проэктов по Windows Mobile in C-Builder не предусмотрено. Вам необходимо подыскать другую IDE. Сам подобным не занимался. Ничего подсказать не могу.

Ответ отправил: Макс Коваленко Юрьевич (статус: 1-ый класс)
Ответ отправлен: 03.05.2008, 13:52
Вопрос № 134.963
Здравствуйте, уважаемые эксперты. Помогите написать программу, вычисляющая дату следующего дня на С++. Вид экрана во время работы программы в приложении. Заранее благодарен.

Приложение:

Отправлен: 01.05.2008, 21:36
Вопрос задал: Yakut (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: )
Отвечает: Denisss

Пример с комментариями находится в приложении.

Как стать программистом

Обучение основам программирования на C для чайников.

Страницы

Последние новости

YoungCoder теперь и на Stepikе. Записывайтесь: https://vk.cc/75rISy

Чтобы записаться на курс, необходимо зарегистрироваться на Степике: https://vk.cc/75rIC4

Это моя личная ссылка-приглашение на Stepik для вас. Регистрируясь по этой ссылке, записываясь на курсы и решая задачи, Вы помогаете автору данного сайта принять участие в конкурсе платформы Stepik! Подробности конкурса здесь: https://vk.cc/75rKuS

понедельник, 15 июля 2013 г.

Занятие 11. Одномерные массивы. Программирование для начинающих.

Прочитайте улучшенную версию этого урока «Одномерные массивы».

В новой версии:

  • Ещё более доступное объяснение
  • Дополнительные материалы
  • 9 задач на программирование с автоматической проверкой решения

Добрый день. Сегодня поговорим о массивах. Не будем тянуть быка за хвост, а сразу же возьмем его за рога. Вот представьте, вы хотите написать программу, которая будет вычислять среднее арифметическое ваших (или вашего чада) оценок за четверть/семестр. И при этом вы хотите не только посчитать среднее, а еще и по какому предмету, у вас максимальный средний балл, сколько пятерок получено за все предметы вместе взятые, и сколько неудов поставлено за весь период и много еще чего. Ясное дело все эти оценки надо где-то хранить. Можно конечно завести пару сотен переменных, придумать им всем разные названия, да еще и так, чтобы отличать в каких именно хранятся оценки по математике, а в которых по русскому. А как средний балл потом как считать? Складывать между собой 200 разных переменных и результат сложения делить на 200? Ну общая идея конечно такова, но в такой реализации её может исполнить только истинный мазохист. Но есть и хорошая новость для нас с вами. Для хранения больших объемов однотипной информации можно использовать массивы.

Как себе представить массив? Да легко. Можно считать, что массив это такая таблица, точнее один столбик (или одна строчка) некоторой таблицы. Возвращаясь к нашей задаче с оценками можно, это выглядело бы так.

Рис.1 Пример целочисленного массива оценок.

Кстати, запомните, в массиве могут храниться данные только одного типа. Т.е. нельзя в одном массиве хранить данные типа int и типа float. В примере выше, все данные в массиве целые числа. Это и понятно, так как оценок 3.7, 4.2, 2.73 не предусмотрено.

Теперь разберемся с тем, как объявить массив, как с ним работать и чем он может нам помочь.

Для начала научимся объявлять массив. Ничего нового тут нет, Америку сейчас я не открою.
Итак, внимание на экран.

Рис 2. Объявление массива

Как видите, объявление массива почти не отличается об объявления переменной. Точно так же сначала записывают типа данных, которые будут храниться в массиве. Далее следует имя будущего массива. А теперь, как говорится, десерт, а точнее именно то, что отличает массив от переменной. После имени массива в квадратных скобках пишут размерность массива. Размерность массива это количество данных, которые предполагается хранить в массиве. В нашем случае это 8. То есть мы предполагаем хранить в нашем массиве 8 элементов.

Пришло время рассказать еще об одной особенности массива. Каждый элемент массива имеет свой номер. И причем нумерация элементов начинается с нуля. Поэтому многие программисты, вероятно чувствуя свою элитарность начинают счет с нуля. Ну вы понимаете. =)))

Рис 3. Массив оценок

Кстати, это является не только поводом для шуток, но и для трудностей. Одной из самых распространенных ошибок, при работе с массивами является выход за пределы массива. Это когда у нас есть массив из 8 элементов, а мы пытаемся обратиться к элементу с номером 53. Как видите, размерность у нас 8, а последний номер элемента 7. Вроде бы ничего сложно, помни, что у тебя на один номер меньше, чем объявлял и всё. Но нет ошибались, ошибаются и будут ошибаться.

Теперь посмотрим как занести данные в массив, и как их оттуда извлечь.
Например, мы хотим сохранить данные в первый элемент массива ( помним, что это первый элемент это, элемент с цифрой 0).

Листинг 11.1
ochenka [0] = 4; // занести в нулевой элемент значение 4
printf( «%d » , ochenka[0]); // вывести значение хранящееся в // нулевом элементе

В общем и целом работа с отдельным элементом массива ничем не отличается от работы с обычной переменной. Элемент массива можно использовать везде, где вы использовали переменные. Единственно что нужно следить за типом данных, но это нужно делать и при работе с обычными переменными.

А теперь рассмотрим одну из задач, которые встречаются в ЕГЭ. Как будет выглядеть массив после выполнения следующей программы. Только не надо её переписывать в среду разработки, прокрутите программу ручками. Это называется компиляция в уме. Нарисуйте массив, и последовательно выполняйте операции, шаг за шагом.

for ( int i=0; i
A[i]=9-i;
for ( int i=0; i
k = A[i];
A[i] = A[9-i];
A[9-i] = k;
>
for ( int i=0; i
printf( «%d » , A[i]);
return (0);
>

Правильный ответ написан ниже, белым цветом.Выделите строку и сразу его увидите. Настоятельно вас прошу, проделать это упражнение самостоятельно, без помощи компьютера.
0 1 2 3 4 5 6 7 8 9

Вернемся на секундочку к нашему примеру, который мы описали в начале урока. Давайте таки найдем среднее арифметическое из оценок и посчитаем количество двоек например.


Результат выполнения данной программы представлен на следующем рисунке.

Рис 4. Программа вычисляющая средний балл и количество двоек.

Как видите, работа с массивами подразумевает неплохое владение операторами цикла. Редко используют лишь один какой-то элемент массива. Чаще изменения затрагивают все элементы массива, поэтому используются циклические конструкции. Работать же с конкретным элементом массива, приходится уже внутри цикла.

Хотел еще написать про основные алгоритмы, используемые при работе с массивами написать, но решил оставить это на следующий урок.

Резюме урока:

  • научились основным действия при работе с массивами: объявление массива из нескольких элементов, присвоение конкретному элементу некоторого значение.
  • попрактиковались выполнять программу в уме (на листочке)

Решения задач с «ACMP — Школа программиста»

На нашем сайте представлены решения задач по программированию с сайта acmp.ru на языке C++, по таким темам как:

  • Условные операторы и операторы цикла
  • Строковые типы данных, строки
  • Одномерные и двумерные массивы
  • Функции
  • Сортировки
  • Рекурсия
  • Целочисленная арифметика, длинная арифметика
  • Теория графов
  • Структуры данных
Номер задачи Название задачи Задача
1236 Транспонирование — 4 Транспонирование — 4

Задана целочисленная матрица, состоящая из N строк и M столбцов. Требуется транспонировать ее относительно горизонтали.

Первая строка входного файла INPUT.TXT содержит два натуральных числа N и M – количество строк и столбцов матрицы. В каждой из последующих N строк записаны M целых чисел – элементы матрицы. Все числа во входных данных не превышают 100 по абсолютной величине.

В выходной файл OUTPUT.TXT выведите матрицу, полученную транспонированием исходной матрицы относительно горизонтали.

141 Дерево Неориентированный граф без петель и кратных ребер задан матрицей смежности. Требуется определить, является ли этот граф деревом.

Во входном файле INPUT.TXT записано сначала число N — количество вершин графа (от 1 до 100). Далее записана матрица смежности размером N×N, в которой 1 обозначает наличие ребра, 0 — его отсутствие. Матрица симметрична относительно главной диагонали.

В выходной файл OUTPUT.TXT выведите сообщение YES, если граф является деревом, и NO в противном случае.

1 A+B A+B.

Требуется сложить два целых числа А и В.

В единственной строке входного файла INPUT.TXT записано два натуральных числа через пробел, не превышающих 109.

В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел А и В.

108 Неглухой телефон Неглухой телефон.

Возможно, что Вы когда то играли в игру «Глухой телефон», либо слышали о ней. В этой игре участникам приходится передавать информацию друг другу различными способами: словесно, образно, бывает даже приходится писать левой рукой текст, который другой участник команды должен будет прочитать. Так же известно, что практически никогда передаваемая информация не доходит до конечного адресата. Обозначим за Fi(x) функцию, которая преобразует текст передаваемой информации x в ту, которую получит участник i+1 от участника i. Тогда последний n-й участник получит данные y, которые будут выражаться следующей формулой:

Но Вам необходимо исключить какие-либо внешние факторы, которые могут исказить исходную информацию и Вы должны реализовать программу «неглухой телефон», которая сможет безошибочно доставлять исходные данные, т.е. в нашем случае функция Fi(x) = x для всех i от 1 до n-1.

В единственной строке входного файла INPUT.TXT записано натуральное число от 1 до 100.

В выходной файл OUTPUT.TXT нужно вывести в точности то же число, которое задано во входном файле.

903 Бисер Бисер.

В шкатулке хранится разноцветный бисер (или бусины). Все бусины имеют одинаковую форму, размер и вес. Бусины могут быть одного из N различных цветов. В шкатулке много бусин каждого цвета.

Требуется определить минимальное число бусин, которые можно не глядя вытащить из шкатулки так, чтобы среди них гарантированно были две бусины одного цвета.

Входной файл INPUT.TXT содержит одно натуральное число N — количество цветов бусин (1 ≤ N ≤ 109).

В выходной файл OUTPUT.TXT выведите ответ на поставленную задачу.

195 Эния Эния.

Неспокойно сейчас на стапелях шестого дока межгалактического порта планеты Торна. Всего через месяц закончится реконструкция малого броненесущего корвета “Эния”. И снова этому боевому кораблю и его доблестной команде предстоят тяжелые бои за контроль над плутониевыми рудниками Сибелиуса. Работа не прекращается ни на секунду, лазерные сварочные аппараты работают круглые сутки. От непрерывной работы плавятся шарниры роботов-ремонтников. Но задержаться нельзя ни на секунду.

И вот в этой суматохе обнаруживается, что термозащитные панели корвета вновь требуют срочной обработки сульфидом тория. Известно, что на обработку одного квадратного метра панели требуется 1 нанограмм сульфида. Всего необходимо обработать N прямоугольных панелей размером A на B метров. Вам необходимо как можно скорее подсчитать, сколько всего сульфида необходимо на обработку всех панелей “Энии”. И не забудьте, что панели требуют обработки с обеих сторон.

Во входном файле INPUT.TXT содержатся 3 целых положительных числа N (N ≤ 100), A (A ≤ 100), B (B ≤ 100)

В выходной файл OUTPUT.TXT нужно вывести единственное число – вес необходимого для обработки сульфида тория в нанограммах.

1109 Следующее и предыдущее Следующее и предыдущее.

Напишите программу, которая считывает целое число и выводит текст с упоминанием следующего и предыдущего для него чисел.

Входной файл INPUT.TXT содержит целое число, не превосходящее 1000 по абсолютной величине.

В выходной файл OUTPUT.TXT выведите текст, аналогичный приведенному в примере. При выводе следует учесть все пробелы и знаки препинания.

33 Два бандита Два бандита.

Бандиты Гарри и Ларри отдыхали на природе. Решив пострелять, они выставили на бревно несколько банок из-под кока-колы (не больше 10). Гарри начал простреливать банки по порядку, начиная с самой левой, Ларри — с самой правой. В какой-то момент получилось так, что они одновременно прострелили одну и ту же последнюю банку.

Гарри возмутился и сказал, что Ларри должен ему кучу денег за то, что тот лишил его удовольствия прострелить несколько банок. В ответ Ларри сказал, что Гарри должен ему еще больше денег по тем же причинам. Они стали спорить кто кому сколько должен, но никто из них не помнил сколько банок было в начале, а искать простреленные банки по всей округе было неохота. Каждый из них помнили только, сколько банок прострелил он сам.

Определите по этим данным, сколько банок не прострелил Гарри и сколько банок не прострелил Ларри.

В единственной строке входного файла INPUT.TXT записано 2 числа — количество банок, простреленных Гарри и Ларри соответственно.

В файл OUTPUT.TXT выведите 2 числа — количество банок, не простреленных Гарри и Ларри соответственно.

3 Пятью пять — двадцать пять! Пятью пять — двадцать пять!

Вася и Петя учатся в школе в одном классе. Недавно Петя поведал Васе о хитром способе возведения в квадрат натуральных чисел, оканчивающихся на цифру 5. Теперь Вася может с легкостью возводить в квадрат двузначные (и даже некоторые трехзначные) числа, оканчивающиеся на 5. Способ заключается в следующем: для возведения в квадрат числа, оканчивающегося на 5 достаточно умножить число, полученное из исходного вычеркиванием последней пятерки на следующее по порядку число, затем остается лишь приписать «25» к получившемуся результату справа. Например, для того, чтобы возвести число 125 в квадрат достаточно 12 умножить на 13 и приписать 25, т.е. приписывая к числу 12*13=156 число 25, получаем результат 15625, т.е. 1252=15625. Напишите программу, возводящую число, оканчивающееся на 5, в квадрат для того, чтобы Вася смог проверить свои навыки.

В единственной строке входного файла INPUT.TXT записано одно натуральное число А, оканчивающееся на цифру 5, не превышающее 4*105.

В выходной файл OUTPUT.TXT выведите одно натуральное число — A2 без лидирующих нулей.

1110 Последняя цифра Последняя цифра.

Требуется определить последнюю цифру натурального числа.

Входной файл INPUT.TXT содержит натуральное число, не превосходящее 109.

В выходной файл OUTPUT.TXT выведите последнюю цифру заданного числа.

1111 Число десятков Число десятков.

Требуется определить число десятков в заданном натуральном числе в его десятичной записи (то есть найти предпоследнюю цифру в числе).

Входной файл INPUT.TXT содержит натуральное число, не превосходящее 109.

В выходной файл OUTPUT.TXT выведите ответ на задачу.

1112 Сумма цифр числа Сумма цифр числа.

Найдите сумму цифр трехзначного натурального числа.

Входной файл INPUT.TXT содержит трехзначное натуральное число.

В выходной файл OUTPUT.TXT выведите сумму цифр заданного числа.

1038 Перевязь Перевязь.

Портос хочет украсить золотым шитьем свою перевязь. Он знает, что один сантиметр золотого шитья стоит один луидор. Портосу надо вышить N миллиметров перевязи. Причем мастер никогда не возьмется за работу, если ему заплатят меньше, чем стоит работа. И сдачу мастер никогда не отдает.

Какое минимальное количество луидоров Портос должен заплатить мастеру за работу?

Входной файл INPUT.TXT содержит натуральное число N (N ≤ 109) – длина перевязи в миллиметрах.

В выходной файл OUTPUT.TXT выведите минимальное количество луидоров, которые Портос должен отдать за работу.

1113 Проверьте делимость Проверьте делимость.

Даны два натуральных числа. Требуется проверить: делится ли одно из них на другое?

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

В выходной файл OUTPUT.TXT выведите 1, если одно из чисел делится на другое нацело. В противном случае следует вывести любое другое натуральное число, отличное от 1 и не превосходящее 109.

1115 Дележ яблок Дележ яблок.

N школьников желают разделить K яблок между собой. Они рассматривают два способа дележа:

разделить яблоки поровну так, чтобы каждому досталось максимальное количество яблок, при этом оставшиеся яблоки можно положить в корзину;
разделить все яблоки так, чтобы количество яблок, доставшихся любым двум школьникам, отличалось бы не более, чем на 1. В этом случае могут обидеться те из них, кому достанется яблок меньше, чем другим.
Входные данные

Входной файл INPUT.TXT содержит натуральные числа N и K – количество школьников и яблок соответственно (N,K ≤ 109).

В выходной файл OUTPUT.TXT выведите три целых числа через пробел:

количество яблок, которые достанутся всем школьником при первом способе дележа;
количество яблок, которые окажутся в корзине при первом способе дележа;
количество обиженных школьников во втором случае дележа.

1114 МКАД МКАД.

Длина Московской кольцевой автомобильной дороги —109 километров. Байкер Вася стартует с первого километра МКАД и едет со скоростью V километров в час. На какой отметке он остановится через T часов?

Первая строка входного файла INPUT.TXT содержит два целых числа V и T – скорость (км/ч) и время поездки в часах соответственно. Числа разделены пробелом. Если V>0, то Вася движется в положительном направлении по МКАД, если же значение V

1003 Магазин канцелярских товаров Магазин канцелярских товаров.

Однажды, посетив магазин канцелярских товаров, Вася купил X карандашей, Y ручек и Z фломастеров. Известно, что цена ручки на 2 рубля больше цены карандаша и на 7 рублей меньше цены фломастера. Также известно, что стоимость карандаша составляет 3 рубля. Требуется определить общую стоимость покупки.

В единственной строке входного файла INPUT.TXT записаны три натуральных числа X, Y и Z через пробел, каждое из которых не превышает 109.

В выходной файл OUTPUT.TXT выведите одно целое число – стоимость покупки в рублях.

773 Гулливер Гулливер.

Из книги Джонатана Свифта мы знаем, что тот Гулливер посетил страну «Лилипутию», где живут лилипуты, окруженные вещами, животными и заводами небольшого размера. Сначала лилипуты боялись Гулливера, но позже они поняли, что такое соседство приносит им большую выгоду, и они стали помогать ему. Например, лилипуты делали кровать для Гулливера из своих маленьких матрацев, сшитых вместе. Лилипутам были известны размеры Гулливера. Довольно быстро они смогли просчитать количество матрацев, необходимых для шитья большого матраца. Но у них постоянно возникали сложности с их небольшим ростом и стеля постель, они иногда не могли сшить достаточно толстый матрац.

Входной файл INPUT.TXT содержит два целых числа, которые разделены пробелом: K – коэффициент, отражающий во сколько раз Гулливер больше лилипутов, и M – количество слоев матрацев (2 ≤ K, M ≤ 100).

В выходной файл OUTPUT.TXT выведите количество матрацев лилипутов, необходимых для построения матраца для Гулливера.

92 Журавлики Журавлики.

Петя, Катя и Сережа делают из бумаги журавликов. Вместе они сделали S журавликов. Сколько журавликов сделал каждый ребенок, если известно, что Петя и Сережа сделали одинаковое количество журавликов, а Катя сделала в два раза больше журавликов, чем Петя и Сережа вместе?

В единственной строке входного файла INPUT.TXT записано одно натуральное число S – общее количество сделанных журавликов (S

1116 Разность времен Разность времен.

Даны значения двух моментов времени, принадлежащих одним и тем же суткам: часы, минуты и секунды для каждого из моментов времени. Известно, что второй момент времени наступил не раньше первого. Определите, сколько секунд прошло между двумя моментами времени. Программа на вход получает три целых числа – часы, минуты, секунды, задающие первый момент времени и три целых числа, задающих второй момент времени. Выведите число секунд между этими моментами времени.

Ledrunning ╔═(███)═╗

Electronics and coding

Типовые задачи по С++ для новичков (часть 4.1, указатели)

Всем привет! Наконец-то я добрался до написания очередной статьи, и в этот раз мы добрались до указателей! Сущность указателя проста, но понять ее достаточно сложно, но можно.

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

Адреса памяти классически указывают в шеснадцатиричном виде (HEX).

Практически все современные языки программирования являются безопасными, так как непосредственно напрямую работать с памятью ОЗУ персонального компьютера или гаджета они не позволяют, правда в некоторых языках, таких как C# такая возможность присутствует, если разработчик понимает всю ответственность за написанный код. Для того что бы работать непосредственно с памятью ОЗУ необходимо код поместить в блок unsafe <> и в настройках проекта установить галочку: «разрешить небезопасный код». Язык С++ это язык с богатой историей, наследник языка Си, в котором так же присутствовали указатели, они автоматически и перекочевали в плюсы оттуда. При прямой работе с памятью возрастает скорость работы приложения и ее КПД, но и процесс разработки таких программ очень сложный. В то время как в современных языках существует автоматический сборщик мусора, который автоматически следит за ненужными объектами в оперативной памяти и удаляет их по мере необходимости.

Указатель (англ. Pointer) — это такая же переменная, которую необходимо объявить, содержащая адрес ячейки памяти. Указатель не несет информации о содержимом объекта, а содержит сведения о том, где размещен объект, то есть его адрес. Указатель может ссылаться на переменную, зная ее физический адрес в памяти. Указатели широко используются в программировании на языке Си и С++. Особенно указатели помогают работать с массивами (передача указателя на массив в функцию) и динамическими массивами, когда по ходу программы мы не знаем размерность массива и можем изменять его.

Что бы объявить переменную указатель нам необходимо сделать так:

Как вы уже успели заметить, в объявлении присутствует оператор *; Так же обычно принято при именовании переменной указателя перед названием переменной писать приставку pt. Например: pt_var, pt_time, ptName и тд…
Существует еще один оператор для указателей, это & (амперсанд) или операция взятия адреса.

  • операция * (звездочка) — позволяет получить значение объекта по его адресу — определяет значение переменной, которое содержится по адресу, находящейся в указателе;
  • операция & (амперсанд) — позволяет определить адрес переменной.

При объявление можно использовать разный стиль, компилятор в любом случае поймет, что это указатель:

Попробуем применить оба оператора и напишем небольшую консольную программу в Visual Studio:

Если запустить нашу программу, то мы увидим следующее:

Число в шестнадцатиричном виде в консоли, являются адресом переменной int var. Размер указателя равен четырем байтам.

Теперь давайте немного изменим нашу программу:

Применив оператор * на 16 строчке на выходе мы получим уже не адрес переменной var, а ее конкретное значение, в данном случае 515. Такая операция называется разыменование указателя.

Давайте теперь попробуем произвести операцию сложения нашего pt_var указателя с обычной переменной значимого типа:

Как мы видим, значение pt_var изменилось на два пункта, так как мы и запланировали. А вот переменная var не изменилась:

Итак мы рассмотрели основные принципы указателя, ничего страшного не правда-ли? В конце первой части я снова вернусь к оперативной памяти компьютера.

ОЗУ, с которой работает программа, подразделяется на три вида: статическую, автоматическую и динамическую.

Статическая память — это область памяти, выделяемая при запуске программы до вызова функции main из свободной оперативной памяти для размещения глобальных и статических объектов, а также объектов, определённых в пространствах имён.

Автоматическая память (стек англ. Stack) — это специальный отдел памяти, который резервируется до вызова функции main из свободной оперативной памяти и используемый в дальнейшем для размещения локальных объектов: объектов, определяемых в теле функций и получаемых функциями через параметры в момент вызова (переменные, поля структур и тд.). И в этой области хранятся переменные значимого типа (примитивные типы: int, char, float, double и тд.)

Динамическая память (куча — англ. Heap) — это совокупность блоков памяти, выделяемых из доступной свободной оперативной памяти непосредственно во время выполнения программы под размещение конкретных объектов. В ней хранятся ссылочные типы и объекты классов. Для того, что бы выделить память в куче, в языке C++ (и не только) присутствует оператор new.

И вот тут проявляются определенные проблемы. Так как место в памяти мы выделили, объект там хранится на протяжении выполнении программы и постепенно эта самая память может переполнится, такой эффект называется утечкой памяти, так же существует еще одна проблема — фрагментация памяти. Примеры таких проблем вы можете посмотреть в первой статье цикла по С++. В языках Си и С++ программист сам должен следить за объектами для которых он выделяет память, и в случае необходимости удалять из памяти. Для этой цели в С++ служит оператор delete. Когда нам не нужен будет *pt_var, необходимо сделать операцию delete pt_var (Важно! Без оператора *) .

При первом запуске мы видим, что у нас какой-то мусор, после инициализации и выделения памяти, мы уже видим адрес в куче и значение:

Ну а после удаления в строке 16, мы снова получаем мусор в отладчике. А это значит что мы освободили память в куче для других объектов.

Ну как вам первое знакомство с указателями? Интересно? Тогда продолжение следует…

C/c++ — [Решено]Помочь разобраться с заданием

Войти через uID

Пользователи

Каталог статей
Главная » Статьи » Решение задач на C++ к лекциям
В разделе материалов : 91
Показано материалов : 1-10
Страницы : 1 2 3 . 9 10 »

1.Вычислить значения функции F при вещественных a, b, c, x, вводимых с клавиатуры.
2.Составить программу, которая печатает сообщение о принадлежности, если точка с координатами (х, у) принадлежит или не принадлежит заштрихованной области.
После выполнения задания 2 дополните программу циклом с оператором goto. В цикле с помощью оператора switch организуйте выбор: повторение или завершение программы.

Вычислить сумму ряда S с погрешностью эпсилон, задаваемой с клавиатуры.
Вывести количество итераций, сделанных при вычислении. Если вычислить сумму S с погрешностью эпсилон невозможно,
вывести сообщение и завершить выполнение программы.

Дано натуральное число N. Вычислить

Вычислить сумму ряда S с погрешностью эпсилон, задаваемой с клавиатуры.
Вывести количество итераций, сделанных при вычислении. Если вычислить сумму S с погрешностью эпсилон невозможно,
вывести сообщение и завершить выполнение программы.

Цукерберг рекомендует:  Создание контактной формы с каптчей
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих