22948

МАСИВИ. БАГАТОВИМІРНІ МАСИВИ

Лекция

Информатика, кибернетика и программирование

middle] void merge int min int middle int max {int i j m1m2; i=m1=min; m2=middle1; while m1 =middle m2 =max if a[m1] a[m2] b[i]= a[m1]; else b[i]= a[m2]; while m1 =middle b[i]= a[m1]; while m2 =max b[i]= a[m2]; for i=min; i =max; i a[i]=b[i]; } швидке упорядкованому за зростанням масиву a[] довжини n=2 за допомогую масиву b[] void...

Русский

2013-08-04

131.5 KB

2 чел.

ТЕМА: МАСИВИ. БАГАТОВИМІРНІ МАСИВИ.

Прикл. Пошук компоненти.

Аналіз

Вх: символьний вектор -константа, ,

      

Вих:

Зал:  Нехай . Тоді

Вим: Побудувати Сі – функцію.    

Проект.

 лічильник,

,

Блок-схема……

Прога   

===============================================================================

#include < stdio.h >

 int search(unsigned сhar x,  unsigned сhar c[], int n)

 {int i=0,l;

         

     for (  l=(c[0]==x)? 0: -1; (++i<=n-1 && l==-1); )

             if (c[i]==x) l==i;

    return l;

 }

#define m 100

void main (void)

{int i;  float a[m],x;

 scanf (“%f”, &x);  /* що шукати  */ 

 for ( i=0; (i<n-1);i++ )  scanf (“%f”, &c[i]);  /* читання елементів масиву зі станд. вхідного потоку  */ 

 printf(“\n%d”, search( x,  a, m));

}

/* АХТУНГ:  ПРОГА НА ЖАЛЬ  НЕ ВІДЛАГОДЖУВАЛАСЬ !!!!!!!!!!!!!!!     */

 ===============================================================================

Впр. Відлагодити прогу!

Сем. Багатовимірний масив – це масив(=вектор), компонентами якого є  масиви(=ветори)  певного фіксованого типу. Нпр., масив-матриця matr={{1.0, 2.0, 3.0, 4.0, 5.0}, {1.0, 2.0, 3.0, 0.0, 5.0} } має  два (=довжина масиву) рядки - одновимірні-масиви довжини  5. В памяті вони розташуваються підряд в такій саме послідовності. Спочатку елементи першого рядка, безпосередньо за ними – другого.

Синт. Опис даного масиву має вигляд:  double matr[2][5]; .  Обробка здійснюється за допомогою функції індексування. При цьому можливе      подвійне індексування.  Тому що значенням matr[i] є масив і його можна в свою чергу індексувати і отримувати доступ до компонентів рядків матриці.   

Нпр.  matr[0]={1.0, 2.0, 3.0, 4.0, 5.0},  matr[1]={1.0, 2.0, 3.0, 0.0, 5.0}.

        matr[0][0]=1.0, matr[1][4]=5.0.

Взагалі,  змінній matr[i][j]  (, )  відповідає адреса   matr[0][0](=matr)+ i*розмір-рядка(=sizeof(double)*5) +j* sizeof(double)/

УВАГА!!! Якщо двовимірний масив передається  функції у якості аргумента, то відповідний формальний параметр повинен містити фіксовану кількість стовпчиків(=довжину вектора-рядка матриці), яка обов’язково має бути присутня в оголошенні типу параметра. 

Нпр.,   для масиву matr заголовок функції  міг би мати вигляд  void func(double _matr[2][5],…) або void func(double _matr[][5], int n,….), де  

показує кількість рядків  матриці у конкретному виклику функції.

Прикл. Лабораторна  робота 3. У  заданій  числовій матриці порядку  упорядкувати за зростанням всі рядки матриці, що містять  відємний елемент.

Аналіз

Вх: матриця  

Вих: матриця

Зал:  - це матриця  з упорядкованими за зростанням рядками, що містять нульові елементи.

Вим: Побудувати Сі –прогу з функціями: 1)сортування масиву за зростанням, 2) зясування  чи містить  масив  нульовий елемент та

3) обробки матриці (=упорядкування відповідних рядків).

Проект.

/* Бульбашкове  сортування  масиву довжини */

void  bubble (double a[], unsigned int k)

{unsigned int pr,i, temp ;

    do {   pr=0;

           for (i=1;i<k; i++ )

            if (a[i-1]>a[i]) {temp=a[i-1]; a[i-1]=a[i]; a[i]=temp; pr=1;}

          }

   while (pr)

}

/* зясування  чи містить  масив довжини  нульовий елемент */

int search(float x, double c[], unsigned int n)

 {…… }

/* обробки матриці порядку (=упорядкування за зростанням рядків, що містять 0) */

void matr_processing( double c[][m], unsigned int k)

 {int i;

         

     for ( i=0; (i<n;i++ )

             if (search(0.0,  c[i], m)) bubble(c[i],m);

  }

Блок-схема……

Прога

===============================================================================

#include < stdio.h >

/* Бульбашкове  сортування  масиву довжини */

        void bubble (double a[], unsigned int k)

         {……}

/* зясування  чи містить  масив довжини  нульовий елемент */

int search(double  x, double c[], unsigned int n)

 {…… }

/* обробки матриці порядку (=упорядкування за зростанням рядків, що містять 0) */

void matr_processing( double c[][m], unsigned int k)

 {…..   }

/* виведення масиву довжини */

void write_array( double a[], unsigned int k)

 { int i;  

    printf(“\n”);

           for ( i=0; (i<k-1);i++ )  printf(“%3.1f\t”, a[i]);

        }

#define m 5

#define n  4

void main (void)

{ int i;  

  double cc[n][m]={{1.0, 2.0, 3.0, 4.0, 5.0},

                             {1.0, 2.0, 3.0, 0.0, 5.0},

                             {1.0, 2.0, 0.0, 4.0, 5.0},

                             {0.0, 2.0, 3.0, 4.0, 5.0}

                            };

 

 matr_processing(  cc, n);

 for ( i=0; (i<n-1);i++ )  write_array( cc[i], m);  /* виведення го рядка матриці  */ 

}

/* АХТУНГ!   ПРОГА НА ЖАЛЬ  НЕ ВІДЛАГОДЖУВАЛАСЬ…..      */

    ===============================================================================

  Впр. 1) Відлагодити прогу!  На екран має бути видана матриця:

                                                                                                                  1.0, 2.0, 3.0, 4.0, 5.0

                                                                                           0.0, 1.0, 2.0, 3.0, 5.0

                                                                                           0.0  1.0, 2.0, 4.0, 5.0

                                                                                           0.0, 2.0, 3.0, 4.0, 5.0

                      2) Передбачити в прозі  введення елементів матриці   сс   зі вхідного потоку.  

Прикл. Бінарний пошук компоненти в масиві.

Аналіз

Вх: цілий  вектор -константа, ,

      

Вих:

Зал:  Нехай . Тоді , .

Вим: Побудувати Сі – функцію.    

Проект……….

Блок-схема……

Прога   

/*  Бінарний пошук компоненти  x  в упорядкованому за зростанням масиві  c[]  довжини  n */

#include < stdio.h >

 int binsearch( int x,  int c[], int n)

 {int low, high, mid;

             low=0;  high=n-1;

      while (low <= high )

             { mid=(low+high)/2;

                 if (x<c[mid]) high= mid-1;

                     else if (x>c[mid]) low=mid+1;

                                else /*  компоненту  знайдено */

                                              return mid;

              
                    }
/*  компоненту не знайдено */

    return -1;

 }

#define m 100

void main (void)

{int i;  float a[m],x;

 scanf (“%f”, &x);  /* що шукати  */ 

 for ( i=0; (i<n-1);i++ )  scanf (“%f”, &c[i]);  /* читання елементів масиву зі станд. вхідного потоку  */ 

 printf(“\n%d”, binsearch( x,  a, m));

}

/* АХТУНГ:  ПРОГА  НЕ ВІДЛАГОДЖУВАЛАСЬ !     */

Впр. Відлагодити  прогу !

Прикл. «Швидке» сортування масиву. Алгоритм злиття  (Дж. Фон Нойман).

Аналіз

Вх: цілий  вектор -константа, ,

Вих:  цiлий вектор .

Зал:   є  упорядкованим за зростанням  вектором .

Вим: Алгоритм має здійснювати не більше ] порівнянь та переміщень елементів масиву. Побудувати Сі – функцію.    

Проект……….

Блок-схема……

Прога   

#include < stdio.h >

#define n 1024

static int a[n], b[n];

/*  «злиття» сусідніх упорядкованих сегментів  а[min..middle]    та   а[middle+1..max] масиву а[]  в

     упорядкований сегмент b[min..max]    массиву b[]  і копіювання його назад в  а[min..middle]    */

