Pascal работы (проверить сделанные, найти ошибки, доделать).

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

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

Pascal работы (проверить сделанные, найти ошибки, доделать).

Сообщение omsk_mail » 01.02.2010 14:49:26

программисты данного ресурса. Взываю к Вашему милосердию. Помогите с работами для института, ваще полная ж... Горю, нужно сдавать работы.
Вот что у меня есть и что еще нужно:
Задание на создание программы (ветвление)

Вопрос: Для двух чисел Х и У, вводимых с клавиатуры, на экран дисплея вывести sin большего числа и cos меньшего.
Ответ:
Код: Выделить всё
program xy;

uses crt;

var
   x, y: real;

begin
   ClrScr;
   Write  ('Введите число X:');
   ReadLn(x);
   WriteLn;
   Write  ('Введите число Y:');
   ReadLn(y);
   WriteLn;

   If x = y then
   begin
   Writeln('Числа Х и Y равны. Запустите программу еще раз с разными значениями Х и Y');
   ReadLn;
   exit;
   end;

   If x > y then
   begin
   writeln('Большим является X и синус числа равен:',sin(x):3:3);
   writeln('Меньшее - Y и его косинус:',cos(y):3:3);
   end
   else
   begin
   writeln('Большим является Y и синус числа равен:',sin(y):3:3);
   writeln('Меньшее - X и его косинус:',cos(x):3:3);
   end;

   Readln;
end.

Для введенного целого числа определить, делится ли оно нацело на два, три или на пять.
Решения и листинга нет.
Необходимо сделать.!!!

Вопрос:Линейные структуры, стандартные функции -- Найти значение функции
где a=0,5, b=3,2. Значение x>0 (тип данных: Real) вводится с клавиатуры.
Решение:
Код: Выделить всё
program func;

uses crt;

const
     a = 0.5;
     b = 3.2;

var
   f, x: real;

begin

   ClrScr;
   Write('Введите число X, оно должно быть > 0: ');
   ReadLn(x);
   Writeln;

   If x <= 0 then
   begin
   writeln('Число X <= 0. Запустите программу заново с Х > 0.');
   readln;
   exit;
   end;

   f := exp(2*x)*sin(a+x)/cos(a+x)-exp(ln(b)*3*x)*sin(b-x)/cos(b-x);

   writeln('Значение функции f = e^2x*tg(a+x) - b^3x*tg(b-x), при a = 0.5, b = 3.2,  равно: ',f:5:3);
   readln;
end.

Вопрос: Ветвление -- Даны две точки: A(x1, y1) и B(x2, y2). Определить, какая из точек находится ближе к началу координат. Координаты точек вводятся с клавиатуры
Решение:
Код: Выделить всё
program koor;

uses crt;

var
   x1,x2,y1,y2 : integer;
   res1, res2  : real;

begin
   ClrScr;
   Write  ('Введите через пробел координаты точки А:');
   Read(x1);
   Read(y1);
   WriteLn;
   Write  ('Введите через пробел координаты точки B:');
   Read(x2);
   Read(y2);
   WriteLn;

   res1 := sqrt(sqr(x1)+sqr(y1));
   res2 := sqrt(sqr(x2)+sqr(y2));

   if res1 = res2 then
   begin
   writeln('Точки A и B симметричны отностительно начала координат');
   ReadLn;
   exit;
   end;

   if res1 < res2 then
   writeln('Точка А находится ближе к началу координат.')
   else
   writeln('Точка B находится ближе к началу координат.');

   Readln;
end.

Вопрос:Циклы (все три вида: For, While, Repeat) -- Дана последовательность из N произвольных целых чисел. Написать программу, которая определяет, сколько в этой последовательности отрицательных чисел, кратных 5
Ответ:
Код: Выделить всё
program sequence;

uses crt;

var
   seq: array[1..100] of integer;
   n, i, cnt: integer;
   r: real;


begin
     clrscr;
     write('Введите длину последовательности чисел: ');
     readln(n);
     for i:=1 to n do
       begin
           Write('Введите значение ',i,' элемента массива: ');
           readln(seq[i]);
       end;

     for i:=1 to n do
         if (seq[i] < 0) and (abs(frac(seq[i]/5)) = 0) then
         cnt := cnt + 1;

     write('В последоватеьности из ',n,' чисел: ');
     for i:=1 to n do
           Write(seq[i],' ');

     writeln;
     write('В этой последовательности отрицатеьных чисел кратных 5 - ',cnt);
     readln;

end.

Вопрос:Двумерные массивы -- Заполнить массив по следующему правилу: элементы главной диагонали равны 3, ниже главной диагонали – 1, а выше – сумме индексов
Ответ:
Код: Выделить всё
program arrays;

uses crt;

var
   seq: array [1..100,1..100] of integer;
   i, j, m, n: integer;

begin
     clrscr;
     write('Через пробел введите размерность двумерного массива: ');
     read(m);
     readln(n);
     writeln('Массив заполнился следующим образом:');

   for i:=1 to m do
       begin
       for j:=1 to n do
       begin
       if i < j then
       seq[i,j] := i + j;
       if i = j then
       seq[i,j] := 3;
       if i > j then
       seq[i,j] := -1;
       write(seq[i,j],' ');
       end;
       writeln;
       end;

   readln;

end.

Вопрос:Строковые величины -- Найти, сколько раз в предложении встречаются заглавные гласные буквы
Ответ:
Код: Выделить всё
program strings;

uses crt;

const
     st = 'АЕИОУЫЭЮЯ';

var
   str: string;
   i, cnt: integer;

begin
     clrscr;
     write('Введите строку для обработки: ');
     readln(str);

     for i := 1 to length(str) do
         if pos(str[i],st) <> 0 then
         cnt := cnt + 1;

     writeln;
     writeln('В строке: ',str);
     writeln;
     write('Заглавных гласных букв - ',cnt);
     readln;
end.

Вопрос:Записи -- Построить массив записей о студентах. Каждая запись должна содержать фамилию, группу, срок обучения. Рассчитать для каждого студента, сколько месяцев осталось до окончания обучения
Ответ:
Код: Выделить всё
program records;

uses crt;

type
    Tinfo = record
         Family: string[20];
         Group: string[5];
         Srok: integer;
         end;

var
    info: array [1..100] of Tinfo;
    term: array [1..100] of Integer;
    n, i, tmp, err: integer;


begin
     clrscr;
     write('Введите количество студентов: ');
     readln(n);
     Writeln('Через пробел введите фамилию студента, его группу и срок обучения в месяцах: ');
     for i := 1 to n do
         begin
         with info[i] do
              begin
              write('Введите фамилию ',i, ' студента: ');
              readln(family);
              write('Введите группу ',i, ' студента: ');
              readln(group);
              write('Введите срок обучения ',i, ' студента: ');
              read(srok);
              end;
         end;

     for i := 1 to n do
         begin
         with info[i] do
              begin
              val(copy(group,1,1),tmp,err);
              if err = 0 then
              term[i] := srok - tmp  * 12;
              end;
         end;

     for i := 1 to n do
         begin
         writeln('Для студента ',info[i].family,' осталось учиться ',term[i],' месяцев');
         end;
     readln;
end.

Все. Вопрос по поводу кодировки языка. Как сделать что-б по русски было???
Не работает переключение раскладки ctrl+shift правый
Прошу Вас помочь и проверить код и правильность листинга
Аватара пользователя
omsk_mail
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.02.2010 13:46:23

Re: Pascal работы (проверить сделанные, найти ошибки, доделать).

Сообщение v-t-l » 01.02.2010 15:31:49

omsk_mail писал(а):Для введенного целого числа определить, делится ли оно нацело на два, три или на пять.

Код: Выделить всё
var x: integer;
...
if (x mod 2)=0 then
...
if (x mod 3)=0 then
...
if (x mod 5)=0 then
...
v-t-l
энтузиаст
 
Сообщения: 733
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Pascal работы (проверить сделанные, найти ошибки, доделать).

Сообщение Brainenjii » 01.02.2010 16:51:54

Вопрос:Строковые величины -- Найти, сколько раз в предложении встречаются заглавные гласные буквы

Предложенный вариант не учитывает одиннаковые заглавные гласные (например строка 'АААААА'), не работает с UTF8 и не реагирует на букву Ё(!). Мой вариант:
Код: Выделить всё
Const
  MyString = 'ААББЮЮВВГГУЁЖ';
Var
  aVoices, aString, aVoice: String;
  aCount: Integer;
Begin
  aVoices := 'А_Е_Ё_И_О_У_Ы_Э_Ю_Я_';
  aCount := 0;
  While Not(Pos('_', aVoices) = 0) Do
    Begin
      aVoice := Copy(aVoices, 1, Pos('_', aVoices) - 1);
      aString := MyString;
      While Not(Pos(aVoice, aString) = 0) Do
        Begin
          Inc(aCount);
          Delete(aString, 1, Pos(aVoice, aString));
        End;
      Delete(aVoices, 1, Pos('_', aVoices));
    End;
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Pascal работы (проверить сделанные, найти ошибки, доделать).

