Войти

Показать полную графическую версию : [решено] Программа в Pascal


Страниц : 1 [2] 3

Alan85
24-08-2009, 18:12
паскаль делает программы для DOS - а их там никогда не было. В винде эта проблема решается созданием ярлыка (pif файл)где и задается иконка , при этом и сам exe видится с иконокой пока не удалишь pif файл. вроде так.
а вот пример который тебе может помочь в решении твоей задачи. Обрати внимание что char тоже можно сравнивать при помощи case...

program pnum;
var
num:char;
begin
writeln("Enter number 1 or 2");
readln(x);
case x of
'1': writeln('1');
'2':writeln('2');
else writeln('error');
end;
end.

asus a9rp
24-08-2009, 22:29
Не получилось. За информацию про иконки - спасибо, а с этим - провал.
Хорошо. Раз все так хотят мне помочь, то (что бы всё получилось, а то у меня всё никак не выходит) переделайте пожалуйста мою программу так, она не отключалась.
Программа содержится в первом сообщении ниже.

asus a9rp
03-09-2009, 20:02
Вот ещё вопрос. Как сделать так, что-бы введённое человеком число добавлялось в код? Т.е. Задаётся вопрос с ответом-числом, человек вводит своё число и оно добавляктся к сумме-коду. И вопрос к этому же. Как сделать, что-бы это число могло быть увеличено в 10, 100, 1000 раз. К примеру. Введено число 55, а мне надо 5500.

BlackEric
04-09-2009, 12:35
asus a9rp, сложить или умножить обычно помогает

asus a9rp
05-09-2009, 00:02
BlackEric, ну, вообще логично, но как это прописать?
(1:??? (y, 10))

lxa85
05-09-2009, 11:51
asus a9rp,
var
summator: integer; // Переменная накопления суммы
A:integer; // Число
k:integer; // Коэфициент умножения 10, 100, 1000 ...
begin
summator:=0;
readln(A);
A:=k*A;
while A<>0 do
begin
summator:=summator+A;
readln(A);
A:=k*A;
end;
writeln(summator);
end.

Или я не правильно понял вопрос?

BlackEric
05-09-2009, 12:42
asus a9rp, воьмите _любую_ книгу по паскалю и прочитайте первые 3-4 главы. Времени съэкономите уйму.

asus a9rp
05-09-2009, 20:04
lxa85, не совсем то. Но я это решил:
Uses CRT;
Var x, y, z, k, a: Integer;
BEGIN
ClrScr;
z:=10;
k:=100;
Write ('Number'); Readln (x);
y:=x*z;
Writeln (y);
Readln;
ClrScr;
Write ('Number 2'); Readln (x);
a:=x*k;
Writeln (a);
Readln;
end.
BlackEric, я - сомоучка. Я занимаюсь программированием не профессионально, а для того, что бы написать одну программу. И такой литературы у меня нет. А покупать из-за одной программы, тем более в наше время - не охота. Чем тратить деньги, лучше спросить у знающих людей. Они и разъяснят если что. :) :oszone:

lxa85
05-09-2009, 21:04
Чем тратить деньги, лучше спросить у знающих людей. Они и разъяснят если что. »
Не вздумай повторять эту фразу где-либо еще, ибо твой авторитет упадет ниже некуда!
Купи(найди, скачай) книгу. Здесь не школа, и самостоятельное исследование задач приветствуется. Знающим только приятно будет. А рассказывать главы учебников тратя свое время ...
Надеюсь ты понял. :)

asus a9rp
08-09-2009, 00:06
lxa85, понял. Я просто имел в виду, что если что-то будет не понятно, то здесь объяснят, что и как, а книга не сможет объяснить непонятное. Она ведь говорить не может.

asus a9rp
14-09-2009, 20:56
У меня ещё один вопрос появился. Поидее последний. У моей программы теперь последующий вопрос должен зависить от предыдущего. Я пробовал так:
Uses Crt;
Var a, b, y, z: Integer;
begin
TextBackGround(1); ClrScr;
a:=0; b:=0; y:=0; z:=0;
ClrScr;
Writeln ('?');
Writeln ('');
Writeln ('1');
Writeln ('2');
Writeln (''); Readln (y);
case y of
1:inc(a, 10);
2:inc(a, 20);
If a=10 Then
begin
ClrScr;
Writeln ('?');
Writeln ('');
Writeln ('1');
Writeln ('2');
Writeln (''); Readln (y);
end;
case y of
1:inc(b, 1);
2:inc(b, 2);
If a=20 Then
begin
ClrScr;
Writeln ('?');
Writeln ('');
Writeln ('1');
Writeln ('2');
Writeln (''); Readln (y);
case y of
1:inc(b, 1);
2:inc(b, 2);
z:=a+b;
ClrScr;
Writeln('= ',z);
Readln;
end.
Он жалуется на "If a=10 Then". Как это прописать иначе, что-бы всё было нормально?

lxa85
14-09-2009, 22:01
asus a9rp, на память не помню, но проверь конструкцию
case <переменная> of
Операторные скобки какие? end case; помоему нужен. Help тебя спасет.

var Item:Integer;
begin
readln(Item);
case Item of
1: Writeln('1');
2: Writeln('2');
else: witeln('not 1 or 2');
end case;
end.

Т.е. ты должен четко отделить оператор множественного выбора case от оператора условия if
Он жалуется на "If a=10 Then" »
Как именно жалуется?

По алгоритму, ИМХО сложновато для анализа "на вскидку", одно-буквенные переменные мешают анализу. Отсутствие комментариев тоже не способствует.

Alan85
14-09-2009, 22:02
http://www.pascaler.ru/pascal/constructions/uslovie/4/
Блок case должен заканчиваться end;
case y of
1:inc(a, 10);
2:inc(a, 20); end;
If a=10 Then
begin
ClrScr;
Writeln ('?');
Writeln ('');
Writeln ('1');
Writeln ('2');
Writeln (''); Readln (y);
end;

asus a9rp
14-09-2009, 22:52
Alan85, Получилось, но теперь ещё одно.

Alan85
15-09-2009, 06:58
If a=20 Then
begin
ClrScr;
Writeln ('?');
Writeln ('');
Writeln ('1');
Writeln ('2');
Writeln ('');
Readln (y); »
тут end; в конце забыл

asus a9rp
15-09-2009, 09:36
Спасибо, тепреть всё в порядке.... за исключением одного. В первом вопросе ответ 1, во втором - 1, но в конце (где должно быль 10+1=11) выводится 12. А если ответы 2 и 2, то в конце - 24, а не 22.

П.С. Программа теперь выдлядет так:
Uses Crt;
Var a, b, y, z: Integer;
begin
TextBackGround(1); ClrScr;
a:=0; b:=0; y:=0; z:=0;
ClrScr;
Writeln ('?');
Writeln ('');
Writeln ('10');
Writeln ('20');
Writeln ('');
Readln (y);
case y of
1:inc(a, 10);
2:inc(a, 20);
end;
If a=10 Then
begin
ClrScr;
Writeln ('?');
Writeln ('');
Writeln ('1');
Writeln ('2');
Writeln (''); Readln (y);
end;
case y of
1:inc(b, 1);
2:inc(b, 2);
end;
If a=20 Then
begin
ClrScr;
Writeln ('?');
Writeln ('');
Writeln ('1');
Writeln ('2');
Writeln ('');
Readln (y);
end;
case y of
1:inc(b, 1);
2:inc(b, 2);
end;
z:=a+b;
ClrScr;
Writeln('= ',z);
Readln;
end.

lxa85
15-09-2009, 15:00
asus a9rp, расписываю твой код по структурам, убирая лишнее. У тебя просто идет нарушение операторных скобок
Uses Crt;
Var a, b, y, z: Integer;
begin
//инициализация переменных
a:=0; b:=0; y:=0; z:=0;
ClrScr;
//ввод Y
Readln (y);
case y of --------начало case
1:inc(a, 10);
2:inc(a, 20);
end; ------------- конец case
-------------------------------------------------------------------------------------------------------
If a=10 Then
begin -------------------------------------------------
Writeln (''); Readln (y);
end; --------------------------------------------------
---------if Кончился здесь! --------
------------не зависимый от if a=10 блок, т.е. тело программы --------------
case y of
1:inc(b, 1);
2:inc(b, 2);
end;
----------------------------------
-----второй if
If a=20 Then begin
ClrScr;
Readln (y);
end;
-------------------------------
----y от второго if тут не учитывается ---------------
case y of
1:inc(b, 1);
2:inc(b, 2);
end;
---------------------------
-------дальше прочие действия---------
z:=a+b;
ClrScr;
Writeln('= ',z);
Readln;
end.
выделенные куски повторяются. С тем же успехом их можно было написать вместе. if a = ___ на них не влияет.

p.s. потом добавлю наглядную схему

asus a9rp
16-09-2009, 00:36
Всё равно получилоссь то же. А Вы не могли бы просто взять мою программу и отредактировать без коментариев (что-бы скопировав и вставив он запустилась). И если есть возможность, то проверьте её, поделуйса, что-бы съэкономить время. Буду очень признателен.

lxa85
16-09-2009, 01:04
Cтуденчество, совсем думать обленилось! :(

Uses Crt;
Var a, b, y, z: Integer;
begin
// инициализация переменных
TextBackGround(1);
a:=0; b:=0; y:=0; z:=0;
ClrScr;
//запрашиваем первый ввод
Writeln ('?'); Writeln (''); Writeln ('10'); Writeln ('20'); Writeln ('');
Readln (y);
//смотрим что с ним делать
case y of
1:inc(a, 10);
2:inc(a, 20);
end; //case

If a=10 Then //зачем нужен был впереди case не ясно, но пусть будет
begin
ClrScr;
Writeln ('?'); Writeln (''); Writeln ('1'); Writeln ('2'); Writeln ('');
Readln (y);
case y of // --------
1:inc(b, 1);// |
2:inc(b, 2);// |
end; // case --------
end; // if . Таким образом "case y of" выполняется внутри блока условия "if"

If a=20 Then
begin
ClrScr;
Writeln ('?'); Writeln (''); Writeln ('1'); Writeln ('2'); Writeln ('');
Readln (y);
case y of // --------
1:inc(b, 1);// |
2:inc(b, 2);// |
end; // case --------
end; // тоже самое

// завершающие действия
z:=a+b;
ClrScr;
Writeln(a,' + ',b,' = ',z);
Readln;
end.

asus a9rp
17-09-2009, 20:44
lxa85, Огромнейшее спасибо! Всё работает.
Cтуденчество, совсем думать обленилось! »
Извините, но Вы меня просто не правильно поняли. У меня просто ничего не получалось как-бы я не пробовал и не понимал, в чём проблема. Вот и пришлось попросить у Вас. То, что было написано перед Вами давало тот же результат. Оказалось, что у меня было промерно так:
If a=10 Then
begin
end;
Case y of
end;
А надо было так:
If a=10 Then
begin
Case y of
end;
end;
Теперь я всё понял.
Последний вопрос, но уже не по программе, а по самому Паскалю.
При копитовании из Паскаля в ОСь или наоборот, русские буквы заменяются вопросиками. Возможно ли это изправить?

П.С. Я не студент, а шольник (8-й класс). :)




© OSzone.net 2001-2012