В помощь программисту
язык программирования Питон Языки
Справочник по Питону
Олимпиада по программированию
Еще всероссийская олимпиада
Готовимся к областной олимпиаде
вызов из файла:
Open "aaa.txt" For Input As #1
Line Input #1, Stroka
Close #1
End Sub
это если что-то нужно считать. Для записи в файл в команде "Open" нужно указывать "For Print"
"#1" - это ячейка файла в папке, особо преобразуемый в VB адрес файла. То есть фактически
Как ни странно, программы в VB будут работать, даже если ячейку указать неправильно.
"aaa.txt" - полный путь к файлу, начиная от корневого каталога, заканчивая расширением файла.
Эта штука может не работать, если Вы обращаетесь к несуществующему файлу (например,
"On Error Resume Next"
а сама команда "Open" выглядеть как "Open App.Path & "\aaa.txt" For Output As #1"
"On Error Resume Next" нужна для обхождения ошибки при запросе несуществующего файла.
итого:
Private Sub что_нибудь()
On Error Resume Next
Open App.Path & "\aaa.txt" For Output As #1
Close #1
Text1.Text = "Создан файл aaa.txt"
End Sub
Например, если надо считать первую строку из какого-нибудь файла в переменную S, то код будет таким:
Dim MyFile 'Объявляем переменную для свободного файла
Dim S As String 'Переменная для хранения считанных данных
MyFile = FreeFile ' Присваиваем свободный канал, для работы с файлами
Open ("C:TEST.txt") For Input As #MyFile 'Открываем файл TEST.TXT для чтения
Line Input #MyFile, S 'Считываем первую строку из файла TEST.TXT в переменную S
Close #MyFile 'Закрываем файл
А если надо считать все данные из файла, то:
Dim MyFile 'Объявляем переменную для свободного файла
Dim S As String 'Переменная для хранения считанных данных
MyFile = FreeFile ' Присваиваем свободный канал, для работы с файлами
Open ("C:TEST.txt") For Input As #MyFile 'Открываем файл TEST.TXT для чтения
S = Input$(LOG(1), 1) 'Считываем весь файл в переменную S
Close #MyFile 'Закрываем файл
Для записи в файл существуют операторы Print #Номер_файла, Данные и Write #Номер_файла,
Данные. Отличает эти операторы только то, что Write записывает данные в кавычках, а Print без кавычек.
Ниже следующий код создаст на диске C: новый файл TEST.TXT и запишет в него две строки,
первую без кавычек, а вторую в кавычках:
Dim MyFile 'Объявляем переменную для свободного файла
MyFile = FreeFile ' Присваиваем свободный канал, для работы с файлами
Open ("C:TEST.txt") For Output As #MyFile 'Открываем файл TEST.TXT для записи
Print #MyFile, "Эта строка записана оператором Print, она без кавычек…"
Write #MyFile, "Эта строка записана оператором Write, она в кавычках…"
Close #MyFile 'Закрываем файл
Язык программирования Visual Basic
Module Module1 Sub Main() Dim c, V1, V2, x As String Dim n, m, x1, x2 As Integer Dim i As Integer V1 = "C:\Olymps\Entina\Entina1\Z1\Test16.txt" V2 = "C:\Olymps\Entina\Entina1\Z1\rez16.txt" FileOpen(1, V1, OpenMode.Input) : FileOpen(2, V2, OpenMode.Output) Input(1, n) Input(1, m) If n > m Then x1 = Int(n / 2) If n / 2 <> Int(n / 2) Then x1 = x1 + 1 x2 = m End If If m > n Or m = n Then x1 = Int(m / 2) If m / 2 <> Int(m / 2) Then x1 = x1 + 1 x2 = n End If Print(2, x1) Print(2, x2) FileClose(1) FileClose(2) End Sub End Module |
|||||||||||||
2Круглый стол
В клуб приходят на занятия m мальчиков и n девочек. Иван Петрович заметил, что мальчик активно участвует в обсуждении только тогда, когда непосредственно рядом с ним с обеих сторон от него сидят девочки, а девочка активно участвует в обсуждении только тогда, когда непосредственно рядом с ней с одной стороны от нее сидит мальчик, а с другой — девочка. Требуется написать программу, которая по заданным числам m и n выведет такой способ размещения m мальчиков и n девочек за круглым столом, при котором максимальное количество членов клуба будет активно участвовать в обсуждении. Module Module1 Sub Main() Dim c, V1, V2, x As String Dim n, m, x1, x2 As Integer Dim i As Integer V1 = "C:\Olymps\Entina\Entina2\Z2\test201.txt" V2 = "C:\Olymps\Entina\Entina2\Z2\rez201.txt" FileOpen(1, V1, OpenMode.Input) : FileOpen(2, V2, OpenMode.Output) Input(1, n) Input(1, m) FileClose(1) x1 = n x2 = m x = "" Do While n > 0 And m > 0 x = x + "B" n = n - 1 x = x + "G" m = m - 1 If m > 0 Then x = x + "G" If m > 0 Then m = m - 1 Loop If m = 0 And n > 0 Then For i = 1 To n x = x + "B" Next End If If n = 0 And m > 0 Then For i = 1 To m x = x + "G" Next End If Print(2, x) FileClose(2) End Sub End Module |
|||||||||||||
3Поврежденный XML
Формат XML является распространенным способом обмена данными между различными программами. Недавно программист Иванов написал небольшую программу, которая сохраняет некоторую важную информацию в виде XML-строки. XML-строка состоит из открывающих и закрывающих тегов. Открывающий тег начинается с открывающей угловой скобки (<), за ней следует имя тега — непустая строка из строчных букв латинского алфавита, а затем закрывающая угловая скобка (>). Примеры открывающих тегов: <a>, <dog>. Закрывающий тег начинается с открывающей угловой скобки, за ней следует прямой слеш (/), затем имя тега — непустая строка из строчных букв латинского алфавита, а затем закрывающая угловая скобка. Примеры закрывающихся тегов: </a>, </dog>. XML-строка называется корректной, если она может быть получена по следующим правилам: · Пустая строка является корректной XML-строкой. · Если A и B — корректные XML-строки, то строка AB, получающаяся приписыванием строки B в конец строки A, также является корректной · Если A — корректная XML-строка, то строка <X>A</X>, получающаяся приписыванием в начало A открывающегося тега, а в конец — закрывающегося с таким же именем, также является корректной XML-строкой. Здесь X — любая непустая строка из строчных букв латинского алфавита. Например, представленные ниже строки: <a></a> <a><ab></ab><c></c></a> <a></a><a></a><a></a> являются корректными XML-строками, а такие строки как: <a></b> <a><b> <a><b></a></b> не являются корректными XML-строками. Иванов отправил файл с сохраненной XML-строкой по электронной почте своему коллеге Петрову. Однако, к сожалению, файл повредился в процессе пересылки: ровно один символ в строке заменился на некоторый другой символ. Требуется написать программу, которая по строке, которую получил Петров, восстановит исходную XML-строку, которую отправлял Иванов. Формат входного файла. Входной файл содержит одну строку, которая заменой ровно одного символа может быть превращена в корректную XML-строку. Длина строки лежит в пределах от 7 до 1000, включительно. Строка содержит только строчные буквы латинского алфавита и символы «<» (ASCII код 60), «>»(ASCII код 62) и «/»(ASCII код 47). Строка во входном файле заканчивается переводом строки. Формат выходного файла. Выходной файл должен содержать корректную XML-строку, которая может быть получена из строки во входном файле заменой ровно одного символа на другой. Если вариантов ответа несколько, можно вывести любой. Примеры входных и выходных файлов
Система оценивания. Правильные решения для тестов, в которых одна буква заменена на другую букву, оцениваются из 50 баллов. Module Module1 Sub Main() Dim c, V1, V2, x As String Dim n, m, x1, x2 As Integer Dim i As Integer V1 = "C:\Olymps\Entina\Entina4\Z4\test401.txt" V2 = "C:\Olymps\Entina\Entina4\Z4\rez401.txt" FileOpen(1, V1, OpenMode.Input) : FileOpen(2, V2, OpenMode.Output) Input(1, n) Dim a(n) For i = 1 To n Input(1, a(i)) Next For i = 1 To n Print(2, a(i)) Next i FileClose(1) FileClose(2) End Sub End Module |
|||||||||||||
4 Игра с числами
Сегодня на уроке математики Петя и Вася изучали понятие арифметической прогрессии. Арифметической прогрессией с разностью d называется последовательность чисел a1, a2, …, ak, в которой разность между любыми двумя последовательными числами равна d. Например, последовательность 2, 5, 8, 11 является арифметической прогрессией с разностью 3. После урока Петя и Вася придумали новую игру с числами. Игра проходит следующим образом. В корзине находятся n фишек, на которых написаны различные целые числа a1, a2, …, an. По ходу игры игроки выкладывают фишки из корзины на стол. Петя и Вася делают ходы по очереди, первым ходит Петя. Ход состоит в том, что игрок берет одну фишку из корзины и выкладывает ее на стол. Игрок может сам решить, какую фишку взять. После этого он должен назвать целое число d ≥ 2 такое, что все числа на выбранных к данному моменту фишках являются членами некоторой арифметической прогрессии с разностью d, не обязательно последовательными. Например, если на столе выложены фишки с числами 2, 8 и 11, то можно назвать число 3, поскольку эти числа являются членами приведенной в начале условия арифметической прогрессии с разностью 3. Игрок проигрывает, если он не может сделать ход из-за отсутствия фишек в корзине или из-за того, что добавление любой фишки из корзины на стол приводит к тому, что он не сможет подобрать соответствующее число d. Например, если в корзине имеются числа 2, 3, 5 и 7, то Петя может выиграть. Для этого ему необходимо первым ходом выложить на стол число 3. После первого хода у него много вариантов назвать число d, например он может назвать d = 3. Теперь у Васи два варианта хода. 1) Вася может вторым ходом выложить фишку с числом 5 и назвать d = 2. Тогда Петя выкладывает фишку с числом 7, называя d = 2. На столе оказываются фишки с числами 3, 5 и 7, а в корзине осталась только фишка с числом 2. Вася не может ее выложить, поскольку после этого он не сможет назвать корректное число d. В этом случае Вася проигрывает. 2) Вася может вторым ходом выложить фишку с числом 7 и также назвать, например, d = 2. Тогда Петя выкладывает фишку с числом 5, называя также d = 2. Вася снова попадает в ситуацию, когда на столе оказываются фишки с числами 3, 5 и 7, а в корзине осталась только фишка с числом 2, и он также проигрывает. Заметим, что любой другой первый ход Пети приводит к его проигрышу. Если он выкладывает число 2, то Вася отвечает числом 7, и Петя не может выложить ни одной фишки. Если Петя выкладывает фишку с числом 5 или 7, то Вася выкладывает фишку с числом 2, и у Пети также нет допустимого хода. Требуется написать программу, которая по заданному количеству фишек n и числам на фишках a1, a2, …, an определяет, сможет ли Петя выиграть вне зависимости от действий Васи, и находит все возможные первые ходы Пети, ведущие к выигрышу. Формат входного файла. Первая строка входного файла содержит целое число n (1 ≤ n ≤ 200). Вторая строка содержит n различных целых чисел a1, a2, …, an (для всех i от 1 до n выполняется неравенство 1 ≤ ai ≤ 105). Соседние числа разделены ровно одним пробелом. Формат выходного файла. Первая строка выходного файла должна содержать число k — количество различных первых ходов, которые может сделать Петя, чтобы выиграть. Если Вася может выиграть вне зависимости от действий Пети, строка должна содержать цифру 0. Во второй строке должно содержаться k различных целых чисел — все выигрышные числа в порядке возрастания. Будем называть число выигрышным, если, выложив в качестве первого хода фишку, содержащую это число, Петя может выиграть вне зависимости от действий Васи. Соседние числа в строке должны быть разделены ровно одним пробелом. Примеры входных и выходных файлов
Пояснения к примерам. Первый пример рассматривается в тексте условия этой задачи. Во втором примере, какую бы фишку не выложил Петя первым ходом, Вася в ответ выкладывает другую фишку, и Петя не может сделать ход из-за отсутствия фишек в корзине. Система оценивания. Правильные решения для тестов, в которых 1 ≤ n ≤ 15, будут оцениваться из 40 баллов. Module Module1
Sub Main() Dim V1, V2, x As String Dim n, m, x1, x2, d, c As Integer Dim i As Integer V1 = "C:\Olymps\Entina\Entina4\Z4\test401.txt" V2 = "C:\Olymps\Entina\Entina4\Z4\rez401.txt" FileOpen(1, V1, OpenMode.Input) : FileOpen(2, V2, OpenMode.Output) Input(1, n) Dim a(n), b(n, n) For i = 1 To n Input(1, a(i)) Next FileClose(1) For i = 1 To n For j = 1 To n - 1 c = a(i) b(i, j) = a(i + j - 1) Next Next FileClose(2) End Sub End Module |
|||||||||||||
5Задача 5. Кондиционер Имя входного файла: Test5X.txt. Имя выходного файла: Result5X.txt. X = 01, 02, 1 - 20 Ограничение по времени: 2 секунды. Ограничение по памяти: 256 мегабайт. В офисе, где работает программист Петр, установили кондиционер нового типа. Этот кондиционер отличается особой простотой в управлении. У кондиционера есть всего лишь два управляемых параметра: желаемая температура и режим работы. Кондиционер может работать в следующих четырех режимах: · «freeze» — охлаждение. В этом режиме кондиционер может только уменьшать температуру. Если температура в комнате и так не больше желаемой, то он выключается. · «heat» — нагрев. В этом режиме кондиционер может только увеличивать температуру. Если температура в комнате и так не меньше желаемой, то он выключается. · «auto» — автоматический режим. В этом режиме кондиционер может как увеличивать, так и уменьшать температуру в комнате до желаемой. · «fan» — вентиляция. В этом режиме кондиционер осуществляет только вентиляцию воздуха и не изменяет температуру в комнате. Кондиционер достаточно мощный, поэтому при настройке на правильный режим работы он за час доводит температуру в комнате до желаемой. Требуется написать программу, которая по заданной температуре в комнате troom, установленным на кондиционере желаемой температуре tcond и режиму работы определяет температуру, которая установится в комнате через час. Формат входного файла Первая строка входного файла содержит два целых числа troom, и tcond, разделенных ровно одним пробелом (–50 ≤ troom ≤ 50, –50 ≤ tcond ≤ 50). Вторая строка содержит одно слово, записанное строчными буквами латинского алфавита — режим работы кондиционера. Формат выходного файла Выходной файл должен содержать одно целое число — температуру, которая установится в комнате через час. Примеры входных и выходных файлов Test501.txt, Test502.txtResult501.txt, Result502.txt 10 20 heat 20 10 20 freeze 10 Module Module1 Sub Main() Dim c, V1, V2, x As String Dim n, m, x1, x2 As Integer Dim i As Integer V1 = "C:\Olymps\Entina\Entina5\Z5\Test502.txt" V2 = "C:\Olymps\Entina\Entina5\Z5\rez502.txt" FileOpen(1, V1, OpenMode.Input) : FileOpen(2, V2, OpenMode.Output) Input(1, n) Input(1, m) Input(1, c) If n = m Then x1 = n If c = "fan" Then x1 = n If c = "freeze" Then If n > m Then x1 = m If n < m Then x1 = n End If If c = "heat" Then If n > m Then x1 = n If n < m Then x1 = m End If If c = "auto" Then x1 = m Print(2, x1) FileClose(1) FileClose(2) End Sub End Module 6 Праздничный ужин
Рядом с офисом компании, в которой работает программист Джон, открылось новое кафе. Директор компании решил провести там новогодний ужин. Меню праздничного новогоднего ужина в кафе состоит из k типов блюд. Для каждого типа блюда есть несколько вариантов на выбор. Всего есть a1 вариантов для первого типа блюда, a2 вариантов для второго типа блюда, и так далее, ak вариантов для k-го типа блюда. Всего, таким образом, предлагается a1×a2×…×ak различных заказов праздничного ужина.
|
|||||||||||||
Всего на ужине будут присутств |