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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 07.12.2009, 19:37   #1
СветланаRerum
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 10
По умолчанию Помогите,пожалуйста..Паскаль..

У меня 2 задачи..Совершенно не получается "довести до ума"..Помогите,пожалуйста..

Значит,вот: 1. Определите, являются ли вводимые символы правильной записью вещественного числа (возможно, со знаком). Ввод продолжать до нажатия ‘Home’ на дополнительной клавиатуре.. Самое главное: СТРОКОВЫЙ ТИП использовать НЕЛЬЗЯ.. Всё как бы on-line..

Вот наброски..Program <>;
uses crt;
var c:char;
begin
clrscr;
writeln('Vvedite pravilnoe veshestvennoe 4islo:');
While true do
begin
c:=readkey;
case c of
#43, #45, #46, #48..#57, #69, #101: write©; {cоответственно: "+"/"-", ". ", цифры 0 до 9, "e", "E" }
#0:case readkey of #71: begin
writeln('Vvod zakonchen');
break;
end;
end;
else begin
writeln('Nevernoe 4islo');
break;
end;
end;
end;
readkey;
end.
Не получается разобраться с расположением знаков в вещественном числе..Как оформить, точнее..

2-я задача о массивах: Даны два массива X(5) и Y(8). Составить из них последователь-ность, упорядоченную по убыванию. Диапазон [-20; 20]..

Значит,я слышала,что 2 упорядоченных массива можно "слить" в 1 уорядоченный.. Помогите,пожалуйста... Собственно вот началоrogram pr_10;
uses crt;
const n1=5;n2=8;
type mass1=array[1..n1] of integer;
type mass2=array[1..n2] of integer;
var a: mass1; b: mass2;
i1,j1,i2,j2,i3,i4,k1,k2: byte; r1,r2:integer;
begin
clrscr;
randomize;
For i1:=1 to n1 do
begin
a[i1]:=-20+random(41);
write (a[i1]:6);
writeln
end;
writeln;
randomize;
For i1:=1 to n2 do
begin
b[i1]:=-20+random(41);
write (b[i1]:6);
writeln
end;
for i3:=1 to n1-1 do
begin
for j1:=i3+1 to n1 do
begin
if a[i3]<a[j1] then
begin r1:=a[i3];
a[i3]:=a[j1];
a[j1]:=r1;
end;
end;
end;
writeln;
for k1:=1 to n1 do
write(a[k1]:6);
for i4:=1 to n2-1 do
begin
for j2:=i4+1 to n2 do
begin
if b[i4]<b[j2] then
begin r2:=b[i4];
b[i4]:=b[j2];
b[j2]:=r2;
end;
end;
end;
writeln;
for k2:=1 to n2 do
write(b[k2]:6);



????

readln
end.

Заранее благодарна..
СветланаRerum вне форума
Старый 08.12.2009, 21:46   #2
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
Смех решение

Относительно первой задачи: решается она методом конечного автомата. Рекомендую почитать книгу А. Шень "Программирование: Теоремы и задачи".

Вот написал решение, только писал на Delphi, а не на турбо паскале.
Программа считывает посимвольно символы вводимые с клавиатуры, и берет всё, что может быть числом. Например: -123.456abc. Программа возьмет число -123.456, а остальное выкинет. ReadKey в Delphi нет, поэтому по Home выхода нет, т. к. лень разбираться, как здесь это сделать . Думаю, это можно сделать на паскале так: Вместо Read(Next) написать Next := ReadKey; if Next = номер кнопки Home then Break;

И числа типа 1e+12 программа не воспринимает . В указанной книге есть что-то похожее

вот собственно мое решение:

Код:
function Digit(C: Char): Boolean;
begin
  Digit := C in ['0'..'9'];
end;

function Solve(var _result: Real): Boolean;
var
  state: (Accept, Error, Initial, IntPart, DecPoint, FracPart);
  Minus: Boolean;
  Next: Char;
  step: Real;
begin
  _result := 0;
  Minus := False;
  state := Initial;
  while True do
  begin
    Read(Next);
    if state = Initial then
    begin
      if Digit(Next) then
      begin
        state := IntPart; {после начала целой части}
        _result := Ord(Next) - Ord('0');
      end
      else if Next = '-' then
      begin
        if Minus then
        begin
          state := Error;
          Break;
        end
        else
          Minus := True;
      end
      else
      begin
        state := Error;
        Break;
      end;
    end
    else if state = IntPart then
    begin
      if Digit(Next) then
      begin
        state := IntPart;
        _result := 10 * _result + Ord(Next) - Ord('0');
      end
      else if Next = '.' then
      begin
        state := DecPoint; {после десятичной точки}
        step := 0.1;
      end
      else
      begin
        state := Accept;
        Break;
      end;
    end
    else if state = DecPoint then
    begin
      if Digit(Next) then
      begin
        state := FracPart;
        _result := _result + (Ord(Next) - Ord('0')) * step;
        step := step / 10;
      end
      else
      begin
        state := Error; {должна быть хоть одна цифра}
        Break;
      end;
    end else if state = FracPart then
    begin
      if Digit(Next) then
      begin
        state := FracPart;
        _result := _result + (Ord(Next) - Ord('0')) * step;
        step := step / 10;
      end
      else
      begin
        state := Accept;
        Break;
      end;
    end
  end;
  if Minus then _result := -_result;
  Solve := state = Accept;
end;

var
  _result: Real;
begin
  WriteLn;
  if not Solve(_result) then WriteLn('Неправильный ввод')
  else WriteLn('Введенное число: ', _result);
  ReadLn;
  ReadLn;
end.
Alex_FF вне форума
Старый 01.01.2010, 10:36   #3
СветланаRerum
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 10
По умолчанию

Спасибо огромное вам,Алекс,за содействие!!..=))
Вы даже не представляете с какой попытки эти работы были сданы,на вот уже завершившейся зачётной неделе..и в каком виде они дошли.. =D
В общем..Ещё раз вам троекратное спасибо..=))
С Новым Годом!)
СветланаRerum вне форума
Старый 01.01.2010, 19:50   #4
Zugelman
Пользователь
 
Регистрация: 08.04.2009
Сообщений: 50
По умолчанию

еще можно попробывать серез репит унтил
repeat
if keypress then c:= readkey
end;
until с=27 (это escape если не ошибаюсь)
Zugelman вне форума
Старый 01.01.2010, 21:27   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

То СветланаRerum
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Вы не знали? Почитайте правила Форума, раздела...
Модератор
mihali4 вне форума
Старый 29.03.2010, 14:53   #6
СветланаRerum
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 10
По умолчанию

М? :-) Ха-хах..
СветланаRerum вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль помогите пожалуйста RrR5 Помощь студентам 7 26.01.2009 01:42
Помогите пожалуйста с зачетом (Паскаль) One.Love Помощь студентам 2 03.10.2008 23:20
Помогите пожалуйста. Паскаль LLIypLLIyH Помощь студентам 7 12.06.2008 21:01
помогите пожалуйста!!! Паскаль светлана Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2006 20:45