void merge( int min,  int middle, int max)

 {int i, j, m1,m2;

             i=m1=min;  m2=middle+1;

      while (m1<=middle &&  m2<=max)

               if (a[m1]<a[m2]) b[i++]= a[m1++];

                     else  b[i++]= a[m2++];

      while (m1<=middle)  b[i++]= a[m1++];

      while (m2<=max)   b[i++]= a[m2++];

      for (i=min; i<=max; i++) a[i]=b[i];               

  }                                                         

/*  «швидке» упорядкованому за зростанням масиву  a[]  довжини  n=2  за допомогую масиву   b[]*/

void sort_merge2( )

 { int min,  middle, max, part=1;

                 while (2*part<=n)

             {   min=0;   middle=part-1,  max=2*part-1;

                  while (min<n) { merge( min,  middle,  max);

                                           min=max+1;

                                           middle=max+part;

                                           max=middle+part;      

                                        }

                  part*=2;

              }

   }

/*  «швидке» упорядкування за зростанням масиву  a[]  довжини  n  за допомогую масиву   b[]*/

void sort_merge( )

 { int min,  middle, max, part=1;

      while (part<=n)

             {   min=0;   middle=part-1; max=2*part-1;

                  if (max > n-1) max=n-1;   

                  while (min<n) { merge( min,  middle,  max);

                                           min=max+1;

                                           middle=max+part; if (middle >= n-1) min=n;   

                                           max=middle+part;  if (max > n-1) max=n-1;   

                                        }

                  part*=2;

              }

   }

                                     

void main (void)

{int i;  

for ( i=0; (i<n-1);i++ )  scanf (“%f”, &a[i]);  /* читання елементів масиву зі станд. вхідного потоку  */ 

 sort_merge( );

 for ( i=0; (i<n-1);i++ ) printf(“\n%d”, a[i]);

 /* читання елементів масиву зі станд. вхідного потоку  */  

}

/* АХТУНГ:  ПРОГА  НЕ ВІДЛАГОДЖУВАЛАСЬ !     */

Впр. 1) Відлагодити  прогу !

       2) Зробити масив  a[] та довжину n  вхідними параметрами  функцій sort_merge2   та  sort_merge.

       3) Відмовитись в  функції merge від заключного копіювання сегменту b[min..max] в масив a[].


 

А также другие работы, которые могут Вас заинтересовать

38554. Процесс взаимного формирования массовой культуры и социума, состоящего из потребителей продуктов этой культуры 55 KB
  Таков социальнопсихологический аспект механизма потребления производства медиапродукта.Достижения этой индустрии сегодня позволяют продюсерам не только быть посредниками между интересами потребителей и творчеством производителей но и с одной стороны формировать эти интересы а с другой создавать медиапроекты являющиеся оптимальными для конкретной социальной коньюктуры духовными продуктами. Медиапродукт является необходимым товаром и в то же время способен сам коррегировать количественную и качественную степень необходимости...
38556. СОВЕРШЕНСТВОВАНИЕ КОММУНИКАТИВНОЙ ПОЛИТИКИ ПРЕДПРИЯТИЯ (на примере ООО «Фудсервис ЛТД») 4.85 MB
  Конкурентное окружение компании и использование коммуникаций в конкурентной борьбе. В условиях рыночных экономических отношений торговопосреднические компании играют огромную роль влияя на всю систему распределения товаров от производителей к розничным покупателям. Так как эффективность работы и конкурентоспособность торговопосреднической компании всецело зависит от успешного взаимодействия с различными рыночными субъектами: производителями розничными продавцами и покупателями то особую важность приобретает построение...
38557. ОПИСАНИЕ ТЕХНОЛОГИЧЕСКИХ И АППАРАТУРНЫХ СХЕМ ПРОИЗВОДСТВА И ОТДЕЛЬНЫХ СТАДИЙ ПРОЦЕССА 2.81 MB
  Точки контроля Норма частиц в 1 литре воздуха Из заборной шахты 1000030000 После висциносного фильтра 750025000 Перед головным фильтром 20006000 После головного фильтра 4001200 После индивидуального фильтра Не более 10 Стерильность воздушность систем проверяют ежедневно с помощью чашек Петри или путём прохождения воздуха из продувок коллектора через стерильный фильтрик заполненный углём или пропускают через стерильный мембранный фильтр с последующим пересевом на мясопептонные среды. Готовят 2 среды контрольную и опытную в которой один...
38558. ВПЛИВ ПОСТІЙНОГО МАГНІТНОГО ПОЛЯ НА СТРУКТУРУ ТА ЕЛЕКТРИЧНІ ВЛАСТИВОСТІ ПОЛІМЕРНИХ КОМПОЗИТІВ 12.58 MB
  Вплив постійного магнітного поля на структуру і електричні властивості полімерних композитів. Досліджено сплив постійного магнітного поля ПМП на електричні властивості композиту на основі утвореної поліуретанової матриці з наповнювачем феромагнітним оксидом заліза Fe2O3 показано що під впливом постійного магнітного поля композиція набуває упорядкованої структури з анізотропними властивостями а саме зміна діелектричної проникності яка залежать від напрямку ПМП. Влияние постоянного магнитного поля на структуру и электрические свойства...
38559. Модифікація гена kanMX4, що забезпечує резистентність до антибіотика генетицину 1.36 MB
  Це у значній мірі відбувається тому що клітинний цикл та фізіологічні процеси клітин дріжджів дуже подібні до відповідних процесів людських клітин і тому основні клітинні механізми реплікація ДНК рекомбінація поділ клітини і метаболізм мають багато спільних рис. пар основ плазмідної ДНК яку в деяких штамах складають кіллерні плазміди; мітохондріальний геном 75 тис. Отримані гелі можуть бути використані для проведення Саузернблот аналізу що супроводжується гібридизацією або для ізоляції хромосомної ДНК в чистому вигляді. Досить...
38560. Связь социально-психологической адаптации студентов с тактиками самопрезентации 492.5 KB
  ТЕОРЕТИЧЕСКИЕ И МЕТОДИЧЕСКИЕ ОСНОВЫ ИССЛЕДОВАНИЯ СВЯЗИ СОЦИАЛЬНОПСИХОЛОГИЧЕСКОЙ АДАПТАЦИИ И ТАКТИК САМОПРЕЗЕНТАЦИИ СТУДЕНТОВ ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ИЗУЧЕНИЯ СОЦИАЛЬНОПСИХОЛОГИЧЕСКОЙ АДАПТАЦИИ СТУДЕНТОВ АНАЛИЗ ДАННЫХ ЭМПИРИЧЕСКОГО ИССЛЕДОВАНИЯ СВЯЗИ СОЦИАЛЬНОПСИХОЛОГИЧЕСКОЙ АДАПТАЦИИ И ТАКТИК САМОПРЕЗЕНТАЦИИ СТУДЕНТОВ [1.5] ПРОГРАММА ЭМПИРИЧЕСКОГО ИССЛЕДОВАНИЯ СВЯЗИ СОЦИАЛЬНОПСИХОЛОГИЧЕСКОЙ АДАПТАЦИИ И ТАКТИК САМОПРЕЗЕНТАЦИИ СТУДЕНТОВ [1.
38561. Описании языковой картины мира (ЯКМ) субъекта делового текста (завещателя) на материале памятника деловой письменности Северной Руси XVIII веке 239.5 KB
  Теоретические аспекты субъекта текста. Проблематика выпускной квалификационной работы состоит в описании языковой картины мира ЯКМ субъекта делового текста завещателя на материале памятника деловой письменности Северной Руси XVIII в. Исследования такого типа актуальны потому что они позволяют через лексическое значение слов выявить влияние культурного контекста на лексику особенности социальноэкономической и духовной культуры поморов XVIIXVIII вв. разработать методику лингвокультурологической обработки исследуемого материала и...
38562. ЗНАКИ БОЖЕСТВЕННОГО В ТВОРЧЕСТВЕ ОЛИВЬЕ МЕССИАНА НА ПРИМЕРЕ СИМФОНИИ «ТУРАНГАЛИЛА» 5.39 MB
  Проекция божественного в анализе симфонии Турангалила Оливье Мессиана6 Интродукция Песнь любви I вторая часть Турангалила I третья часть Песнь любви II четвёртая часть Радость крови звёзд пятая часть Сад сна любви шестая часть Турангалила II седьмая часть Развитие любви восьмая часть Турангалила III девятая часть Финал 4. Заложенное ещё в консерваторских классах Поля Дюка увлечение индийской перуанской японской культурой нашло своё отражение в цикле из 12 песен Любви и...