Сообщение omsk_mail » 02.02.2010 06:30:01

v-t-l писал(а):
omsk_mail писал(а):Для введенного целого числа определить, делится ли оно нацело на два, три или на пять.

Код: Выделить всё
var x: integer;
...
if (x mod 2)=0 then
...
if (x mod 3)=0 then
...
if (x mod 5)=0 then
...


А этот вариант правильный или нет
Код: Выделить всё
var n:integer;
begin
writeln('vvedite chislo');
readln(n);
if (n mod 5=0) or (n mod 3=0)or (n mod 2=0) then writeln('da')
else writeln('net');
readln;
end.


Добавлено спустя 11 минут:
Brainenjii писал(а):
Вопрос:Строковые величины -- Найти, сколько раз в предложении встречаются заглавные гласные буквы

Предложенный вариант не учитывает одиннаковые заглавные гласные (например строка 'АААААА'), не работает с UTF8 и не реагирует на букву Ё(!). Мой вариант:
Код: Выделить всё
Const
  MyString = 'ААББЮЮВВГГУЁЖ';
Var
  aVoices, aString, aVoice: String;
  aCount: Integer;
Begin
  aVoices := 'А_Е_Ё_И_О_У_Ы_Э_Ю_Я_';
  aCount := 0;
  While Not(Pos('_', aVoices) = 0) Do
    Begin
      aVoice := Copy(aVoices, 1, Pos('_', aVoices) - 1);
      aString := MyString;
      While Not(Pos(aVoice, aString) = 0) Do
        Begin
          Inc(aCount);
          Delete(aString, 1, Pos(aVoice, aString));
        End;
      Delete(aVoices, 1, Pos('_', aVoices));
    End;



Выдает ошибку непредвиденный конец файла
Аватара пользователя
omsk_mail
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.02.2010 13:46:23

Re: Pascal работы (проверить сделанные, найти ошибки, доделать).

Сообщение Light13 » 02.02.2010 08:06:31

omsk_mail писал(а):Выдает ошибку непредвиденный конец файла

Мдя.

Не пробовали учить, иногда помогает :)

Добавить в конец End.
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: Pascal работы (проверить сделанные, найти ошибки, доделать).

Сообщение omsk_mail » 02.02.2010 14:24:59

Light13 писал(а):
omsk_mail писал(а):Выдает ошибку непредвиденный конец файла

Мдя.

Не пробовали учить, иногда помогает :)

Добавить в конец End.



Нет не пробовал учить так, как считаю его нет необходимости учить и в конце кода есть END; может нужно было так END.

Добавлено спустя 12 минут 33 секунды:
omsk_mail писал(а):
v-t-l писал(а):
omsk_mail писал(а):Для введенного целого числа определить, делится ли оно нацело на два, три или на пять.

Код: Выделить всё
var x: integer;
...
if (x mod 2)=0 then
...
if (x mod 3)=0 then
...
if (x mod 5)=0 then
...


А этот вариант правильный или нет
Код: Выделить всё
var n:integer;
begin
writeln('vvedite chislo');
readln(n);
if (n mod 5=0) or (n mod 3=0)or (n mod 2=0) then writeln('da')
else writeln('net');
readln;
end.


Добавлено спустя 11 минут:
Brainenjii писал(а):
Вопрос:Строковые величины -- Найти, сколько раз в предложении встречаются заглавные гласные буквы

Предложенный вариант не учитывает одиннаковые заглавные гласные (например строка 'АААААА'), не работает с UTF8 и не реагирует на букву Ё(!). Мой вариант:
Код: Выделить всё
Const
  MyString = 'ААББЮЮВВГГУЁЖ';
Var
  aVoices, aString, aVoice: String;
  aCount: Integer;
Begin
  aVoices := 'А_Е_Ё_И_О_У_Ы_Э_Ю_Я_';
  aCount := 0;
  While Not(Pos('_', aVoices) = 0) Do
    Begin
      aVoice := Copy(aVoices, 1, Pos('_', aVoices) - 1);
      aString := MyString;
      While Not(Pos(aVoice, aString) = 0) Do
        Begin
          Inc(aCount);
          Delete(aString, 1, Pos(aVoice, aString));
        End;
      Delete(aVoices, 1, Pos('_', aVoices));
    End;



Выдает ошибку непредвиденный конец файла

И Этот вариант не работает а предложенный мною выше работает тока Ё добавить и все.

Добавлено спустя 35 минут 59 секунд:
Посмотрите где зарыта собака почему не работает
Код: Выделить всё
program koor;

uses crt;

var
   x1,x2,y1,y2 : integer;
   res1, res2  : real;

