Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Турбо Паскаль. Программирование на Pascal
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]
Модераторы: paradise, KMA
  

xander


Удален

Помогите решить задачи или найти решения задач (Язык программирования Turbo Pascal 7.0)

1) Ввести 4 числа выстроить их по возрастанию, найти среднее арифметическое первых двух и последних двух, получать случайные числа из полученного промежутка. Определить колличество простых чисел и количество чисел кратных 5. Когда разность этих чисел по модулю будет равна 10 закончить программу. Если эта разность не будет достигнута за 10000 проверенных чисел то остановить программу.

2)Даны действительное число X и массив A[n]. В массиве найти два члена, среднее арифметическое которых ближе всего к X.

3) В однамерном массиве с четным количеством элементов (2N) находяться координаты N точек плоскости. Они располагаються в следующем порядке: x1, y1, x2, y2, x3, y3 и т.д.
Определить номера точек, которые могут являться вершинами равнобедренного треуголника.

4) Даны натуральные числа n, m. Найти все натуральные числа меньше n, квадрат суммы цифр которых равен m.

5) Составить программу для нахождения чисел из интервала(M,N) имеющих наибольшее количество делителей.


Всего сообщений: N/A | Присоединился: N/A | Отправлено: 14 дек. 2005 20:51 | IP
miss_graffiti


Долгожитель

поможем. что не получается?

Всего сообщений: 670 | Присоединился: сентябрь 2005 | Отправлено: 14 дек. 2005 21:47 | IP
KMA



Долгожитель


4) Даны натуральные числа n, m. Найти все натуральные числа меньше n, квадрат суммы цифр которых равен m.




Первое, что приходит на ум, это простейший перебор, от 1 до n, если подумать, то можно код и получше написать, но пока думаю такой сойдет.



Var n, i, k:word;
   s, m: longInt;

BEGIN
    write ('Enter n, please ->');
    readLn (n);
    write ('Enter m, please ->');
    readLn (m);
    for i:=1 to n do
     begin
      k:=i;
      while k<>0 do
       begin
        s:=(k mod 10) +s;
        k:=k div 10
       end;
      if sqr(s)=m
         then write (i,' ');
      s:=0;
     end;
END.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 14 дек. 2005 23:13 | IP
Dzen


Удален

2xander,2KMA
Квадрат суммы?
Т.е.  задача сводится к решению задачи "найти все числа меньшие n, для которых сумма цифр равна m" (А если m - не квадрат то задача не имеет решения)Так что ли? Или все таки сумма квадратов?  

Всего сообщений: N/A | Присоединился: N/A | Отправлено: 15 дек. 2005 14:10 | IP
KMA



Долгожитель

2Dzen
Именно, в условии же ясно сказано квадрат суммы цифр. Т. е. чила от 1 до n разбиваются на цифры и их сумма в квадрате, должна быть равна m. Но это же истина, я ее не дописал, думал, что xander умный и сам сможет проверить квадрат или не квадрат m, а потом уже выполнять этот цикл (т.е. в случае извлечения квадратного корня, при чем это извлечение должно быть целым).

т. е.  необходимо добавить
if frac (sqrt(m))=0
  then выполнять этот цикл.

Но замечание серьезное, спасибо.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 15 дек. 2005 15:09 | IP
miss_graffiti


Долгожитель

задача такая:
написать функцию для поэлементного перемножения произвольного кол-ва одномерных массивов.
это как?
типа A1*B1*C1...?
просто если перемножить 2 одномерных массива, получается число...

Всего сообщений: 670 | Присоединился: сентябрь 2005 | Отправлено: 15 дек. 2005 17:14 | IP
Ren


Долгожитель

Скорее всего имеется ввиду операция поэлементного перемножения (в теории матриц есть такая), но нужно тогда что бы массивы были одинаковой размерности! Есть такое условие? Если да, то это просто массив, элементами которого являются произведения соответствующих элементов сомножителей. (короче говоря первый равен произведению первых и т.д.)

Всего сообщений: 284 | Присоединился: октябрь 2005 | Отправлено: 15 дек. 2005 19:55 | IP
miss_graffiti


Долгожитель

Ren, то есть грубо говоря:
составляем двумерный массив и находим произведение по столбцам?
и это произведение записываем в соответствующую ячейку одномерного массива?

Всего сообщений: 670 | Присоединился: сентябрь 2005 | Отправлено: 15 дек. 2005 20:25 | IP
Ren


Долгожитель

Если ты имеешь ввиду, что первый массив - первая строка, второй - вторая, то видимо да. Но опять же, надо что бы перемножаемые массивы содержали одинаковое колличество элэементов.

Всего сообщений: 284 | Присоединился: октябрь 2005 | Отправлено: 15 дек. 2005 21:26 | IP
KMA



Долгожитель

miss graffiti.
Вот перемножение матриц (а так же сложение). Разбери программу и тогда поймешь, как они перемножаются.
А вообще теорию по матрицам можно найти в великом задачнике Клетейника, а точнее в приложениях (это курс линейной алгебры).
На счет перемножения элементов одномерного массива я даже понятия не имею, чушь какая-то. (Надеюсь этот код поможет).



program helloWorld;
uses crt;
const n=5;
type matrix=array [1..n, 1..n] of longInt;

Var a, b, c, aPlusB, aPlusBMultC: matrix;
   row_a, row_b, row_c, col_a, col_b, col_c: byte;
   flag: boolean;

Procedure enterMatr (Var x:matrix; row, col: byte);
Var i, j: byte;
Begin
     for i:=1 to row do
      for j:=1 to col do
       x[i,j]:=random (90)+10
End;

{
Procedure enterMatr (Var x:matrix; row, col: byte; name: char);
Var i, j: byte;
Begin
     for i:=1 to row do
      for j:=1 to col do
       begin
        write (name,'[',i,',',j,']=');
        readLn (x[i,j])
       end
End;
}

Procedure showMatr (x:matrix; row, col: byte);
Var i, j: byte;
Begin
    for i:=1 to row do
     begin
      for j:=1 to col do
       write (x[i,j]:6);
      writeLn
     end
End;
Procedure sumMatr (Var all: matrix; x, y: matrix; row, col: byte);
Var i, j: byte;
Begin
    for i:=1 to row do
     for j:=1 to col do
      all[i,j]:=x[i,j]+y[i,j]
End;

Procedure multMatr (Var all: matrix; x, y: matrix; k, row_x, col_y :byte);
Var i, j, t: byte;
   element: longInt;
Begin
    element:=0;
    for i:=1 to row_x do
     for j:=1 to col_y do
      begin
       for t:=1 to k do
        element:=x[i,t]*y[t,j]+element;
       all[i,j]:=element;
       element:=0
      end;
End;

BEGIN
     randomize;
     clrScr;
     write ('Enter how many rows in matrix A ->');
     readLn (row_a);
     write ('Enter how many cols in matrix A ->');
     readLn (col_a);
     write ('Enter how many rows in matrix B ->');
     readLn (row_b);
     write ('Enter how many cols in matrix B ->');
     readLn (col_b);
     write ('Enter how many rows in matrix C ->');
     readLn (row_c);
     write ('Enter how many cols in matrix C ->');
     readLn (col_c);
     clrScr;
     {---------------------------------------}
     enterMatr (a, row_a, col_a);
     enterMatr (b, row_b, col_b);
     enterMatr (c, row_c, col_c);
     {----------------------------------------}
     window (1, 1, 28, 7);
     writeLn ('***   Matrix A   ***');
     showMatr (a, row_a, col_a);
     window (29, 1, 56, 7);
     writeLn ('***   Matrix B   ***');
     showMatr (b, row_b, col_b);
     window (57, 1, 80, 7);
     writeLn ('***   Matrix C   ***');
     showMatr (c, row_c, col_c);
     writeLn;
     {-----------------------------------------}
     window (25, 10, 60, 25);
     writeLn ('***   (A+B)*C Matrix    ***');
     flag:=true;
     if (col_a=col_b) and (row_a=row_b)
        then sumMatr (aPlusB, a, b, row_a, col_b)
        else flag:=false;
     if (col_b=row_c) and flag
        then multMatr (aPlusBMultC, aPlusB, c, col_b, row_b, col_c);
     if flag
        then showMatr (aPlusBMultC, row_b, col_c)
        else writeLn ('May you thinking...');
     {------------------------------------------}
     readLn
END.

Я извеняюсь, не пояснил дальше. Скорее всего тебе нужно перемножить матрицу А на матрицу В, при чем матрица А имеет размеры {n, 1}, а матрица B {1, n} и тебе необходимо их перемножить, дальше точно также с остальными матрицами, советую использовать рекурсию. Тогда ты сможешь перемножить сколь угодно матриц.  

(Сообщение отредактировал KMA 15 дек. 2005 23:59)

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 15 дек. 2005 23:27 | IP

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]

Форум работает на скрипте © Ikonboard.com