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

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Рассортировать даты в порядке возрастания»

textual
Листинг программы
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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы