1

Тема: Програма з використанням динамічних масивів – параметрів функцій*

Дана дійсна квадратна матриця порядку n. Знайти найбільше із значень елементів, розташованих у зафарбованої частині матриці (a)

Обов'язкова умова: вводити розмір, та саму матрицю з клавіатури.

http://s019.сайт-злодій/i612/1303/e1/4e406b117273.jpg

Знайшов схожу задачу як у варіанті (б) тільки на Pascal ABC

var a:array[1..100, 1..100] of integer;
    i,j,amax,n,k,c:integer;
    begin
    WriteLn('Введите размеры матрицы:');
    ReadLn(n);
    WriteLn('Исходная матрица:');
    for i:=1 to n do begin
      for j:=1 to n do begin
      a[i,j]:=random(50)-25;
      Write(a[i,j]:4);
      end;
    WriteLn();
    WriteLn();
    end;
    k:=0;
    i:=1;
    j:=1;
    c:=a[i,j];
    for i:=1 to n do begin
      for j:=1 to k+1 do begin
      if c<a[i,j] then 
      c:=a[i,j];
      end;
      k:=k+1;
    end;
    WriteLn();
    WriteLn('Максимальный элемент: ',c:3);
 end.

Та ще одна мабуть уныверсальна на Pascal

Uses crt;
Const n=5;
Type mas=array[1..n,1..n] of integer;
Var x:mas; max:integer;
 Procedure Vvod(Var x:mas; n:integer);
 Var i,j:integer;
   Begin
     for i:=1 to n do
      for j:=1 to n do x[i,j]:=Random(100);
   End;
 Procedure Print(x:mas; n:integer);
 Var i,j:integer;
   Begin
     for i:=1 to n do
      Begin
        for j:=1 to n do Write(x[i,j]:4);
        WriteLn;
      End;
   End;
 Procedure max_elem(Var max:integer; x:mas; n:integer);
 Var i,j,im,jm,k:integer;
   Begin
     max:=0;
     Write('vvedite nomer risunka=');
     ReadLn(k);
     for i:=1 to n do
      for j:=1 to n do
       Case k of
       1: if (j>=i) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
       2: if (i>=j) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
       3: if (j>=i) and (n-j+1>=i) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
       4: if (i>=j) and (n-j+1<=i) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
       5: if ((j>=i) and (n-j+1>=i)) or ((i>=j) and (n-j+1<=i)) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
       6: if ((j<=i) and (n-i+1>=j)) or ((j>=i) and (n-i+1<=j)) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
       7: if (j<=i) and (n-i+1>=j) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
       8: if (j>=i) and (n-i+1<=j) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
       9: if (n-i+1>=j) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
       10: if (n-i+1<=j) and (x[i,j]>max) then
          Begin
            max:=x[i,j]; im:=i; jm:=j;
          End;
 
       End;
       Write('max_element=x[',im,',',jm,']=',x[im,jm]);
   End;
 Begin clrscr; randomize;
   Vvod (x,n);
   Print(x,n);
   max_elem(max,x,n);
   ReadLn;
 End.

2

Re: Програма з використанням динамічних масивів – параметрів функцій*

"C/C++ → ПРОГРАМА З ВИКОРИСТАННЯМ ДИНАМІЧНИХ МАСИВІВ – ПАРАМЕТРІВ ФУНКЦІЙ"
Ну і де програма на мові С.
Що ж ви теми не в тих розділах розміщуєте. Вважаю тему треба перемістити.

3

Re: Програма з використанням динамічних масивів – параметрів функцій*

Я все правильно розмістив.
Умова знаходиться на початку теми, а потім йдуть розробки на іншій мові програмування (PASCAL)

Re: Програма з використанням динамічних масивів – параметрів функцій*

ПРОГРАМА З ВИКОРИСТАННЯМ ДИНАМІЧНИХ МАСИВІВ

Або я чогось не розумію, або що.
Де ви побачили динамічний масив ?

5

Re: Програма з використанням динамічних масивів – параметрів функцій*

ПАРАМЕТРІВ ФУНКЦІЙ

Re: Програма з використанням динамічних масивів – параметрів функцій*

V1rus написав:

ПАРАМЕТРІВ ФУНКЦІЙ

До чого тут це ?
Всеодно нічого не розумію :|

7

Re: Програма з використанням динамічних масивів – параметрів функцій*

