3661

Алгоритми роботи з одномірними масивами

Лекция

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

Алгоритми роботи з одномірними масивами. Масив задає спосіб організації даних. Масивом називають упорядковану сукупність елементів одного типу. Кожен елемент масиву має індекси, що визначають порядок елементів. Число індексів характеризує розмі...

Украинкский

2012-11-05

119 KB

46 чел.

Алгоритми роботи з одномірними масивами.

Масив задає спосіб організації даних. Масивом називають упорядковану сукупність елементів одного типу. Кожен елемент масиву має індекси, що визначають порядок елементів. Число індексів характеризує розмірність масиву. Кожен індекс змінюється в деякому діапазоні [a,b]. У мові C#, як й у багатьох інших мовах, індекси задаються цілочиcельним типом. Діапазон [a,b] називається граничною парою, a - нижньою границею, b - верхньою границею індексу. При оголошенні масиву границі задаються виразами.  Якщо всі границі задані константними виразами, то число елементів масиву відомо в момент його оголошення і йому може бути виділена пам'ять ще на етапі трансляції. Такі масиви називаються статичними. Якщо ж вирази, що задають границі, залежать від змінних, то такі масиви називаються динамічними, оскільки пам'ять їм може бути відведена тільки динамічно в процесі виконання програми, коли стають відомими значення відповідних змінних. Масиву, як правило, виділяється безперервна область пам'яті.

Масиви в мові C# є дійсними динамічними масивами. Як наслідок цього, нагадаю, масиви ставляться до посилальних типів, пам'ять їм приділяється динамічно в "купі". На жаль, не зняте обмеження 0-базування, хоча, на мій погляд, у такому обмеженні вже немає логіки через відсутність в C# адресної арифметики. Було б набагато зручніше в багатьох завданнях мати можливість працювати з масивами, у яких нижня границя не дорівнює нулю.

У мові C#, дотримуючи наступності, збережені одномірні масиви й масиви масивів. На додаток до них у мову додані багатомірні масиви. Динамічні багатомірні масиви мови C# є досить потужними, надійними, зрозумілими й зручними структурними даними, що сміло можна рекомендувати до застосування не тільки професіоналам, але й новачкам, що програмують на C#. Після цього короткого огляду давайте перейдемо до більше систематичного вивчення деталей роботи з масивами в C#.

Оголошення масивів

Розглянемо, як оголошуються одномірні масиви, масиви масивів і багатомірні масиви.

Оголошення одномірних масивів

Нагадаю загальну структуру оголошення:

[<атрибути>] [<модифікатори>] <тип> <об'явники>;

Забудемо поки про атрибути й модифікатори. Оголошення одномірного масиву виглядає в такий спосіб:

<тип>[] <об'явники>;

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

Як у випадку оголошення простих змінних, кожен об'явник може бути ім'ям або ім'ям з ініціалізацією. У першому випадку мова йде про відкладену ініціалізацію. Потрібно розуміти, що при оголошенні з відкладеною ініціалізацією сам масив не формується, а створюється тільки посилання на масив, що має невизначене значення Null. Тому поки масив не буде реально створений і його елементи ініціалізовані, використати його в обчисленнях не можна. От приклад оголошення трьох масивів з відкладеною ініціалізацією:

int[] a, b, c;

Найчастіше при оголошенні масиву використовується ім'я з ініціалізацією. І знов-таки, як у випадку простих змінних, можуть бути два варіанти ініціалізації. У першому випадку ініціалізація є явною й задається константним масивом. От приклад:

double[] x= {5.5, 6.6, 7.7};

Дотримуючись синтаксису, елементи константного масиву варто брати у фігурні дужки.

У другому випадку створення й ініціалізація масиву виконується в об'єктному стилі з викликом конструктора масиву. І це найпоширеніша практика оголошення масивів. Приведу приклад:

int[] d= new int[5];

Отже, якщо масив оголошується без ініціалізації, то створюється тільки висяче посилання із значенням void. Якщо ініціалізація виконується конструктором, то в динамічній пам'яті створюється сам масив, елементи якого ініціалізуються константами відповідного типу (нуль для арифметики, порожній рядок для строкових масивів), і посилання зв'язується із цим масивом. Якщо масив ініціалізується константним масивом, то в пам'яті створюється константний масив, з яким і зв'язується посилання.

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

Для доступу до елемента масиву вказується його ім'я й у квадратних дужках - індекс потрібного елемента. З елементом масиву можна працювати як зі звичайної змінної, тобто можна прочитати його значення або записати в нього нове значення. Приклади:

a[3] := 0;      елементу масиву a з індексом 3     привласнюється значення 0;

a[10] := a[10]*2;     елемент масиву a з індексом      10 подвоюється.

В якості індексів елементів масиву можуть виступати цілі константи та цілі змінні. Використання цілих змінних дає можливість працювати з елементами масиву використовуючи цикли.

Масив - це найважливіша конструкція алгоритмічної мови. Важливість масиву визначається тим, що пам'ять комп'ютера логічно являє собою масив (його можна розглядати як масив байтів або як масив чотирьохбайтових машинних слів). Індекс у цьому масиві звичайно називають адресою. Елементи масиву читаються й записуються винятково швидко, за одну дію, незалежно від розміру масиву й величини індексу. Більшість інших структур даних, використовуваних у програмуванні, моделюються на базі масиву.

Динамічні масиви

У всіх вищенаведених прикладах оголошувалися статичні масиви, оскільки нижня границя дорівнює нулю по визначенню, а верхня завжди задавалася в цих прикладах константою. Нагадаю, що в C# всі масиви, незалежно від того, яким вираженням описується границя, розглядаються як динамічні, і пам'ять для них розподіляється в "купі". Думаю, що це відбиття розумної точки зору: адже статичні масиви, скоріше виключення, а правилом є використання динамічних масивів. У дійсності реальні потреби в розмірі масиву, швидше за все, з'ясовуються в процесі роботи в діалозі з користувачем.

Часто синтаксично немає істотної різниці в оголошенні статичних і динамічних масивів. Вираження, що задає границю зміни індексів, у динамічному випадку містить змінні. Єдина вимога - значення змінних повинні бути визначені в момент оголошення. Це обмеження в C# виконується автоматично, оскільки добре відомо, як вимогливо C# контролює ініціалізацію змінних.

Розробка алгоритмів по роботі з одномірними масивами базується на класичних алгоритмах, обєднуючи які можна створити досить складні програми.

Серед класичних алгоритмів розглянемо наступні:

  •  алгоритм вводу масиву;
  •  алгоритм виводу масиву;
  •  алгоритм находження суми елементів;
  •  алгоритм находження суми при наявності умови;
  •  алгоритм пошуку мінімального та максимального елементу;
  •  алгоритм видалення заданого елемента масива;
  •  алгоритм вставки елементу в задане місце;
  •  алгоритм  формування нового масиву за даними критеріями;

В наступних лекція  ми розглянемо алгоритми пошуку в одномірних масивах і сортування масиву за зростанням і спаданням.

Алгоритм вводу масиву

Лістинг 11.1. Розглянемо алгоритм вводу масиву з клавіатури:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

   class Program

   {

       static void Main(string[] args)

       {

          int[] a = new int[11];

           int i;

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

           {

               a[i] = int.Parse(Console.ReadLine());

           }

}}}

Лістинг 11.2. Алгоритм заповнення  елементів масиву випадковими числами:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

   class Program

   {

       static void Main(string[] args)

       {

          int[] a = new int[11];

           Random r = new Random();

           int i;

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

           {

               a[i] = r.Next(100);

           }

}}}

Лістинг 11.3. Алгоритм заповнення  елементів масиву числами як результат розрахунку відповідних функцій:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{    class Program

   {   static void Main(string[] args)

       {

Double[] z = new Double[30];

           int i,k,i1;

           double a, b;

           Console.WriteLine("k=");

           k = int.Parse(Console.ReadLine());

           Console.WriteLine("№ = ");

           i1 = int.Parse(Console.ReadLine());

           for (i = 1; i <= i1+10; i++)

           {

               a = 0;

               for (int j = k; j <= k + 5; j++)

               {

                   a= a+ 9.2* Math.Exp(2*Math.Log(Math.Abs(Math.Cos(i)))- Math.Abs(Math.Sin(k)-1.1));

               }

               b = 1;

               for ( int j = k; j <= k + 3; j++)

               {

             b = b * 9.2 * Math.Exp(2 * Math.Log(Math.Abs(Math.Cos(i))) - Math.Abs(Math.Sin(k) - 1.1));

               }

               z[i] = a + b;

           }

           

       }

   }

Алгоритм виводу масива

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

{

 Console.Write(a[i] + " ");

}

 Console.WriteLine;

Підсумовування двох масивів однакового розміру

Задано:  масиви   A =(a1,a2...,an),    B =(b1,b2...,bn).

Сформувати: масив   C =(c1,c2...,cn), де Сi = Ai+Bi; i=1,2...,n.

Завдання зводиться  до  організації циклу по її обчисленню Ci=Ai+Bi при кожному значенні  i  від 1  до n.

Початкові дані:

N- розмір масиву;  

A, B - масиви доданки розміром N;

Результат:   масив  С -  розміром N;

Допоміжні  змінні:  I - індекс - змінна циклу, що управляє.

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

          int[] a,b,c = new int[100];

           int i;

//  пропущено блок вводу масивів a,b.

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

           {

               c[i] = a[i]+b[i];

           }

// пропущено блок вводу масиву с.

Знаходження суми  елементів масиву

Задано:  масив A = (A1,A2...,An) .

Визначити:  суму елементів масиву.

Початкові дані:  

N - розмір масиву;  

A - масив  розміром N;

Результат:   S - сума елементів;

Допоміжна змінна: I - індекс - змінна циклу, що управляє.

          int[] a = new int[n];

           int i; int sum=0;

//  пропущено блок вводу масивів a.

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

           {

               sum = sum+ a[i];

           }

// пропущено блок вводу sum.

Визначення  кількості та суми елементів масиву, що задовольняють  заданій умові

Задано:  масив  A = (A1,A2...,An); T -  задане число.

Визначити: скільки елементів задовольняє заданій умові, наприклад     Pi > T .

Початкові дані:

N - розмір масиву;  

P - масив  розміром N;

T - задане значення, з яким порівнюються елементи масиву.

Результат:  K - число елементів масиву P, що задовольняють умові.

Допоміжна змінна:  I- індекс - змінна циклу, що управляє.

          int[] a = new int[11];

           int i; int sum=0; int p=0;

//  пропущено блок вводу масивів a.

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

           {

               if (a[i]>T) { sum = sum+ a[i]; p++;}

           }

// пропущено блок вводу sum і р.

Інвертування масиву

Задано: масив A=(c1,c2...,cn).

Потрібний: змінити порядок проходження елементів масиву C на зворотний, використовуючи одну допоміжну змінну.

Початкові дані:

N - розмір масиву;

A - масив  розміром N;

Результат:

A - інвертований  масив;

Допоміжні змінні:

I -индекс, змінна циклу, що управляє;  

M=n/2 - обчислюється до входу в цикл для зменшення об'єму обчислень; P - використовується при перестановці двох елементів масиву.

          int[] a = new int[11];

           int i; int sum=0; int p=0;

//  пропущено блок вводу масивів a.

int k= n/2;

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

           {

               p= a[ i ];  a[i]= a[n-i+1]; a[n-i+1]= p;  

           }

// пропущено блок вводу масиву а.

Формування масиву з елементів іншого масиву, що задовольняють  заданій умові

Задано: масив A=(a1,a2...,an), T - задане число.

Сформувати: масив B=(b1,b2...,bn), що складається з елементів масиву, що задовольняють умові Ai>T.

Відмітимо, т .к. індекси елементів масивів A і B не співпадають (не всі елементи масиву Ai>T), то для позначення індексів масиву B  повинна бути передбачена інша змінна.

Початкові дані:  

N - розмір масиву;

A - масив розміром N;  

T - задане значення;

Результат:      

B - масив розміром не більше N;

Y - число елементів масиву  B;

Допоміжна змінна: I - індекс - змінна циклу, що управляє.

          int[] a,b  = new int[11];

           int i; int y=0;

//  пропущено блок вводу масивів a.

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

           {

              If (a[i]>t) {y++; b[y]=a[i]}  

           }

// пропущено блок вводу масиву b.

Пошук  максимального  (мінімального)  елементу в масиві із запам'ятовуванням  його  положення  в  масиві

Задано:  масив  A=(a1,a2...,an).

Знайти:  max (min)  елемент  масиву  A  і  його індекс.

Початкові дані:  

N - розмір масиву;

A - масив розміром  N;

Результат:

max  максимальний  елемент  масиву A;

i1 -  його індекс.

Допоміжна змінна: I - індекс змінна циклу, що управляє.

//  пропущено блок вводу масивів a.

           min = a[1]; i1 = 1;

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

           {

               if (min > a[i])

               {

                   min = a[i]; i1 = i;

               }

           }

// пропущено блок вводу min i i1.

Примітка:  Якщо в масиві декілька max елементів (мають одне і те ж значення), то  в  K  запам'ятовуватиметься перший з них, а щоб запам'ятовувався індекс останнього потрібно замінити умову  на max<=A(I). Пошук мінімального елементу аналогічна процедура.

Видалення заданого  елементу  масиву

Задано:  масив A=(a1,a2...,an); N - розмір масиву;  m – позиція елементу, яку необхідно видалити .

Початкові дані:

N - розмір масиву;

A - масив розміром N;

 m – позиція елементу, яку необхідно видалити;

Результат:  A – масив у якого відсутній видалений елемент ;

Допоміжні  змінні:

I - індекс - змінна циклу, що управляє;

          int[] a  = new int[11];

           int i;

//  пропущено блок вводу масивів a.

            Int m  = int.Parse(Console.ReadLine());

 for (i = m; i <=n-1; i++)

           {

              a[i]=a[i+1];

           }

n=n-1;

// пропущено блок вводу масиву a.

Доповнення заданого  елементу  масиву

Задано:  масив A=(a1,a2...,an); N - розмір масиву;  m – позиція елементу який необхідно доповнити.   

Початкові дані:

N - розмір масиву;

A - масив розміром N;

m – позиція елементу який необхідно доповнити;

Результат:  A – масив;

Допоміжні  змінні:

I - індекс - змінна циклу, що управляє;

          int[] a  = new int[12];

           int i;

//  пропущено блок вводу масивів a.

            Int m  = int.Parse(Console.ReadLine());

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

 for (i = n; i >=m; i--)

           {

              a[i+1]=a[i];

           }

n=n+1;

            a[m]  = int.Parse(Console.ReadLine());

// пропущено блок вводу масиву a.

Приклад роботи з статичними масивами 

public void TestDeclaration()

{

  //оголошуються три одномірних масива A,B,C

  int[] A = new int[5], B= new int[5], C= new int[5];

  Arrs.CreateOneDimAr(A);

  Arrs.CreateOneDimAr(B);

  for(int i = 0; i<5; i++)

     C[i] = A[i] + B[i];

  //оголошення масиву з явною ініціалізацією

  int[] x ={5,5,6,6,7,7};

  //оголошення масивів з відкладеною ініціалізацією

  int[] u,v;

  u = new int[3];

  for(int i=0; i<3; i++) u[i] =i+1;

  //v= {1,2,3}; //присвоювання константного масиву

  //неприпустимо

  v = new int[4];

  v=u; //припустиме присвоювання

  int [,] w = new int[3,5];

  //v=w; //неприпустиме присвоювання: об'єкти різних класів

  Arrs.PrintAr1("A", A); Arrs.PrintAr1("B", B);

  Arrs.PrintAr1("C", C); Arrs.PrintAr1("X", x);

  Arrs.PrintAr1("U", u); Arrs.PrintAr1("V", v);

}

На що варто звернути увагу, аналізуючи цей текст:

  •  У процедурі показані різні способи оголошення масивів. Спочатку оголошуються одномірні масиви A, B й C, створювані конструктором. Значення елементів цих трьох масивів мають той самий тип int. Те, що вони мають однакове число елементів, відбулося з волі програміста, а не диктувалося вимогами мови. Помітьте, що після такого оголошення з ініціалізацією конструктором, всі елементи мають значення, у цьому випадку - нуль, і можуть брати участь в обчисленнях.
  •  Массив x оголошений з явною ініціалізацією. Число й значення його елементів визначається константним масивом.
  •  Масиви u й v оголошені з відкладеною ініціалізацією. У наступних операторах масив u ініціалізується в об'єктному стилі - елементи одержують його в циклі значення.
  •  Зверніть увагу на закоментованний оператор присвоювання. На відміну від ініціалізації, використати константний масив у правій частині оператора присвоювання неприпустимо. Ця спроба приводить до помилки, оскільки v - це посилання, який можна привласнити посилання, але не можна привласнити константний масив. Посилання привласнити можна. Що відбувається в операторі присвоювання v = u? Це коректне посилальне присвоювання: хоча u й v мають різне число елементів, але вони є об'єктами одного класу. У результаті присвоювання пам'ять, відведена масиву v, звільниться, нею займеться тепер збирач сміття. Обидві посилання u й v будуть тепер указувати на той самий масив, так що зміна елемента одного масиву негайно відіб'ється на іншому масиві.
  •  Далі визначається двовимірний масив w і робиться спроба виконати оператор присвоювання v=w. Це посилальне присвоювання некоректно, оскільки об'єкти w й v - різних класів і для них не виконується необхідне для присвоювання узгодження по типу.
  •  Для підтримки роботи з масивами створений спеціальний клас Array, статичні методи якого виконують різні операції над масивами. Зокрема, у прикладі використані два методи цього класу, один із яких заповнює масив випадковими числами, другий - виводить масив на печать. Ось текст першого із цих методів:

public static void CreateOneDimAr(int[] A)

{

  for(int i = 0; i<A.GetLength(0);i++)

     A[i] = rnd.Next(1,100);

}//CreateOneDimAr

Тут rnd - це статичне поле класу Array, оголошене в такий спосіб:

private  static Random rnd = new Random();

Процедура печатки масиву з ім'ям name виглядає так:

public static void PrintAr1(string name,int[] A)

{

  Console.WriteLine(name);

  for(int i = 0; i<A.GetLength(0);i++)

     Console.Write("\t" + name + "[{0}]={1}", i, A[i]);

  Console.WriteLine();

}//PrintAr1

На рис. 11.1 показаний консольний вивід результатів роботи процедури TestDeclarations.


Рис. 11.1.  Результати оголошення й створення масивів

Особливу увагу звернете на вивід, пов'язаний з масивами u й v.

Приклад  роботи з динамічним масивом

public void TestDynAr()

{

  //оголошення динамічного масиву A1

  Console.WriteLine("Уведіть число елементів масиву A1");

  int size = int.Parse(Console.ReadLine());

  int[] A1 = new int[size];

  Arrs.CreateOneDimAr(A1);

  Arrs.PrintAr1("A1",A1);

}//TestDynAr

В особливих коментарях ця процедура не має потреби. Тут верхня границя масиву визначається користувачем.

Обєднуючи стандартні блоки в готові алгоритми можна написати досить цікаві програми.

Задача11.1. Дано 10 цілих чисел, написати алгоритм находження мінімального числа.

 

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

   class Program

   {

       static void Main(string[] args)

       {

           // peremennie

          int[] a = new int[11];

           Random r = new Random();

           int i,min,i1;

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

           {

               a[i] = int.Parse(Console.ReadLine());

           }

           min = a[1]; i1 = 1;

           for (i = 2; i <= 10; i++)

           {

               if (min > a[i])

               {

                   min = a[i]; i1 = i;

               }

           }

 

               Console.ReadLine();

       }

   }

}

Задача 11.2. Дано ціле число. Зробити число перевертень.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication4

{

   class Program

   {

       static void Main(string[] args)

       {

           int[] a = new int[11];

           int n;

           n = int.Parse(Console.ReadLine());

           int i = 0;

           while (n>0 )

           {

               i++;

               a[i] = n % 10;

               n = n/10;

           }

           double s = 0;

           for (int j = 1; j <= i; j++)

           {

               s = s + a[j] * Math.Exp((i - j) * Math.Log(10));

           }

           n = (int)s;

           Console.WriteLine(n);

           Console.ReadLine();

       }

   }

}

Задача 11.3. Дано послідовність дійсних чисел, видалити мінімальне число.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication5

{

   class Program

   {

       static void Main(string[] args)

       {

           int n = int.Parse(Console.ReadLine());

           int[] a = new int[n+1];

           Random r = new Random();

           int i, min, i1;

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

           {

               a[i] = r.Next(100);

           }

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

           {

               Console.Write(a[i] + " ");

           }

           Console.WriteLine();

           min = a[1]; i1 = 1;

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

           {

               if (min > a[i])

               {

                   min = a[i]; i1 = i;

               }

           }

           for (i = i1; i <= n - 1; i++)

           {

               a[i] = a[i + 1];

           }

           n = n - 1;

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

           {

               Console.Write(a[i]+ " ");

           }

           Console.WriteLine();

           Console.ReadLine();

       }

   }

}

Задача 11.4. Дано послідовність дійсних чисел, на місці останнього числа розмістити середнє арифметичне позитивних чисел.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication5

{

   class Program

   {

       static void Main(string[] args)

       {

           int n = int.Parse(Console.ReadLine());

           double[] a = new double[n+1];

           Random r = new Random();

           int i, i1;

           double sum=0;

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

           {

               a[i] = r.Next(100)-50;

           }

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

           {

               Console.Write(a[i] + " ");

           }

           Console.WriteLine();

           i1 = 0;

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

           {

               if (a[i]>0) {  sum = sum + a[i]; i1++;  }

           }

           sum = sum / i1;

           a[n] = sum;

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

           {

               Console.Write(a[i]+ " ");

           }

           Console.WriteLine();

           Console.ReadLine();

       }

   }

}

Задача 11.5 .Дано послідовність дійсних чисел, знайти максимальну кількість  чисел, що повторюються.

Пояснення.

Ввести масив, створити масив чисел, з яких складається перший масив, створити масив з кількості повторів чисел, знайти максимальну кількість повторів, вивести число.

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication5

{

   class Program

   {

       static void Main(string[] args)

       {

           int n = int.Parse(Console.ReadLine());

           

           double[] a = new double[n+1];

           double[] b = new double[n + 1];

           Random r = new Random();

           int i, i1;

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

           {

               a[i] = r.Next(10)-5;

           }

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

           {

               Console.Write(a[i] + " ");

           }

           Console.WriteLine();

           b[1] = a[1]; i1 = 1;

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

           {

               int f = 0;

               for (int j = 1; j <= i1; j++)

                if (b[j] == a[i]) f = 1;

               if (f == 0) { i1++; b[i1] = a[i]; }

           }

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

           {

               Console.Write(b[i]+ " ");

           }

           Console.WriteLine();

           Console.ReadLine();

       }

   }

}

