Помощь начинающему

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Re: Помощь начинающему

Сообщение vada » 13.11.2012 18:10:49

Ошибка, рядовой ! :D

Капитан :P
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Помощь начинающему

Сообщение Vadim » 14.11.2012 05:40:09

nikolay61 писал(а): как написать прогарму ДО задачи

Никак! "прогарму" пишут только ПОСЛЕ задачи... :D
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Помощь начинающему

Сообщение bormant » 14.11.2012 08:03:07

rudie писал(а):Помогите пожалуйста составить программу, чтобы числа выводились в виде такой таблицы, если не трудно с объяснениями что к чему:
0
1 0
2 1 0
3 2 1 0
4 3 2 1 0

Код: Выделить всё
var
  i, j: integer;
begin
  for i := 0 to 4 do begin
    for j := i downto 0 do write(j, ' ');
    writeln;
  end;
end.
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Помощь начинающему

Сообщение Vadim » 14.11.2012 13:25:09

vada писал(а):Капитан

Фрегаттен-капитэн? :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Помощь начинающему

Сообщение nikolay61 » 27.11.2012 14:01:46

Доброго! Что неправильно?


Код: Выделить всё
uses crt;
var x,y:integer;
s,r,d:longint;
h:real;
z:char;

BEGIN
writeln('x,y');
read(x,y);
writeln('z');
read(z);
case z of
'+': begin s:=x+y; writeln(s); end;
'-': begin r:=x-y; writeln(r); end;
'*': begin d:=x*y; writeln(d); end;
'/': begin h:=x/y; writeln(h:2:3); end;
else writeln('Помилка');
end;
readln;
readln;

END.
nikolay61
новенький
 
Сообщения: 27
Зарегистрирован: 15.08.2012 16:58:46

Re: Помощь начинающему

Сообщение PapaNT » 27.11.2012 14:14:56

Код: Выделить всё
uses crt;
var x,y:integer;
s,r,d:longint;
h:real;
z:char;

BEGIN
writeln('x,y');
readLN(x,y); // Лучше с LN - более наглядно
writeln('z');
read(z);
case z of
'+': begin s:=x+y; writeln(s);//end;
'-': begin r:=x-y; writeln(r); //end;
'*': begin d:=x*y; writeln(d); //end;
'/': begin h:=x/y; writeln(h:2:3); //end;
else writeln('Помилка');
end; // на весь case надо только один end
readln;
// readln; - зачем второй readln в конце?

END.
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Помощь начинающему

Сообщение bormant » 27.11.2012 16:13:20

Код: Выделить всё
var
  x, y: real;
  z: char;
begin
  write('Введите через пробелы два числа и знак операции: '); readln(x, y, z);
  case z of
    '+': writeln(x+y);
    '-': writeln(x-y);
    '*': writeln(x*y);
    '/': writeln(x/y);
    else writeln('Ошибочная операция.');
  end;
  readln;
end.

PapaNT писал(а):на весь case надо только один end
те "end"-ы не от "case"-а, а от составных операторов "begin end" в каждом из вариантов.
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Помощь начинающему

Сообщение PapaNT » 27.11.2012 16:30:31

пардон - не заметил...
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Помощь начинающему

Сообщение v-t-l » 27.11.2012 19:28:56

перед else ";" не ставится.
v-t-l
энтузиаст
 
Сообщения: 727
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Помощь начинающему

Сообщение nikolay61 » 27.11.2012 21:17:21

Vadim писал(а):Никак! "прогарму" пишут только ПОСЛЕ задачи...


Принято. :mrgreen:

Добавлено спустя 2 минуты 13 секунд:
bormant писал(а):те "end"-ы не от "case"-а, а от составных операторов "begin end" в каждом из вариантов.

Есть, работает. Всем ОК!
nikolay61
новенький
 
Сообщения: 27
Зарегистрирован: 15.08.2012 16:58:46

Re: Помощь начинающему

Сообщение bormant » 27.11.2012 22:27:23

v-t-l писал(а):перед else ";" не ставится.
... в операторе if ... then ... else. Вот только не вижу тут я этого оператора... А вы?
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Помощь начинающему

Сообщение nikolay61 » 27.11.2012 22:37:37

PapaNT писал(а):PapaNT

PapaNT писал(а):на весь case надо только один end

Изображение
nikolay61
новенький
 
Сообщения: 27
Зарегистрирован: 15.08.2012 16:58:46

