Перейти к содержимому



Pascal

#1 Banderas
Banderas
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1
0

Отправлено 08 Ноябрь 2009 - 19:38

Хотел задать парочку вопросов, но не хотел покидать МВ, поэтому решил создать тему на форуме ВЕБ местеров =)

Задание 29: «Калькулятор». Ученик вводит с клавиатуры число(a), символ арифметического действия(z) (+, -) и еще одно число(:). Компьютер должен напечатать результат. Указание: Используйте три оператора ReadLn.


program calc;
uses  CRT;
var
a, b : integer;
z : char;
begin
ClrScr;
readln (a);
readln (z);
readln (b);
case z of
	+ : writeln (a+b);
	- : writeln (a-b);
	else writeln ('unknow z');
end
end.

Надеюсь мне помогут...)))

пс. я вообще нуб в паскале, только начал его учить, по программе коледжа надо :)

 

 

  • 0

I'm web-developer 

Magento one love!



#2 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 08 Ноябрь 2009 - 22:44

Banderas, поскольку паскаль не изучал, попробую написать интуитивно...

program calc;
uses CRT;
{секция объявления переменных}
var
   a, b , isError : integer;
   z : char;
begin
   ClrScr; {очищаем экран}
   isError := 0; {обнуляем переменную ошибок}
   writeln ('Считает [+/-]  чисел A и B');
   { цикл с постусловием }
   repeat
	  writeln ('Введите целое число A: ');
	  readln(a);
	  val(a, a, isError);
   until isError > 0;
   { цикл с постусловием }
   repeat
	  writeln ('Введите целое число B: ');
	  val(readln(a), b, isError);
   until isError > 0;
   { цикл с постусловием }
   repeat
	  writeln ('Введите знак [ + / - ] : ');
	  readln(z);
	  val(z, z, isError);
   until isError > 0 and (z <> '+' or z <> '-');
   case z of
	  '+' : writeln (a+b);
	  '-' : writeln (a-b);
	  else writeln ('unknow z');
   end
end.

Сейчас понял что работать код не будет, так как в переменные с клавиатуры не всегда изначально будут считываться те символы что нужно, а проверка уже идёт затем. Даже не знаю что и предложить, языка я не знаю.
  • 0

#3 admin
admin
  • Пользователь PRO
  • 5 275 сообщений
  • Репутация: 56

Отправлено 09 Ноябрь 2009 - 00:06

Блин вы что издеваетесь))))
Всё проще на много :)

Program CALC;
uses CRT;
var a,b:integer;
	  z:char;
begin clrscr;
write('a='); readln(a);
write('b='); readln(B);
write('vvedite znak +/-...'); readln(z);
IF z='+' THEN writeln('a+b=', a+B);
IF z='-' THEN writeln('a-b=', a-B);
end.

У меня работает. Можно конечно же и по-другому, но так проще всего ИМХО :)
  • 0

#4 Banderas
Banderas
    Topic Starter
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1

Отправлено 09 Ноябрь 2009 - 01:39

Лёха, я пацтулом :)

Дима, а если например использывать не + и -, а ещё и другие знаки, да и вообще если не я введу вот такое :*:% ??? Здесь надо case... Может надо применять ещё и readkey?
  • 0

I'm web-developer 

Magento one love!



#5 admin
admin
  • Пользователь PRO
  • 5 275 сообщений
  • Репутация: 56

Отправлено 09 Ноябрь 2009 - 01:50

Banderas, нет, больше ничего не нужно. В условии не написано ничего, программа правильно работает и подходит под условие. Оператор выбора не нужен
  • 0

#6 Banderas
Banderas
    Topic Starter
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1

Отправлено 09 Ноябрь 2009 - 11:35

А как это с case прокрутить?
  • 0

I'm web-developer 

Magento one love!



#7 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 09 Ноябрь 2009 - 14:14

admin, ужас, я введу билиберду и получу билиберду... Это называется правильно...
  • 0

#8 admin
admin
  • Пользователь PRO
  • 5 275 сообщений
  • Репутация: 56

Отправлено 09 Ноябрь 2009 - 15:05

Banderas, тебе нужно с case делать?
  • 0

#9 Banderas
Banderas
    Topic Starter
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1

Отправлено 09 Ноябрь 2009 - 15:26

Та я уже понял, только новая проблема :)

Вот так все работает
program calc;
uses CRT;
var
a, b, s : integer;
z : char;
begin
ClrScr;
readln (a);
readln (z);
readln (b);
case z of
	'+' : begin s:=a+b; writeln (s) end;
	'-' : begin s:=a-b; writeln (s) end;
	'*' : begin s:=a*b; writeln (s) end;	
	else writeln ('unknow z');
end
end.

Но если я добавляю
'/' : begin s:=a/b; writeln (s) end;
то пишет ошибку: Error 26: Type mismatch.
  • 0

I'm web-developer 

Magento one love!



#10 admin
admin
  • Пользователь PRO
  • 5 275 сообщений
  • Репутация: 56

Отправлено 09 Ноябрь 2009 - 15:33

Banderas, я тебя не понимаю. Я написал код под твоё условие, если что-то не так или ещё что-то нужно, то напиши условие новое
  • 0

#11 Banderas
Banderas
    Topic Starter
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1

Отправлено 09 Ноябрь 2009 - 17:10

Задача была таковой:

Задание 29: «Калькулятор». Ученик вводит с клавиатуры число(a), символ арифметического действия(z) (+, -, *, /) и еще одно число(:). Компьютер должен напечатать результат. Указание: Используйте три оператора ReadLn. Используйте case.


  • 0

I'm web-developer 

Magento one love!



#12 Евгений
Евгений
  • Неактивные
  • 481 сообщений
  • Репутация: 0

Отправлено 09 Ноябрь 2009 - 17:56

'/' : begin s:=a/b; writeln (s) end;

в этом случае переменная s должна иметь тип не integer, а real
т.к. при делении у тебя не всегда целое число получается
  • 0

#13 Евгений
Евгений
  • Неактивные
  • 481 сообщений
  • Репутация: 0

Отправлено 09 Ноябрь 2009 - 18:01

program calc;
var
	 operation:byte;
	 a,b:integer;
begin
	write('a = ');
	readln(a);
	write('b =');
	readln(b);
	writeln('1 - summa');
	writeln('2 - vichitanie');
	writeln('3 - delenie');
	writeln('4 - umnojenie');
	readln(operation);
	case operation of:
		1: writeln(a+b);
		2: writeln(a-b);
		3: writeln(trunc(a/b));
		4: writeln(a*b);
	end;
end.

  • 0

#14 Banderas
Banderas
    Topic Starter
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1

Отправлено 09 Ноябрь 2009 - 18:17

Фигасе какой код =))

А не проще просто переменной S дать значение real?
  • 0

I'm web-developer 

Magento one love!



#15 Евгений
Евгений
  • Неактивные
  • 481 сообщений
  • Репутация: 0

Отправлено 09 Ноябрь 2009 - 23:54

write('a = ');
readln(a);
write('b =');
readln(:D;

это код такой не из-за того что переменная integter, а из-за того что не стоит забывать о том что юзеру даже в паскале должно быть понятно что он вводит, интерфейс хоть какой то чтоли)

writeln('1 - summa');
writeln('2 - vichitanie');
writeln('3 - delenie');
writeln('4 - umnojenie');
readln(operation);

эту часть можешь заменить знаком +, -, /, *, но по моему так польтзователь точно не ошибется и не нажмет левого

writeln(trunc(a/:));

напиши writeln(a/:); вот эта строчка заменяет вообще переменную S. если с переменной, то было бы так

s := a/b;
writeln(s);


  • 0

#16 Banderas
Banderas
    Topic Starter
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1

Отправлено 10 Ноябрь 2009 - 01:04

Спасибо нащаникамана :)

пс. опять пересмотрелся Наша раша =))))
  • 0

I'm web-developer 

Magento one love!



#17 Banderas
Banderas
    Topic Starter
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1

Отправлено 10 Ноябрь 2009 - 12:38

Появилась новая задача и новая проблема... =)

Задача 36

36) Для х=2700, 900, 300, 100 . . . и т.д. вычислять и печатать y=x/4 + 20 и z=2y+0.23 до тех пор, пока y*z не станет меньше 1/х.


Я напичатал
program lol;
uses CRT;
label m1, m2;
var
x, y, z, n, k : real;
begin ClrScr;
	x:=2700;
m1: x:=2700/3;
	y:=x/4+20;
	z:=2*y+0.23;
	n:=y*z;
	k:=1/x;
	if n < k then goto m2;
	goto m1;
m2: write(x:10:3);
	write(y:10:3);
	write(z:10:3);
end.
Не работает =(( Хотя когда я пишу n > k - то работает. В чем проблема, не подскажите?
  • 0

I'm web-developer 

Magento one love!



robot
robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Похожие темы
  Название темы Автор Статистика Последнее сообщение

Пользователь месяца
BLIK BLIK 1-й за Ноябрь
Очков активности: 672 0 тем, 32 сообщения, 14 баллов репутации
ТОП самых активных за этот месяц
  • Фотография Totti
    #1

    Totti
    Очков активности: 105 0 тем, 14 сообщений, 5 баллов репутации

  • Фотография BLIK
    #2

    BLIK
    Очков активности: 63 Вне конкурса за определение пользователя месяца

  • Фотография Victim
    #3

    Victim
    Очков активности: 60 0 тем, 8 сообщений, 5 баллов репутации

  • Фотография akmid81
    #4

    akmid81 (biznessystem.ru)
    Очков активности: 57 3 темы, 10 сообщений, 2 балла репутации

  • Фотография Vmir
    #5

    Vmir
    Очков активности: 51 1 тема, 14 сообщений, 2 балла репутации

  • Фотография MattCutts
    #6

    MattCutts (dmitrylee.ru)
    Очков активности: 30 Вне конкурса за определение пользователя месяца

  • Фотография FIvYUr
    #7

    FIvYUr (moy-evroopt.ru)
    Очков активности: 25.5 0 тем, 17 сообщений, 1 балл репутации

  • Фотография TimurR
    #8

    TimurR
    Очков активности: 21 3 темы, 5 сообщений, 1 балл репутации

  • Фотография Rodiola
    #9

    Rodiola (rukodelkovo.ru)
    Очков активности: 16.5 Вне конкурса за определение пользователя месяца

  • Фотография kolver
    #10

    kolver
    Очков активности: 15 1 тема, 7 сообщений, 1 балл репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 29.11.2019
  • Яндекс выдача: 11.12.2019
Топ 5 участников по репутации

Оформление форума – IPBSkins.ru