Програма  з використанням функцій, що містять як параметри динамічні масиви.
Іншими словами процедури або функції.

8

Re: Програма з використанням динамічних масивів – параметрів функцій*

Hanter написав:

ПРОГРАМА З ВИКОРИСТАННЯМ ДИНАМІЧНИХ МАСИВІВ

Або я чогось не розумію, або що.
Де ви побачили динамічний масив ?

Приєднаюся до зауваження. Динамічний масив на те й динамічний, що у нього розмір на початку не визначений. А тих програмах на Паскалі - двовимірні статичні масиви (const n=5).

9

Re: Програма з використанням динамічних масивів – параметрів функцій*

Ну то чого ви не в підфорум "Delphi/Pascal"  її запостили?

10

Re: Програма з використанням динамічних масивів – параметрів функцій*

Бо йому потрібен код на Сі.
Я почав робити, але виходить щось страховидне.
Гляньте на завдання в), як би ви проходили таку матрицю?

11

Re: Програма з використанням динамічних масивів – параметрів функцій*

Мені потрібно варіант а). Я просто знайшов на Pascal рішення. Перший текст програми дуже схожий на варіант а) тільки матриця обирає старший єлемент в нижньому трикутнеку, а необхідно навпаки.
А другий варіант, як я зрозумів вирішує усі завдання вибираєш варіат, вводиш матрицю = результат.

12

Re: Програма з використанням динамічних масивів – параметрів функцій*

keithfay написав:

Бо йому потрібен код на Сі.
Я почав робити, але виходить щось страховидне.
Гляньте на завдання в), як би ви проходили таку матрицю?

Та елементарні тут задачі. Алгоритм схожий на "виведіть на екран матрицю зірочками та пробілами". Єдина відмінність - до кожного елемента ще підвісити перевірку на максимальність.

До прикладу:
У завданні "в" циклом рухаємося по рядках, звужуючись до центру на два елементи по боках. Кожен елемент перевіряємо на максимальність, порівнюючи із попереднім максимумом.

13

Re: Програма з використанням динамічних масивів – параметрів функцій*

Bartash-е, я так і робив. Дякую.
V1rus-е, очевидніше виділяйте завдання, бо я тільки зараз запримітив вашу (а), скоро викладу код.

14 Востаннє редагувалося Vo_Vik (20.03.2013 22:08:08)

Re: Програма з використанням динамічних масивів – параметрів функцій*

Bartash, keithfay
Я бачу ви не зовсім не розумієте мого тролінгу у відповідь на трошки хамське відношення людини до форуму.
http://replace.org.ua/search/posts/user/485/
З підходом "а мені треба, а ви страдайте". Ось кілька цитат:

Нам просто поставили програмування яке ми не вчили і яке нам непотрібне.

- і того я не буду його вчити а піду понапрягаю тих ботаніків в окулярах, які постійно сидять за компами, їм буде в кайф робити мої лабораторки за мене.

Я б невідмовився, але її потім потрібно ще перевести на С++, з обов'язковою умовою (водити координати вершин та кількість кутів з клавіатури).

- це так, якщо забудете, що ви на цьому форумі, щоб розв’язувати його задачі.

а результати можеш показати на 5-ть сторін і на 3-ри

- величайше дозволяє він показати результати.
Тай саме перше повідомлення цієї теми мене вивело.

Та ще одна мабуть уныверсальна на Pascal

- ладно якщо так просите особистих напрацювань, то кину вам 2 перші результати гугля, хз що воно робить, але не доставайте мене своїм програмуванням.

15

Re: Програма з використанням динамічних масивів – параметрів функцій*

Vo_Vik написав:

Bartash, keithfay
Я бачу ви не зовсім не розумієте мого тролінгу у відповідь на трошки хамське відношення людини до форуму.

Думаю, ми обоє усе вірно зрозуміли. keithfay такі задачки іноді пише для саморозвитку (задачі ж бо класичні). А по моїй відносній активності у даній темі можете впевнитися, що я так палаю від нестями у спробах допомогти людині, що аж віднімає руки у процесі набирання коду до задачі. :D

16

Re: Програма з використанням динамічних масивів – параметрів функцій*

Як і обіцяв:

/* This program uses code, written by Yar (keithfay.zz.mu) and Leo (leonid.pro) */

#include <stdio.h>
#include <stdlib.h>

int input(void);
int greatest(int, int);
int** matrix_alloc(int n);
void matrix_free(float **matrix, int n);
void matrix_print(int **matrix, int n);

int **matrix;
 
int main(int argc, char *argv[])
{
    return input();
}

int input(void){
    int i, j, len=0, code=0;
    // len - довжина однієї сторони
    // code - код, який складається зі значень
    // кута, з якого починається виходить базова лінія
    // кута, в якому закінчується базова лінія
    // операція має бути виконана дзеркально
    // операція виконується над лінією
    printf("How many elements in 1 side of the matrix?\n");
    scanf("%d", &len);
    matrix = matrix_alloc(len);
    printf("Input elements:\n");
    for(i = 0; i < len; i++){
        printf("Row #%d{\n", i);
        for(j = 0; j < len; j++){
            printf("      <%d>: ", j);
            scanf("%d", &matrix[i][j]);
        }
        printf("}\n");
    }

    combination:
    printf("Write down corner combination (f.e. 1 2):\n" 
            "1   2\n" 
            " *** \n" 
            " *** \n" 
            " *** \n" 
            "3   4\n");
    scanf("%d %d", &i, &j);
    if(i < 1 || j < 1 || i > 4 || j > 4)
        goto combination;
    code = (code + i) * 10 + j; // Отримаємо число, в якому десяток - початк БЛ, а одиниці - кінець БЛ
    
    mirrored:
    printf("Operation got to be mirrored [0/1]?:\n" 
            "0:  1   2    1:  1   2\n" 
            "     ***          *** \n" 
            "      *            *  \n" 
            "                  *** \n" 
            "    3   4        3   4\n");
    scanf("%d", &i);
    if(i != 0 && i != 1)
        goto mirrored;
    code = code * 10 + i; // Отримаємо число на розряд більше, в якому одиниці будуть означати відзеркалення
    
    baseline:
    printf("Below or under baseline [0/1]?:\n" 
            "0: 1   2  1: 1   2\n" 
            "    *         *** \n" 
            "    **         ** \n" 
            "    ***         * \n" 
            "   3   4     3   4\n");
    scanf("%d", &i);
    if(i != 0 && i != 1)
        goto baseline;
    code = code * 10 + i; // Отримаємо число на розряд більше, в якому одиниці будуть означати положення стосовно БЛ
    // Таким чином code = 1201 буде значити початок БЛ із кута 1 і кінець в куті 2
    // без відзеркалення і над базовою лінією
    
    printf("code: %d\n", code);
    matrix_print(matrix, len);
    return greatest(code, len);    
}

int greatest(int code, int len){
    int i, j, k, l, max=0;
    switch(code){
        case 1401:
            k = 0;
            for(i = 0; i < len; i++){
                for(j = 0; j < len; j++){
                    if(j >= k && matrix[i][j] > max)
                        max = matrix[i][j];
                }
                k++;
            }
        break;
        default:
            printf("Undefined code\n");
        break;
    }
    return max;
}

int** matrix_alloc(int n){
    int i;
    int** matrix;
        matrix = (int **) malloc(sizeof(int *) * n);
    for (i = 0; i < n; i++) {
        matrix[i] = (int *) malloc(sizeof(int) * n);
    }
    return matrix;
}

void matrix_print(int **matrix, int n){
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
}

17

Re: Програма з використанням динамічних масивів – параметрів функцій*

Vo_Vik, я переслідую мету наповнення цього форуму контентом.

18

Re: Програма з використанням динамічних масивів – параметрів функцій*

 baseline:
    printf("Below or under baseline [0/1]?:\n" 
            "0: 1   2  1: 1   2\n" 
            "    *         *** \n" 
            "    **         ** \n" 
            "    ***         * \n" 
            "   3   4     3   4\n");
    scanf("%d", &i);
    if(i != 0 && i != 1)
        goto baseline;

Ще є такий підхід:

 do{
    printf("Below or under baseline [0/1]?:\n" 
            "0: 1   2  1: 1   2\n" 
            "    *         *** \n" 
            "    **         ** \n" 
            "    ***         * \n" 
            "   3   4     3   4\n");
    scanf("%d", &i);
    }while(i != 0 && i != 1);

19

Re: Програма з використанням динамічних масивів – параметрів функцій*

Програма працює не вірно,які не задаш координати вона бере за основу варіант в) і робить зеркало.
Інші варіанти не хоче виконувати