Re: Помощь начинающему

Сообщение nikolay61 » 30.11.2012 19:48:14

PapaNT писал(а):
Код: Выделить всё
uses crt;
var x,y:integer;
s,r,d:longint;
h:real;
z:char;

BEGIN
writeln('x,y');
readLN(x,y); // Лучше с LN - более наглядно
writeln('z');
read(z);
case z of
'+': begin s:=x+y; writeln(s);//end;
'-': begin r:=x-y; writeln(r); //end;
'*': begin d:=x*y; writeln(d); //end;
'/': begin h:=x/y; writeln(h:2:3); //end;
else writeln('Помилка');
end; // на весь case надо только один end
readln;
// readln; - зачем второй readln в конце?

END.

А ведь работает и так. Почему первый раз не заработало не пойму. Может что-то с FPC. Я переустановил, попробовал и заработал и в этой версии сборки.
program OPERACII;

uses crt;
var x,y:integer;
s,d,r:longint;
h:real;
z:char;
i:byte;
label koka;
BEGIN
clrscr;
  koka:
writeln('Введите х и у'); readln(x,y);
writeln('введите символ (-,+,*,/)'); readln(z);
case z of
'+': begin s:=x+y; writeln(s); end;
'-': begin r:=x-y; writeln(r); end;
'*': begin d:=x*y ;writeln(d); end;
'/': begin h:=x/y; writeln(h:3:3); end;
else writeln('Не тот знак ввели');
end;
writeln('Если дальше продолжить, жми 1, в противном случає - любую цифру'); readln(i);
if i=1 then GOTO koka else writeln('К О Н Е Ц');
readln;
END.


Добавлено спустя 3 минуты 18 секунд:
nikolay61 писал(а):КОД: ВЫДЕЛИТЬ ВСЁ
uses crt;
var x,y:integer;
s,r,d:longint;
h:real;
z:char;

BEGIN
writeln('x,y');
readLN(x,y); // Лучше с LN - более наглядно
writeln('z');
read(z);
case z of
'+': begin s:=x+y; writeln(s);//end;
'-': begin r:=x-y; writeln(r); //end;
'*': begin d:=x*y; writeln(d); //end;
'/': begin h:=x/y; writeln(h:2:3); //end;
else writeln('Помилка');
end; // на весь case надо только один end
readln;
// readln; - зачем второй readln в конце?

END.


Братцы, а работает и и этой наборкой
program Temperatur;

uses crt;
var x,y:integer;
s,d,r:longint;
h:real;
z:char;
i:byte;
label koka;
BEGIN
clrscr;
koka:
writeln('Введите х та у'); readln(x,y);
writeln('введите символ (-,+,*,/)'); readln(z);
case z of
'+': begin s:=x+y; writeln(s); end;
'-': begin r:=x-y; writeln(r); end;
'*': begin d:=x*y ;writeln(d); end;
'/': begin h:=x/y; writeln(h:3:3); end;
else writeln('Не тот знак ввели');
end;
writeln('Если дальше продолжить, жми 1, в противном случає - любую цифру'); readln(i);
if i=1 then GOTO koka else writeln('К О Н Е Ц');
readln;
END.

Добавлено спустя 2 часа 33 минуты 27 секунд:
Объясните пожайлуста зачем здесь k:=k+1 если програма и так работает правильно без "k"
program Suma_parnych;

uses crt;
var
c1,c2,c3,{chysla}s,{suma}k:{kilkisty} integer;
sa:{serednye aryfmetychne}real;
i:{mitka}byte;
label mitka;
BEGIN
clrscr;
mitka:
writeln('Введите три числа');
readln(c1,c2,c3);
s:=0; k:=0; sa:=0; {Начальные значения}
if c1 mod 2=0 then begin s:=s+c1; k:=k+1; end;{Парное ли 1 число?}
if c2 mod 2=0 then begin s:=s+c2; k:=k+1; end;
if c3 mod 2=0 then begin s:=s+c3; k:=k+1; end;
sa:=s/3;
writeln('Сума =',s,' ','Середнее значение =',sa:4:4);

writeln('Далее дави - "1", или "0"');
readln(i);
if i=1 then GOTO mitka
else writeln('END');
readln;
END.
nikolay61
новенький
 
Сообщения: 27
Зарегистрирован: 15.08.2012 16:58:46

Re: Помощь начинающему

