Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2012, 16:24   #1
vasya 684
Новичок
Джуниор
 
Регистрация: 03.12.2012
Сообщений: 6
По умолчанию Найти ошибку в паботе с массивом

я учусь работать с массивами, вот решил сделать первую программу, вроде все правильно, но в 13 строке пишет ошибка, помогите
Код:
program test;
const
 a : array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 b : array[1..12] of string[10] = ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
var
 day, month, year : integer;
 ok : boolean;
begin
 writeLn('Введите дату(число, номер месяца, год) : ');
 readLn(day, month, year);
if (day <= 0) or (month <= 0) or (year <= 0) or (month > 12) then
 ok := false;
 if ok := true then
   writeLn(day, ' ', b[month], ' ', year, ' года')
  else
writeLn('Дата некорректна!');
end.
vasya 684 вне форума Ответить с цитированием
Старый 03.12.2012, 16:35   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
if ok := true
Просто if ok then
Poma][a вне форума Ответить с цитированием
Старый 03.12.2012, 16:50   #3
vasya 684
Новичок
Джуниор
 
Регистрация: 03.12.2012
Сообщений: 6
По умолчанию

я написал как вы сказали, но когда я ввожу в данной программе корректную дату пишет, что она не корректна, в чем проблема
vasya 684 вне форума Ответить с цитированием
Старый 03.12.2012, 16:59   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
program test;

const
  a: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  b: array[1..12] of string[10] = ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');

var
  day, month, year: integer;

begin
  writeLn('Введите дату (число, номер месяца, год) : ');
  readLn(day, month, year);
  if (day <= 0) or (month <= 0) or (year <= 0) or (month > 12) then
    writeLn('Дата некорректна!')
  else
    writeLn(day, ' ', b[month], ' ', year, ' года');
  readln;
end.
Но условий проверки явно маловато.
День не должен превышать количества дней в месяце (не забыть про високосный год).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.12.2012, 17:43   #5
vasya 684
Новичок
Джуниор
 
Регистрация: 03.12.2012
Сообщений: 6
По умолчанию

Код:
program test;
const
 a : array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 b : array[1..12] of string[10] = ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
var
 day, month, year : integer;
begin
 writeLn('Введите дату(число, номер месяца, год) : ');
 readLn(day, month, year);
{if (year mod 4 = 0) and (month = 2) then
a[2] := 29;}
if (day <= 0) or (month <= 0) or (year <= 0) or (month > 12) or (day > a[month]) then
 writeLn('Дата некорректна!')
else
   writeLn(day, ' ', b[month], ' ', year, ' года');
   readLn;
end.]
вот так пойдет, почему то делаю проверку про високосный год, пишет что нельзя изменять константу как исправить
vasya 684 вне форума Ответить с цитированием
Старый 03.12.2012, 18:18   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
program test;

const
  a: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  b: array[1..12] of string[10] = ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');

var
  day, month, year, z: integer;

begin
  writeLn('Введите дату (число, номер месяца, год) : ');
  readLn(day, month, year);
  z := ord((month = 2) and ((year mod 4 = 0) and (year mod 100 <> 0) or (year mod 400 = 0)));
  if (day <= 0) or (month <= 0) or (year <= 0) or (month > 12) or (day > a[month] + z) then
    writeLn('Дата некорректна!')
  else
    writeLn(day, ' ', b[month], ' ', year, ' года');
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти ошибку horpenst Microsoft Office Excel 4 10.04.2011 15:39
найти ошибку sergio11 Паскаль, Turbo Pascal, PascalABC.NET 2 19.05.2010 01:22
Найти ошибку Uvaroff Помощь студентам 3 13.01.2010 01:45
Задача на работу с двумерным массивом.Найти количество прямоугольников. anta Общие вопросы C/C++ 6 05.01.2009 15:23
файл с массивом строк, помогите найти ошибку LyaLyaLya Паскаль, Turbo Pascal, PascalABC.NET 7 26.12.2008 23:44