Рассортировать даты в порядке возрастания - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д