Сообщение bormant » 30.11.2012 22:39:05

Полагаю, задание звучало наподобие: ввести три целых числа и найти среднее арифметическое чётных из них. Тогда должно было быть что-то вроде:
Код: Выделить всё
  s:=0; k:=0;
  { считаем сумму и количество чётных чисел среди c1, c2, c3 }
  if c1 mod 2=0 then begin s:=s+c1; k:=k+1; end;
  if c2 mod 2=0 then begin s:=s+c2; k:=k+1; end;
  if c3 mod 2=0 then begin s:=s+c3; k:=k+1; end;
  if k=0 then
    writeln('Среди введённых чисел нет чётных.')
  else
    writeln('Сумма=', s, ', Количество=', k, ', Среднее=', s/k:4:4);


Добавлено спустя 10 минут 27 секунд:
Но логичнее:
Код: Выделить всё
var
  c: array [0..2] of integer;
  i, s, k: integer;
begin
  repeat
    write('Введите три числа (через пробел): ');
    readln(c[0], c[1], c[2]);
    s := 0; k := 0;
    for i := 0 to 2 do
      if c[i] mod 2 = 0 then begin
        s := s + c[i]; k := k + 1;
      end;
      if k = 0 then
        writeln('Среди введённых чисел нет чётных.')
      else
        writeln('Для чётных: Сумма=', s, ', Количество=', k, ', Среднее=', s/k:4:4);
    write('Введите 1 для продолжения или 0 для завершения: ');
    readln(i);
  until i = 0;
  writeln('Завершено, нажмите Enter.');
  readln;
end.
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Помощь начинающему

Сообщение Leon » 03.12.2012 00:35:21

Здравствуйте всем.Поморочался тут немало,ничего толкового не получилось.Вот и решил побеспокоить уважаемых наших экспертов.
Значит есть задача.Отдельная программа имет окно с таблицей,в которую вручную с клавиатуры заносятся некоторые значения.Ввожу я,например в ячейку таблицы число 25,нажимаю ВВод и курсор скачет в другую ячейку.Я решил сообразить на Делфи некую свою программку,которая бы заполняла эту таблицу автоматом,занося во внешнюю таблицу числа из своего внутреннего массива (или из предварительно записанного файла).
Первый вариант кода был такой

procedure TForm1.BitBtn2Click(Sender: TObject);//пробуем передать во внешнюю таблицу числа 92 и 15
var
wnd: HWND;
N:byte;
begin
wnd := FindWindow(nil,'Ex_table');//"Ex_table" таково имя внешней таблицы
if wnd <>0 then
begin
wnd:=FindWindowEx(wnd, 0, 'Edit',nil);
SetForegroundWindow(wnd);
Sleep(500);
keybd_event(Ord('9'), 0, 0, 0);//имитация нажатия клавиши 9
keybd_event(Ord('9'), 0, KEYEVENTF_KEYUP, 0);//имитация отпускания клавиши 9
keybd_event(Ord('2'), 0, 0, 0);//имитация нажатия клавиши 2
keybd_event(Ord('2'), 0, KEYEVENTF_KEYUP, 0);//имитация отпускания клавиши 2
keybd_event($0d, 0, 0, 0);//клавиша ENTER
keybd_event($0d, 0, KEYEVENTF_KEYUP, 0);

//для числа "15" код аналогичный
end;
end;

Из этого кина ничего не вышло.Процедура сработала,но внешняя таблица осталась пустой
Тогда попробовал по-другому.

Procedure EmulateKey(VKey: Integer);
Begin
PostMessage(FindWindow(Nil, 'Ex_table'), Wm_KeyDown, VKey, 1);
Sleep(200);
PostMessage(FindWindow(Nil, 'Ex_table'), Wm_KeyUp, VKey, 1);
Sleep(200);
End;

procedure TForm1.BitBtn2Click(Sender: TObject);//пробуем передать во внешнюю таблицу числа 92 и 15
begin
EmulateKey(Ord('9');
EmulateKey(Ord('2');
....
end;

И из этого также...

Не знаю,что можно предпринять еще.Может я что-нить не так написал или дал неверные параметры? Все скатано из Интернета.Писали люди вроде знающие,а толку нет... Эксперты,помогите,плиз. :roll:
Leon
новенький
 
Сообщения: 65
Зарегистрирован: 30.03.2011 09:27:02

Пред.След.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru