Страница 1 из 2

Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 09 янв 2008, 00:16
Black89
Задача1
Дана последовательность содержащая от 2 до 30 слов, в каждом из которых от 1 до 10 символов; между соседними словами- произвольное число пробелов, за последним словом точка. Напечатать эту же последовательность, удалив из всех слов цифры и символы подчёркивания

Задача2
Получить целочисленную матрицу порядка 7, элементами которой являются числа 1,2,...,49, расположенные в ней по спирали

Задача3
Для заданных Х0, dx и М вычислить множество значений {f1, f2,...,fM} функции 1/Х(в квадрате) в точках x0, xo + dx, x0 + 2dx,..., xM в области 0,5< X ə

Задача4
Составить программу, которая печатает true, если среди первых 3х цифр из дробной части заданного положительного вещественного числа есть цифра 5 и false в противном случае

Задача5
Написать пргу, которая для целого числа К(1≤К≤99) напечатать фразу «мне К лет» учитывая при этом, что при некоторых значениях К слово «лет» надо заменить на слово «год» или «года»

Re: Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 09 янв 2008, 09:21
Temka
5. program temka;
var k:Real;
begin
Writeln('Введите возраст');
Readln(k);
if (k=1) then
Writeln('Мне ',k,' год')else
If (k=2) or (k=3) or (k=4) then
Writeln('Мне ',k,' года')else
Writeln('Мне ',k,' лет')
end.

Re: Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 09 янв 2008, 10:20
Turboworld
Temka писал(а):5. program temka;
var k:Real;
begin
Writeln('Введите возраст');
Readln(k);
if (k=1) then
Writeln('Мне ',k,' год')else
If (k=2) or (k=3) or (k=4) then
Writeln('Мне ',k,' года')else
Writeln('Мне ',k,' лет')
end.
Тихий ужос :) а если введу 22, то что тогда выведет? Ответ - ничего :) хотя К от 1 до 99 ;)

К тому же выведет количество лет в виде 1.0000000E+00 - типа такого :)

В общем низачот :)

Re: Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 09 янв 2008, 11:16
Хыиуду
Turboworld, нет, почему же? "Мне 2.2000000Е+01 лет".

1. while pos('0',s)<>0 do delete(s,pos('0',s),1) - повторить для всех остальных цифр и для символа _
4. writeln(pos('5', inttostr(trunc(x*1000) mod 1000))>0). Если на Паскале - описать функцию inttostr (перевод числа в строку) через процедуру str
5. В программе Темки во всех условиях k надо заменить на (k mod 10), а ее тип сделать byte

Re: Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 09 янв 2008, 12:32
Turboworld
Хыиуду писал(а):Turboworld, нет, почему же? "Мне 2.2000000Е+01 лет".
угу, просто этот "шедевр" до конца не проглядел :D

Re: Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 09 янв 2008, 12:54
Black89
СПАСИБО!!!!!!!!!!

Re: Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 09 янв 2008, 14:27
BBB
Хыиуду писал(а):Turboworld, нет, почему же? "Мне 2.2000000Е+01 лет".
5. В программе Темки во всех условиях k надо заменить на (k mod 10), а ее тип сделать byte
Ну не совсем все. В интервале от 11 до 20 везде будет "лет", вне зависимости от (k mod 10).

Re: Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 10 янв 2008, 00:10
Serge_Bliznykov
Black89,
&quot писал(а):Получить целочисленную матрицу порядка 7, элементами которой являются числа 1,2,...,49, расположенные в ней по спирали
решение:

Код: Выделить всё

const
  MaxArray = 7;
type 
  MyArrayType = array [1..MaxArray, 1..MaxArray] of integer; 
  
procedure Spiral(var M : MyArrayType); 
var 
  k, MaxStep, PosX, PosY : integer;
  i: integer;
BEGIN
  i := 1;
  PosX := 1;
  PosY := 0;
  MaxStep := MaxArray;

  while i <= MaxArray*MaxArray do
  begin
    {движение вправо}
    for k:=1 to MaxStep do
    begin
      Inc(PosY);
      M[PosX, PosY] := i;
      Inc(i);
    end;
    Dec(MaxStep);
    {движение вниз по спирали}
    for k:=1 to MaxStep do 
    begin     
      Inc(PosX);
      M[PosX, PosY] := i;
      Inc(i);
    end;
    {движение влево по спирали}
    for k:=1 to MaxStep do 
    begin     
      Dec(PosY);
      M[PosX, PosY] := i;
      Inc(i);
    end;
    Dec(MaxStep);
    {движение вверх по спирали}
    for k:=1 to MaxStep do 
    begin     
      Dec(PosX);
      M[PosX, PosY] := i;
      Inc(i);
    end;      
  end;
end;

var
  Matrix : MyArrayType;
  i, j   : integer;

BEGIN
  Spiral(Matrix);
  for i:=1 to MaxArray do
    begin
      for j:=1 to MaxArray do
        Write(Matrix[i,j]:4);
      WriteLn;
    end;
END.

Re: Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 10 янв 2008, 00:21
Serge_Bliznykov
&quot писал(а):Написать пргу, которая для целого числа К(1≤К≤99) напечатать фразу «мне К лет» учитывая при этом, что при некоторых значениях К слово «лет» надо заменить на слово «год» или «года»
решение:

Код: Выделить всё

{если число 
  заканчивается на 1 - год
  - на 2..4 - года
 остальное всё - лет
 исключения - 11 12 13 - лет}
var
  k : integer;
  sEnding : string;
begin
 repeat
  Writeln;
  Write('Введите возраст (0 - выход из программы): ');
  Readln(k);

  {обработка исключении 11 12 13}
  if ((k mod 100)>=11) and ((k mod 100)<=13) then
      sEnding := ' лет'
  else
    case (k mod 10) of
     1: sEnding := ' год';
     2..4: sEnding := ' года';
    else
     sEnding := ' лет';
    end;

  WriteLn('Возраст составляет ',k:1,sEnding);
 until k=0;
end.

Re: Помогите решить несколько задачек на паскале!!!! PLEEEEEEEEASE!!!!

Добавлено: 10 янв 2008, 09:42
BBB
Serge_Bliznykov писал(а):решение:

Код: Выделить всё

.................
  {обработка исключения 11 12 13}
  if ((k mod 100)>=11) and ((k mod 100)<=13) then
      sEnding := ' лет'
  else
.................
Все-таки, "исключительный период" - от 11 до 14, а не до 13 (а то получим в результате текст: 'Возраст составляет 14 года'). Ну, или, чтобы не париться, можно вообще считать от 11 до 20.
Т.е. вышеприведенное условие следует заменить на:

Код: Выделить всё

.................
  {обработка исключения 11 - 14, или, чтобы не париться: 11-20 }
  if ((k mod 100)>=11) and ((k mod 100)<=20) then
      sEnding := ' лет'
  else
.................