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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2008, 16:18   #1
DarkAn
 
Аватар для DarkAn
 
Регистрация: 02.11.2008
Сообщений: 5
По умолчанию Паскаль, несколько задач.

Здравствуйте, уважаемые!
Прошу помочь заочнику. Паскаль увидел впервые. Освоение идёт тяжело.
Осталось нерешенных две задачи.
Прошу не готового решения, а хотел бы понять, как это делается.

Функции
Написать программу проверки равенства двух векторов.

Массивы
Дан массив целых чисел, состоящий из 15 элементов. Заполнить с клавиатуры (случайно). Определить, есть ли в данном массиве пара соседних элементов с суммой, равной заданному числу.

Кое-что уже решил сам и с помощью интернета. Проверьте, пожалуйста, насколько правильно.

Функции
Найти: y=max(a,b,c)+min(a,b,c).

{Найти: y=max(a,b,c)+min(a,b,c).}
Program Func_3_var;
uses CRT;
var a, b, c, y: integer;
{Функция нахождения максимального числа}
function Max(a2, b2, c2: integer): integer;
var maxN: integer;
begin
maxN:=a2;
if b2>maxN then maxN:=b2;
if c2>maxN then maxN:=c2;
writeln('Максимальное число - ', maxN);
Max:=maxN;
end;
{Функция нахождения минимального числа}
function Min(a3, b3, c3: integer): integer;
var minN: integer;
begin
minN:=a3;
if b3<minN then minN:=b3;
if c3<minN then minN:=c3;
writeln('Минимальное число - ', minN);
Min:=minN;
end;

begin
cls;
writeln('Введите три числа - a, b, c');
readln(a, b, c);
y:= Max(a,b,c)+Min(a,b,c);
Writeln('Сумма максимальноего и минимального чисел = ', y);
end.

Процедуры
Привести дробь вида a/b к несократимому виду.

{Привести дробь вида a/b к несократимому виду.}
Program Sokr_drobi_3v;
uses CRT;
var a, b, c, d: integer;
{Процедура сокращения дроби}
procedure SOKR(x,y: integer; var m,n: integer);
var NOD: integer;{NOD - Наибольший общий делитель}
begin
If (x < y) Then NOD := x
Else NOD := y;
While Not( (x mod NOD = 0) and (y mod NOD = 0) ) do
NOD := NOD - 1;
m:=x div NOD;
n:=y div NOD;
end;

begin
writeln('Введите числитель');
Readln(a);
writeln('Введите знаменатель');
Readln(b);
Writeln;
write(a,'/',b,' = ');
SOKR(a,b,c,d);
writeln (c, '/', d);
end.

Написать программу транспонирования матрицы. В основной про-грамме должны быть только вызовы процедур

{Задание: Написать программу транспонирования матрицы.
В основной программе должны быть только вызовы процедур.}
Program TransMatrix;
Uses CRT;
Type Matrix = array [1..10, 1..10] of integer;
Var
A: matrix;
z: integer;

{Процедура ввода элементов матрицы}
{Параметры: z - размер, А - матрица}
Procedure Vvod (z: integer; Var A: matrix);
Var
i, j: integer;
Begin {Vvod}
For i:= 1 to z do
For j:= 1 to z do
Begin {Ввод элементов}
Write ('[',i,',',j,']=');
Read (A [i, j]);
End; {Ввод элементов}
Writeln;
For i:= 1 to z do
Begin {Вывод элементов}
For j:= 1 to z do
Write (A [i,j]:5);
Writeln;
End {Вывод элементов}
End; {Vvod}

{Процедура вывода элементов матриц}
{Параметры: А - матрица, z - размер}
Procedure Vyvod (z: integer; A: matrix);
Var
i, j:byte;
Begin {Vyvod}
For i:= 1 to z do
Begin
For j:= 1 to z do
Write (A [i,j]:5);
Writeln;
End
End; {Vyvod}

{Процедура транспонирования матрицы}
{Переменные: А - начальный массив, В - массив результат}
Procedure Tran (A: matrix; z: integer; Var B: matrix);
Var
i, j: integer;
Begin {Tran}
For i:= 1 to z do
For j:= 1 to z do
B [i, j]:= A [j, i]
End; {Tran}

Begin
Writeln ('Введите размер матрицы (A): ');
Read (z);
Writeln;
Writeln ('Введите ', z*z, ' элемента(ов) матрицы: ');
Writeln ('Матрица A: ');
Vvod (z, A); {Процедура ввода элементов массива}
Writeln;
Writeln ('Результат транспонирования матрицы (А): ');
Tran (A, z, A); {Процедура транспонирования матрицы}
Vyvod (z, A); {Процедура вывода элементов матрицы}
End.

Массивы
Заменить все четные элементы массива на их квадраты, а нечетные удвоить.

{Заменить все четные элементы массива на их квадраты, а нечетные удвоить.}
program chet_massiv;
uses crt;
const n=9;
type arr=array[0..n] of integer;
var i:byte;
a:arr;
begin
writeln('Введите 10 элементов массива');
for i:=0 to n do
begin
write('A[',i,']= ');
readln(a[i]);
end;
for i:=0 to n do
if not odd(a[i]) {Проверка на четность элемента массива}
then a[i] := a[i]*a[i] {Если четное, то возводится в квадрат}
else a[i]:=a[i]*2; {Иначе умножается на 2}
writeln('Вывод на экран новых значений массива');
for i:=0 to n do writeln('A[',i,']= ',a[i]);{Вывод на экран новых значений массива}
end.

Последний раз редактировалось DarkAn; 02.11.2008 в 16:24. Причина: Дополнение
DarkAn вне форума Ответить с цитированием
Старый 02.11.2008, 18:01   #2
Cannibal
Форумчанин
 
Регистрация: 17.02.2008
Сообщений: 191
По умолчанию

Цитата:
Массивы
Дан массив целых чисел, состоящий из 15 элементов. Заполнить с клавиатуры (случайно). Определить, есть ли в данном массиве пара соседних элементов с суммой, равной заданному числу.
делаешь цикл по for от 1 до 14, в цикле делаешь условие: если сумма текущего элемента и следующего равна заданному числу, то логической переменной присваиваешь "Истина"(Перед циклом присвой "Ложь").

Цитата:
Функции
Написать программу проверки равенства двух векторов.
что подразумевается под равенством? полное совпадение, равенство длинн или равенство длинн и одннаправленность.

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

З.Ы. на будущие: оформляй код тегом [CODЕ][/CODE]
Mathematicians often mix up Christmas and Halloween, because Dec.25=Oct.31.

Последний раз редактировалось Cannibal; 02.11.2008 в 18:13.
Cannibal вне форума Ответить с цитированием
Старый 03.11.2008, 00:09   #3
DarkAn
 
Аватар для DarkAn
 
Регистрация: 02.11.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Cannibal Посмотреть сообщение
делаешь цикл по for от 1 до 14, в цикле делаешь условие: если сумма текущего элемента и следующего равна заданному числу, то логической переменной присваиваешь "Истина"(Перед циклом присвой "Ложь").
Провозился вечер, вот что получилось. Правда, работает не так, как хочется.
Код:
{Дан массив целых чисел, состоящий из 15 элементов. 
Заполнить с клавиатуры (случайно). 
Определить, есть ли в данном массиве пара соседних элементов с суммой, 
равной заданному числу.}
program massiv_sravnenie_chisel;
uses crt;   {Использование текстового окна}
const n=15; {Определяем количество элементов масива, циклов}
type arr=array[1..n] of integer;{Указываем тип массива}
var
    i, k, my:integer;
    a:arr;
begin
          writeln('Введите начальное число'); {Ввод заданного числа}
          readln(my);
      writeln('Введите 15 элементов массива');
      for i:=1 to n do {Цикл заполнения массива}
          begin
          write('A[',i,']= ');
          readln(a[i]);
          end;
      for i:= 1 to n do{Цикл вывода массива}
          write (A [i]:5);
          writeln();
      for i:=1 to n-1 do
          for k:=i+1 to n do
              if my=A[i]+A[k] then
              writeln('Есть пара соседних элементов равных ', my,' = ', A[i],' + ', A[k]);
              writeln(' - ');
end.
Цитата:
Цитата:Функции
Написать программу проверки равенства двух векторов.

что подразумевается под равенством? полное совпадение, равенство длинн или равенство длинн и одннаправленность.
Видимо, как хочешь, так и понимай. Условие из методички. Так думаю, что равенство длин.
По программе пока соображений нет. Моск кипит.
DarkAn вне форума Ответить с цитированием
Старый 03.11.2008, 08:00   #4
Cannibal
Форумчанин
 
Регистрация: 17.02.2008
Сообщений: 191
По умолчанию

Код:
program pr1;
var a:array [1..50] of integer;
    i,k,n:integer;
    l:boolean;
begin for i:=1 to 15 do begin
             a[i]:=round(random(20));
             write (a[i]:5)
             end;
        write ('Введите число');
        read(k);
        l:=false;
        for i:=1 to 14 do
             if (a[i]+A[I+1])=k then l:=true;
        writeln(l);
end.
у меня получилось так. по условию ведь не надо, чтобы выводились значения удовлетворяющих условию элементов.

С векторами так:
Вводишь координаты начала (х1;у1) и конца (х2;у2) первого вектора и начала (х3;у3) и конца (х4;у4) второго вектора и делаешь условие нарисованное во вложении
Изображения
Тип файла: bmp Безымянный.bmp (30.8 Кб, 134 просмотров)
Mathematicians often mix up Christmas and Halloween, because Dec.25=Oct.31.
Cannibal вне форума Ответить с цитированием
Старый 03.11.2008, 13:12   #5
DarkAn
 
Аватар для DarkAn
 
Регистрация: 02.11.2008
Сообщений: 5
По умолчанию

Я, всё-таки, пошёл своим путём, без True и False.
Код:
{Дан массив целых чисел, состоящий из 15 элементов. 
Заполнить с клавиатуры (случайно). 
Определить, есть ли в данном массиве пара соседних элементов с суммой, 
равной заданному числу.}
program massiv_sravnenie_chisel;
uses crt;   {Использование текстового окна}
const n=15; {Определяем количество элементов масива, циклов}
type arr=array[1..n] of integer;{Указываем тип массива}
var
    i, my:integer;
    a:arr;
begin
      writeln('Введите начальное число'); {Ввод заданного числа}
      readln(my);
      writeln('Введите 15 элементов массива');
      for i:=1 to n do {Цикл заполнения массива}
          begin
          write('A[',i,']= ');
          readln(a[i]);
          end;
      for i:= 1 to n do{Цикл вывода массива}
          write (A [i]:5);
          writeln();
      for i:=1 to n-1 do
          if my=A[i]+A[i+1] then
          writeln('Есть пара соседних элементов в сумме равных ', my,' - ', A[i],' и ', A[i+1])
          else writeln('Нет элементов');
end.
Надеюсь, что преподователя устроит. Моя заморочка оказалась в том, что я по запарке пытался делать так:
Код:
if my=A[i]+(A[i]+1) then
а нужно было
Код:
if my=A[i]+A[i+1] then
и всё стало намного проще.
Всё. Теперь берусь за вектора.
DarkAn вне форума Ответить с цитированием
Старый 03.11.2008, 13:34   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
Два вектора называются равными, если они совмещаются параллельным
переносом. Это означает, что существует параллельный перенос, который
переводит начало и конец одного вектора соответственно в начало и конец
другого вектора.
Из данного определения равенства векторов следует, что равные векторы
одинаково направлены и равны по абсолютной величине.
Или еще короче:
Цитата:
Если у двух векторов соответствующие координаты равны, то эти векторы равны.
Координаты вектора А: a1=x2-x1, a2=y2-y1; вектора В: b1=x4-x3, b2=y4-y3;
Следовательно, если (х2-х1=х4-х3)and(y2-y1=y4-y3)then RAVNY. Только не по абсолютной величине, а то теряем направленность.
puporev вне форума Ответить с цитированием
Старый 03.11.2008, 15:11   #7
DarkAn
 
Аватар для DarkAn
 
Регистрация: 02.11.2008
Сообщений: 5
По умолчанию Вектора

Благодарю за помощь!
Вот что получилось:
Код:
{Функции
Написать программу проверки равенства двух векторов.}
Program Ravenstvo_Vektorov;
uses crt;
var
   x1, x2, x3, x4, y1, y2, y3, y4: integer;

function RavVect(x1, x2, x3, x4, y1, y2, y3, y4: integer): integer;
     begin
     if (x2-x1=x4-x3)and(y2-y1=y4-y3)then
     RavVect:=1
     else
     RavVect:=0;
     end;
     
  begin
       writeln('Введите координаты векторов');
       writeln('Начало первого вектора Х1,Y1');
       readln(x1, y1);
       writeln('Конец первого вектора Х2,Y2');
       readln(x2, y2);
       writeln('Начало второго вектора Х3,Y3');
       readln(x3, y3);
       writeln('Конец второго вектора Х4,Y4');
       readln(x4, y4);
       if RavVect(x1, x2, x3, x4, y1, y2, y3, y4)=1 then
       writeln ('Вектора равны')
       else
       writeln('Вектора не равны');
  end.
Хотя, мне так кажется, было бы правильнее решить с помощью массивов, но я их как не понял 20 лет назад, так и сейчас не очень...

Последний раз редактировалось DarkAn; 03.11.2008 в 15:13. Причина: Корректировка
DarkAn вне форума Ответить с цитированием
Старый 03.11.2008, 15:18   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
writeln('Введите координаты векторов');
Не совсем верно. Мы вводим координаты концов отрезков, а координаты векторов вычисляем. Массивы здесь не нужны, всего два вектора, вот если бы их много было, тогда был бы смысл. Единственно чем можно украсить, задать точки как записи.
Код:
type Tpoint=record;
                 x1,y1,x2,y2:reall //координаты концов
                 k1,k2:real;  //кординаты вектора
                 end;
var A,B:Tpoint;
puporev вне форума Ответить с цитированием
Старый 03.11.2008, 15:40   #9
DarkAn
 
Аватар для DarkAn
 
Регистрация: 02.11.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Не совсем верно. Мы вводим координаты концов отрезков, а координаты векторов вычисляем. Массивы здесь не нужны, всего два вектора, вот если бы их много было, тогда был бы смысл. Единственно чем можно украсить, задать точки как записи.
Код:
type Tpoint=record;
                 x1,y1,x2,y2:real //координаты концов
                 k1,k2:real;  //кординаты вектора
                 end;
var A,B:Tpoint;
Эту строчку тогда лучше совсем убрать
Код:
writeln('Введите координаты векторов');
Код:
type Tpoint=record;
                 x1,y1,x2,y2:real //координаты концов
                 k1,k2:real;  //кординаты вектора
                 end;
var A,B:Tpoint;
[/QUOTE]
С типами я ещё не знаком, точнее плохо знаком. Лучше воздержусь.
Благодарю за помощь и поддержку!
DarkAn вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйстьа решить несколько задач в Паскале (МАССИВЫ) VisTBacK Помощь студентам 20 20.02.2009 08:32
[C++] Несколько задач Алиса111 Помощь студентам 1 15.01.2008 03:52
writeln (помогите решить несколько задач!) Evgenii Помощь студентам 2 04.01.2008 23:51
Несколько задач Wilda Паскаль, Turbo Pascal, PascalABC.NET 5 05.12.2007 19:03
Пожалуйста помогите исправить несколько задач Shatyn Помощь студентам 5 25.06.2007 20:20