2 / 2 / 0
Регистрация: 05.06.2019
Сообщений: 82
1

Олимпиадная задача по программированию. PascalABC.NET. Задача L. Переключение между окнами

09.01.2020, 20:23. Показов 4334. Ответов 2
Метки нет (Все метки)

Когда пользователь работает в операционной системе Winux, у него часто запущено несколько приложений. Каждое из приложений работает в отдельном окне. Для переключения между окнами используется комбинация клавиш «Alt+Таb». Эта комбинация делает активным окно, в котором пользователь работал перед тем, как перейти в текущее активное окно.
Чтобы переключиться в другое окно, можно нажать клавишу «Ак» и затем, не отпуская ее, несколько раз нажать клавишу «Таb». Чтобы понять, какое окно станет активным после этого, воспользуемся следующей моделью. Пусть запущено п приложений. Приложения в операционной системе организованы в виде списка и упорядочены по убыванию времени последней активности. То есть приложение, окно которого является активным в настоящий момент — первое в списке, приложение, окно которого было активно перед этим — второе, и т. д.
Если нажать клавишу «Alt» и затем, не отпуская ее, нажать клавишу «Таb» к раз, то активным станет окно приложения, которое находится на (k mod n) + 1-м месте в списке. Здесь а mod b означает остаток от деления а на b. Иными словами, операционная система рассматривает список как циклический, переходя после последнего элемента списка к первому.
При запуске нового приложения оно добавляется в начало списка.
Задана последовательность действий пользователя, где каждое действие — либо запуск приложения, либо переключение между окнами. Выведите в выходной файл, в каком порядке пользователь работал с приложениями.


Входные данные:
Первая cтpoкa входного файла содержит целое число п — количество действий пользователя (1 <= n <= 1000). Следующие n строк содержат описание действий пользователя. Запуск приложения описывается строкой «Run ». Здесь «<имя приложения>» — строка из не более чем 100 латинских букв, цифр И пробелов. Она отделена от слова «Run» ровно одним пробелом. Все имена приложений различны,. Большие и маленькие буквы считаются различными.
Переключение между приложениями описывается строкой «Alt+Tab+...+Таb», здесь подстрока «+Таb» повторена в точности столько раз, сколько раз пользователь нажал клавишу «Таb», не отпуская клавишу «Alt». Это количество не превышает 100. Первая команда во входном файле — всегда команда «Run».

Выходные данные:
Выведите n строк — последовательность имен приложений, с которыми работал пользователь в порядке, в котором их окна становились активными.


Пример
Входные данные:
6
Run Mozilia Firefox
Run Free Pascal
Alt+Tab
Run Miranda IM
Alt+Tab+Tab
Alt+Tab+Tab+Tab

Выходные данные:
Mozilia Firefox
Free Pascal
Mozilia Firefox
Miranda IM
Free Pascal
Free Pascal


Подскажите, пожалуйста, правильно ли я написал программу?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var
  n, i: integer;
  s: string;
  apps: array of string[100];
  F_in, F_out: textfile;
 
procedure sor(index: integer);
var
  j: integer;
  a: array of string[100];
  
begin
  var sm: integer = apps.Length - index;
  
  SetLength(a, apps.Length);
  for j := 0 to apps.Length - 1 do
    a[j] := apps[j];
  
  for j := 0 to apps.Length - 1 do
  begin
    apps[j] := a[(j + sm) mod (apps.Length - 1)];
  end;
  writeln(a);    
end;
 
function count_plus: integer;
begin
  for var j := 1 to Length(s) do
    if s[j] = '+' Then
      count_plus += 1; 
end;
 
begin
  Assign(F_in, 'input1.txt');
  Assign(F_out, 'output1.txt');
  
  Reset(F_in);
  Rewrite(F_out);
  
  readln(F_in, n);
  for i := 0 to n - 1 do
  begin
    readln(F_in, s);
    if Pos('Run ', s) <> 0 Then
    begin
      SetLength(apps, length(apps) + 1);
      apps[length(apps) - 1] := Copy(s, 5, length(s) - 4); //получение строки
      if length(apps) > 1 Then
        sor(length(apps) - 1)
      else
        writeln(F_out, apps[length(apps) - 1]);
    end
    else
    begin
      if Pos('Alt', s) <> 0 Then
      begin
        var index: integer = count_plus mod length(apps);
        sor(index);  
      end;
    end;
  end;
  CloseFile(F_in);
  CloseFile(F_out);
end.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2020, 20:23
Ответы с готовыми решениями:

Олимпиадная задача по программированию. PascalABC.NET. Задача С. Считалка
Ирочка попросила маму придумать новую считалочку. Мама тут же ей &quot;выдала&quot;. Пусть в кругу N...

Олимпиадная задача по программированию. PascalABC.NET
Здравствуйте, я готовлюсь к школьной олимпиаде по информатике, не могу решить задачу (85 баллов из...

Олимпиадная задача по программированию. PascalABC.NET
Вася с Петей и Колей заработали много денег. Чтобы не мучиться с дележкой, они решили, что сначала...

Олимпиадная задача по программированию. PascalABC.NET
Найти количество целых решений, удовлетворяющих неравенству: A ≤ B*x + C ≤ D. Формат ввода В...

2
79 / 32 / 10
Регистрация: 14.06.2019
Сообщений: 516
10.01.2020, 07:34 2
Проверьте на примерах
1
Status 418
2011 / 1162 / 367
Регистрация: 26.11.2017
Сообщений: 3,205
Записей в блоге: 1
10.01.2020, 12:31 3
Лучший ответ Сообщение было отмечено sadfasfsad как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
begin
  Reset(input, 'input.txt');
  var a := new List<string>;
  var p := 0;
  loop ReadlnInteger do
  begin
    var s := ReadString;
    if s.StartsWith('Run') then
    begin
      a.Add(s[5:]);
      p := a.Count - 1;
    end
    else
      p := (p + s.Count(i -> i = '+')) mod a.Count;
    a[p].Println
  end
end.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2020, 12:31

Олимпиадная задача по программированию
Помогите написать программу для решения следующей задачи (из Всесибирской Открытой Олимпиады...

Олимпиадная задача по программированию: Таджикские имена
Отсортировать N слов по алфавиту. Разделить по группам те которые заканчиваются на &quot;хон&quot;,...

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

Переключение между окнами
Здравствуйте. Недавно начал изучать Qt. Создал 2 MainWindow окна (соответственно 2 ui файла и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.