Задача 11.6. Дано одномірний масив розмірністю N, знайти суму цифр розташованих після останнього від'ємного .

Пояснення.

Ввід масиву, пошук останнього від'ємного, знаходження суми цифр після  нього.

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


 

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

7315. Керування пам’яттю в ОС. Простий безперервний розподіл і розподіл з перекриттям. Розподіл пам’яті статичними й динамічними розділами 121.5 KB
  Тема: Керування памяттю в ОС. Простий безперервний розподіл і розподіл з перекриттям. Розподіл памяті статичними й динамічними розділами План Основна память. Вимоги до адрес, використовуваних у програмах...
7316. Процесуальні строки і витрати 40.16 KB
  Процесуальні строки і витрати ПЛАН: Вступ. Поняття процесуальних строків та їх значення у кримінальному процесі. Класифікація строків у кримінальному процесі. Порядок обчислення процесуальних строків. Поняття і види процесуальних в...
7317. Розв’язування систем лінійних алгебраїчних рівнянь над скінченними полями 184.63 KB
  Ю.Д. Жданова. Лекції з ВГПМ. М2 ТЧ обчислювальні алгоритми. Лекція № 7 10 Тема: Розв’язування систем лінійних алгебраїчних рівнянь над скінченними полями План лекції: Алгоритм знаходження всіх цілочислових розв’язків лінійного а...
7318. Організаційні та правові основи захисту населення під час воєнних дій. Правила поводження населення в конкретних НС 63.5 KB
  Тема: Організаційні та правові основи захисту населення під час воєнних дій. Правила поводження населення в конкретних НС. План: Основні положення міжнародного права з питань захисту людей. Правила поводження населення в конкретних НС. Ве...
7319. Взаємовідносини у колективі 97.5 KB
  Взаємовідносини у колективі План Прийняття групового рішення. Соціально - психологічний клімат колективу. Одним із показників успішної діяльності керівника організації (фірми, колективу) є рівень сформованості соціально-психологічно...
7320. Основи психокорекції. Курс лекцій 264.5 KB
  Психокорекційна практика як основна форма діяльності практичного психолога Поняття про психологічну корекцію. Мета і завдання психокорекції. Принципи психокорекційної роботи: принцип єдності діагностики і кор...
7321. Тістечка. Напівфабрикати для приготування тістечок 45.5 KB
  Тістечка. Напівфабрикати для приготування тістечок. Класифікація тістечок. Особливості технології приготування тістечок. Основні органолептичні показники. Санітарні правила при приготуванні та реалізації. Умови та термін зберігання...
7322. Робочий час і час відпочинку 205 KB
  Як відомо, ні рабовласницький, ні феодальний устрої не мали законодавчого обмеження робочого часу, оскільки носій робочої сили був разом з іншими знаряддями виробництва об'єктом власності.
7323. Керування пам’яттю в ОС. Сегментна, сторінкова й сегментно-сторінкова організація пам’яті 1.12 MB
  Сегментація памяті дає змогу зображати логічний адресний простір як сукупність незалежних блоків змінної довжини, які називають сегментами. Кожний сегмент звичайно містить дані одного призначення, наприклад в одному може бути стек, в іншому - програмний код і т. д.