begin
   ClrScr;
   Write  ('Введите через пробел координаты точки А:');
   Read(x1);
   Read(y1);
   WriteLn;
   Write  ('Введите через пробел координаты точки B:');
   Read(x2);
   Read(y2);
   WriteLn;

   res1 := sqrt(sqr(x1)+sqr(y1));
   res2 := sqrt(sqr(x2)+sqr(y2));

   if res1 = res2 then
   begin
   writeln('Точки A и B симметричны отностительно начала координат');
   ReadLn;
   exit;
   end;

   if res1 < res2 then
   writeln('Точка А находится ближе к началу координат.')
   else
   writeln('Точка B находится ближе к началу координат.');

   Readln;
end.


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

uses crt;

type
    Tinfo = record
         Family: string[20];
         Group: string[5];
         Srok: integer;
         end;

var
    info: array [1..100] of Tinfo;
    term: array [1..100] of Integer;
    n, i, tmp, err: integer;


begin
     clrscr;
     write('Введите количество студентов: ');
     readln(n);
     Writeln('Через пробел введите фамилию студента, его группу и срок обучения в месяцах: ');
     for i := 1 to n do
         begin
         with info[i] do
              begin
              write('Введите фамилию ',i, ' студента: ');
              readln(family);
              write('Введите группу ',i, ' студента: ');
              readln(group);
              write('Введите срок обучения ',i, ' студента: ');
              read(srok);
              end;
         end;

     for i := 1 to n do
         begin
         with info[i] do
              begin
              val(copy(group,1,1),tmp,err);
              if err = 0 then
              term[i] := srok - tmp  * 12;
              end;
         end;

     for i := 1 to n do
         begin
         writeln('Для студента ',info[i].family,' осталось учиться ',term[i],' месяцев');
         end;
     readln;
end.


Добавлено спустя 21 час 28 минут 25 секунд:
Учителя и ученики, что нет желающих проверить и помочь человеку или очень сложно. Есть на форуме программисты которые смогут уделить 10 минут на проверку.
Аватара пользователя
omsk_mail
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.02.2010 13:46:23

Re: Pascal работы (проверить сделанные, найти ошибки, доделать).

Сообщение AbakAngelSoft » 03.02.2010 12:51:21

Желания нет помогать, после Ваших реплик:
omsk_mail писал(а):Нет не пробовал учить так, как считаю его нет необходимости учить

А что считаете необходимым учить? И на кого учитесь?
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: Pascal работы (проверить сделанные, найти ошибки, доделать).

Сообщение omsk_mail » 03.02.2010 13:05:39

Просто пока не написал ващее никто не заинтересовался

Добавлено спустя 1 минуту 32 секунды:
Я php знаю а паскаль не учил, вот воззвал о помощи и нет помощи (а с института долбят,долбят)
Аватара пользователя
omsk_mail
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.02.2010 13:46:23

Re: Pascal работы (проверить сделанные, найти ошибки, доделать).

Сообщение Light13 » 04.02.2010 07:32:56

omsk_mail писал(а):Посмотрите где зарыта собака почему не работает
Вроде все работает - немного подправил, чтоб к консоли не было кракозябр :)
Код: Выделить всё
uses crt,
  FileUtil;//чтобы этот модуль компилятор нашел - нужно добавить в зависимости проекта пакет LCL

var
   x1,x2,y1,y2 : integer;
   res1, res2  : real;

begin
  ClrScr;
  Write  (UTF8ToConsole('Введите через пробел координаты точки А:'));
  Read(x1);
  Readln(y1);//лучше буфер ввода очищать

  Write (UTF8ToConsole('Введите через пробел координаты точки B:'));
  Read(x2);
  Readln(y2);//лучше буфер ввода очищать

  res1 := sqrt(sqr(x1)+sqr(y1));
  res2 := sqrt(sqr(x2)+sqr(y2));

  if res1 = res2 then
    writeln(UTF8ToConsole('Точки A и B симметричны отностительно начала координат'))
  else
    if res1 < res2 then
      writeln(UTF8ToConsole('Точка А находится ближе к началу координат.'))
    else
      writeln(UTF8ToConsole('Точка B находится ближе к началу координат.'));

  Readln;
end.


Добавлено спустя 6 минут 55 секунд:
omsk_mail писал(а):Записи -- Построить массив записей о студентах. Каждая запись должна содержать фамилию, группу, срок обучения. Рассчитать для каждого студента, сколько месяцев осталось до окончания обучения


Задание не совсем корректно - нельзя узнать сколько осталось учиться, не зная дату поступления.
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск


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

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

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

Рейтинг@Mail.ru