Показать полную графическую версию : [решено] Программа в Pascal
asus a9rp
20-08-2009, 22:27
Я создавал программу как опрос. Вот она:
Uses Crt;
Var x, y: Integer;
begin
ClrScr;
y:=0;
Write ('Какой у Вас Windows? [XP - 1, Vista - 2] -> '); Readln (x);
If x=1 Then
begin
inc(y)
end
Else If x=2 Then
begin
inc(y)
end
Else Writeln ('Значение не верно! Учитывается как 0!');
Writeln('Код: ',y);
Readln;
end.
Ну так вот. Есть "inc(y)" и добавляет к результату (коду) 1. Мне нужно, чтобы в определённых местах добавлялось 3, 10, 20, 400, 1000 и т.д. Помогите. Заранее спасибо.
Опыт у меня примерно двухнедельный :)
Сейчас программа выглядет так (ориентируйтесь на эту версию):
Uses Crt;
Var x, y: Integer;
begin
TextBackGround(1); ClrScr;
y:=0;
Writeln ('Какой у Вас Windows?');
Writeln ('');
Writeln ('XP - 1');
Writeln ('Vista - 2');
Writeln ('2000 - 3');
Writeln ('Seven - 4');
Writeln (''); Readln (x);
case x of
1:inc(y, 10);
2:inc(y, 20);
3:inc(y, 30);
4:inc(y, 40);
Else
Writeln ('Значение не верно! Учитывается как 0!'); Readln;
End;
ClrScr;
Writeln ('Какой у Вас Office?');
Writeln ('');
Writeln ('2003 - 1');
Writeln ('2007 - 2');
Writeln ('2010 - 3');
Writeln (''); Readln (x);
case x of
1:inc(y);
2:inc(y, 2);
3:inc(y, 3);
Else
Writeln ('Значение не верно! Учитывается как 0!'); Readln;
End;
ClrScr;
Writeln('');
Writeln('Код: ',y);
Readln;
end.
BlackEric
20-08-2009, 22:46
Используйте inc(y, 4);
Для уменьшения можно использовать dec();
If x=1 Then
begin
inc(y)
end
Else If x=2 Then
begin
inc(y)
end
Эта конструкция по нормальному должна выглядеть так:
case x of
1:inc(y);
2:inc(y);
Else
Writeln ('Значение не верно! Учитывается как 0!');
End;
asus a9rp
20-08-2009, 22:54
BlackEric, Всё работает!!! Огромное спасибо!
asus a9rp
21-08-2009, 00:43
У меня ещё вопрос. Если вот тут
Write ('Какой у Вас Windows? [XP - 1, Vista - 2] -> '); Readln (x);
ввести 1 или 2 - всё нормально, если другую цифру - код = 0, а если букву или символ - программа отключается. Как это изменить (тоже сделать нулевой код)?
И ещё один вопрос. Тоже тут. у меня операционки написаны в скобках, а я хочу в столбик. Я пробовал так:
Write ('Какой у Вас Windows?')
Write ('XP - 1')
Write ('Vista - 2')
Write ('-> '); Readln (x);
но не помогло. Было всё равно в строчку.
DillerInc
21-08-2009, 00:51
а я хочу в столбик »
...байты 0Dh и 0Ah в конец строки.
http://delphi.about.com/od/adptips2005/qt/crlf.htm
а я хочу в столбик »
Writeln вместо Write.
asus a9rp
21-08-2009, 02:23
DedAlex, ой. Очепятка... :) Спасибо!
asus a9rp
21-08-2009, 17:56
Ах да. Вот.
У меня ещё вопрос. Если вот тут
Write ('Какой у Вас Windows? [XP - 1, Vista - 2] -> '); Readln (x);ввести 1 или 2 - всё нормально, если другую цифру - код = 0, а если букву или символ - программа отключается. Как это изменить (тоже сделать нулевой код)? »
DillerInc, у меня Pascal а не Delphi. :)
DedAlex, да, всё работает. Ещё раз спасибо.
DillerInc
21-08-2009, 19:21
у меня Pascal а не Delphi »
...нет разницы в данном случае.
0Dh (hex) == 13 (dec) == CR == carriage return == возврат каретки
0Ah (hex) == 10 (dec) == LF == line feed == перенос строки
Функция WriteLn добавляет эти два байта в конец строки.Только в Дельфе это вроде как именуется признаком конца строки - EOLN - но суть та же.
Учите матчасть.
asus a9rp
21-08-2009, 22:18
DillerInc, спасибо за разъяснение, но всёже вернёмся к моему вопросу. :)
BlackEric
22-08-2009, 18:02
У меня ещё вопрос. Если вот тут
Код:
Write ('Какой у Вас Windows? [XP - 1, Vista - 2] -> '); Readln (x);
ввести 1 или 2 - всё нормально, если другую цифру - код = 0, а если букву или символ - программа отключается. Как это изменить (тоже сделать нулевой код)? »
Переменную x описываем как char. Тогда она корректно прочитает любой символ, но проверку на то что ввели не число вы должны делать сами.
Я бы сделал как-то так:
readln(x);
case ord(x) of
ord(1): inc(y);
ord(2): inc(y);
else
writeln('Неверный ввод!');
end;
Этот алгоритм не идеален, но общая идея примерно такова.
Пробуйте.
asus a9rp
22-08-2009, 18:52
Спасибо, ппробую.
Как char я её писал, но только на месте Integer, а дальше ничего не менял.
asus a9rp
22-08-2009, 22:54
Ну и покачто последний вопрос. Можно ли моей программе поменять иконку (ну к примеру как папке)?
asus a9rp
23-08-2009, 02:03
BlackEric, вылезла одна ошибка - нестыковка тута:
Uses Crt;
Var x, y: Char;
begin
TextBackGround(1); ClrScr;
y:=0;
Writeln ('Какой у Вас Windows?');
И пишет:
Programm.pas(5,6) Error: Incompatible types: got "ShortInt" expected "Char"
Programm.pas(40) Fatal: There were 1 errors compiling module, stopping
Programm.pas(0) Fatal: Compilation aborted
BlackEric
23-08-2009, 18:50
y:=0; »
Вы же переменной символьного типа присваиваете число. Так нельзя.
asus a9rp
23-08-2009, 21:00
А как иначе?
BlackEric
23-08-2009, 21:14
asus a9rp, а что вы хотите сделать?
Где работаем числами, там integer, real, где строки там Char или string.
asus a9rp
23-08-2009, 22:55
BlackEric, ладно, пусть будет как было. Я просто хотел испрасить отключение программы после ввода буквы, а не цифры.
BlackEric
24-08-2009, 00:35
asus a9rp,
1. Вам ничего не мешает описать несколько переменных
var
x: char;
y: integer;
.....и т.д.
2. Почитайте по приведение типов.
Char ковертируется в Byte одной функцией chr.
asus a9rp
24-08-2009, 12:28
Я прописал, читал про приведение типов, но всё равно не получилось. Ладно, оставим как есть.
Но я просто объясню свою идею:
В программе требуется ввести число, если я ввожу правильное, то всё нормально. Если введено другое число, то выводится соответствующая надпись. Если введена буква, то программа отключается. Мне нужно было, чтобы если введена буква была выведеня такая же надпись, как и при неправильном числе. Но вводить нужно не буквы, а цифры. Вот и всё. Но с этим закончим. У меня только вопрос:
Можно ли моей программе поменять иконку (ну к примеру как папке)? »
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC