Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 10.05.2016
Сообщений: 16

Рассортировать даты в порядке возрастания

18.05.2016, 21:17. Показов 551. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан перечень дат (формат-"21 сентября 1982г."). Рассортировать эти даты в порядке возрастания (данные -вводятся с клавиатуры )

Добавлено через 2 минуты
QBasic/QuickBASIC
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
CLS 
 
'Создаем тип для списка дат 
TYPE DataType 
day AS INTEGER 
TextMonth AS STRING * 100 'Просто с запасом :) 
month AS INTEGER 
year AS INTEGER 
END TYPE 
 
INPUT "Vvedite kolichestvo dat: ", n 
PRINT "Format - 1 January 2000" 
 
DIM spisok(n) AS DataType 
 
FOR i = 1 TO n 
DO 
'Ввод даты 
PRINT : PRINT "("; i; ") "; 
INPUT "Vvedite datu: ", DATA$ 
DATA$ = LTRIM$(RTRIM$(DATA$)) + " " 'Пробел в конце - для удобства последующего разделения на число/месяц/год 
l = LEN(DATA$) 
InputTo = 1 
lastJ = 1 
correct = 1 
 
'Разделение даты на число/месяц/год 
'Учтено, что при вводе они могли разделяться более, чем одним пробелом 
FOR j = 1 TO l 
IF MID$(DATA$, j, 1) = " " THEN 
IF MID$(DATA$, j - 1, 1) <> " " THEN 
SELECT CASE InputTo 
CASE 1 
spisok(i).day = VAL(MID$(DATA$, lastJ, j - lastJ)) 
CASE 2 
spisok(i).TextMonth = MID$(DATA$, lastJ, j - lastJ) 
CASE 3 
spisok(i).year = VAL(MID$(DATA$, lastJ, j - lastJ)) 
END SELECT 
InputTo = InputTo + 1 
END IF 
lastJ = j + 1 
END IF 
NEXT j 
 
'Это самая нудная часть - преобразование месяца из текста в его номер, определение числа дней в нем 
SELECT CASE RTRIM$(spisok(i).TextMonth) 
CASE "January" 
spisok(i).month = 1 
maxday = 31 
CASE "February" 
spisok(i).month = 2 
maxday = 29 
CASE "March" 
spisok(i).month = 3 
maxday = 31 
CASE "April" 
spisok(i).month = 4 
maxday = 30 
CASE "May" 
spisok(i).month = 5 
maxday = 31 
CASE "June" 
spisok(i).month = 6 
maxday = 30 
CASE "July" 
spisok(i).month = 7 
maxday = 31 
CASE "August" 
spisok(i).month = 8 
maxday = 31 
CASE "September" 
spisok(i).month = 9 
maxday = 30 
CASE "October" 
spisok(i).month = 10 
maxday = 31 
CASE "November" 
spisok(i).month = 11 
maxday = 30 
CASE "December" 
spisok(i).month = 12 
maxday = 31 
CASE ELSE 
correct = 0 'Других месяцев просто нет, значит что-то введено не так
END SELECT 
 
'Проверка введенных значений - вдруг дней больше, чем может быть в месяце, или же ввели отрицательное число 
IF spisok(i).year < 0 THEN correct = 0 
IF spisok(i).day > maxday OR spisok(i).day <= 0 THEN correct = 0 
 
'Если дата введена не верно, сообщим об этом пользователю 
IF correct = 0 THEN COLOR 4: PRINT "Data vvedena neverno!": COLOR 7 
 
LOOP WHILE correct = 0 'Будем повторять ввод, пока не добьемся верной даты 
NEXT i 
 
'Сортировка списка дат 
FOR i = 1 TO n - 1 
MinYear = spisok(i).year 
MinMonth = spisok(i).month 
MinDay = spisok(i).day 
MinJ = i 
FOR j = i TO n 
IF (spisok(j).year < MinYear) OR (spisok(j).year = MinYear AND spisok(j).month < MinMonth) OR (spisok(j).year = MinYear AND spisok(j).month = MinMonth AND spisok(j).day < MinDay) THEN 
MinYear = spisok(j).year 
MinMonth = spisok(j).month 
MinDay = spisok(j).day 
MinJ = j 
END IF 
NEXT j 
SWAP spisok(i), spisok(MinJ) 
NEXT i 
 
'Последний рубеж - вывод упорядоченного списка на экран 
CLS 
FOR i = 1 TO n 
PRINT spisok(i).day; RTRIM$(spisok(i).TextMonth); spisok(i).year 
NEXT i
Есть вот такие данные,но программа выдает ошибку в 20 строчке
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2016, 21:17
Ответы с готовыми решениями:

Рассортировать заданные даты в порядке возрастания
Дан перечень дат (формат - &quot;21сентября 1982г.&quot;) Рассортировать эти даты в порядке возрастания (данные - даты водятся с клавиатуры...

Рассортировать слова исходной фразы a$ по алфавиту в обратном порядке
помогите плиз прогу составить Рассортировать слова исходной фразы a$ по алфавиту в обратном порядке.Информация вводиться с клавиатуры.

Элементы главной диагонали расположить в порядке возрастания
Элементы главной диагонали расположить в порядке возрастания. Кусочек этот подскажите, а то туплю...

3
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
19.05.2016, 07:51
Да. В строке 20 ошибка. Вы использовали
оператор DATA в качестве переменной.
Зарезервированные слова нельзя использовать не по назначению.
0
0 / 0 / 0
Регистрация: 22.05.2016
Сообщений: 2
22.05.2016, 15:37
Добавлено через 4 минуты
geh,


QBasic/QuickBASIC
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
CLS
TYPE DataType 
day AS INTEGER 
TextMonth AS STRING * 100
month AS INTEGER 
year AS INTEGER 
END TYPE 
DIM a AS STRING
INPUT "Vvedite kolichestvo dat: "; n
PRINT "Format - 1 January 2000" 
DIM spisok(n) AS DataType 
 
 
FOR i = 1 TO n 
DO 
'Ввод даты 
PRINT : PRINT "("; i; ") "; 
INPUT "Vvedite datu: "; a
a = str(d ) & space(1)+ str(p ) & space (1) + str(dd ) & space (1)
l = LEN(a) 
InputTo = 1 
lastJ = 1 
correct = 1 
 
FOR j = 1 TO l 
IF MID(a, j, 1) = " " THEN 
IF MID(a, j - 1, 1) <> " " THEN 
SELECT CASE InputTo 
CASE 1 
spisok(i).day = VAL(MID(a, lastJ, j - lastJ)) 
CASE 2 
spisok(i).TextMonth = MID(a, lastJ, j - lastJ) 
CASE 3 
spisok(i).year = VAL(MID(a, lastJ, j - lastJ)) 
END SELECT 
InputTo = InputTo + 1 
END IF 
lastJ = j + 1 
END IF 
NEXT j 
 
SELECT CASE RTRIM(spisok(i).textMonth) 
CASE "Январь" 
spisok(i).month = 1 
maxday = 31 
CASE "Февраль" 
spisok(i).month = 2 
maxday = 29 
CASE "Март" 
spisok(i).month = 3 
maxday = 31 
CASE "Апрель" 
spisok(i).month = 4 
maxday = 30 
CASE "Май" 
spisok(i).month = 5 
maxday = 31 
CASE "Июнь" 
spisok(i).month = 6 
maxday = 30 
CASE "Июль" 
spisok(i).month = 7 
maxday = 31 
CASE "Август" 
spisok(i).month = 8 
maxday = 31 
CASE "Сентябрь" 
spisok(i).month = 9 
maxday = 30 
CASE "Октябрь" 
spisok(i).month = 10 
maxday = 31 
CASE "Ноябрь" 
spisok(i).month = 11 
maxday = 30 
CASE "Декабрь" 
spisok(i).month = 12 
maxday = 31 
CASE ELSE 
correct = 0 'Других месяцев просто нет, значит что-то введено не так 
END SELECT 
 
'Проверка введенных значений - вдруг дней больше, чем может быть в месяце, или же ввели отрицательное число 
IF spisok(i).year < 0 THEN correct = 0 
IF spisok(i).day > maxday OR spisok(i).day <= 0 THEN correct = 0 
 
'Если дата введена не верно, сообщим об этом пользователю 
IF correct = 0 THEN COLOR 4: PRINT "Data vvedena neverno!": COLOR 7 
 
LOOP WHILE correct = 0 'Будем повторять ввод, пока не добьемся верной даты 
NEXT i 
 
'Сортировка списка дат 
FOR i = 1 TO n - 1 
MinYear = spisok(i).year 
MinMonth = spisok(i).month 
MinDay = spisok(i).day 
MinJ = i 
FOR j = i TO n 
IF (spisok(j).year < MinYear) OR (spisok(j).year = MinYear AND spisok(j).month < MinMonth) OR (spisok(j).year = MinYear AND spisok(j).month = MinMonth AND spisok(j).day < MinDay) THEN 
MinYear = spisok(j).year 
MinMonth = spisok(j).month 
MinDay = spisok(j).day 
MinJ = j 
END IF 
NEXT j 
SWAP spisok(i), spisok(MinJ) 
NEXT i 
 
'Последний рубеж - вывод упорядоченного списка на экран 
CLS 
FOR i = 1 TO n 
PRINT spisok(i).day; RTRIM$(spisok(i).TextMonth); spisok(i).year 
NEXT i
 
 
 
INPUT zzz
END

Теперь она работает, но я не знаю,как вводить даты. Не подскажете?
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
22.05.2016, 17:16
Используйте оператор INPUT
А сама дата должна вводиться в строковую переменную
Пример
1. Вы пишете на экране: 1 январь 2016
2. Этот текст попадает в переменную (например) sss$
3. Вам нужно с помощью функции MID$() вытащить
из этой переменной число, год и месяц.
4. Год? - это просто. Всего 4 знака справа. Выглядит так
MID$(sss$, LEN(sss$) - 4)
5. Перевести в число поможет функция VAL()
6. Эта же функция вытащит и первое число.
Пример. VAL(sss$) - это должно работать.
7. Месяц можно вынимать по разному. Наверное самое
простое по одной букве... (Функция MID(sss$, i, 1))
Здесь i - параметр цикла (это надо делать в цикле FOR)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2016, 17:16
Помогаю со студенческими работами здесь

Отсортировать числа в порядке возрастания дробной части
Дана последовательность вещественных чисел x1,x2,x3...,xN с двумя знаками после десятичной точки. Сортировать их в порядке возрастания...

Расположить 3 заданных числа a,b,c в порядке возрастания их значений.
Привет. Помогите пож. с задачей : Расположить 3 заданных числа a,b,c в порядке возрастания их значений.

Заполнить квадратный массив в порядке возрастания в соответствие с рисунком
дан квадратный массив a(n,n) (кол-во столбцов/строк вводится с клавиатуры). Заполнить его в порядке возрастания в соответствие с рисунком

Надо расположить столбцы матрицы D[M,N] в порядке возрастания элементов к-й строки
Помогите примером.Надо расположить столбцы матрицы D в порядке возрастания элементов к-й строки 1\leq k\leq M.

Составить программу для расположения эллементов массива в порядке возрастания значений
№1 Составить программу для расположения эллементов массива в порядке возрастания значений. Нарушение Правил п.п. 2.4, 3.15


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru