1 Востаннє редагувалося Replace (17.12.2014 16:20:52)

Тема: Масиви

Завдання: Знайти мінімум парних елементів масиву та його порядковий номер (номери). Відсортувати масив за незростанням елементів, виключуючи з масиву додатні елементи.

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

#include <iostream>
#include <conio.h>
#include <algorithm>
using namespace std;

int main()
{
    int const n=5;
    int i,min,a[n];
    cout<<"  Enter elements: ";
    for(i=0;i<n;i++)
        cin>>a[i];
    min=a[0];
    for(i=1;i<n;i++)
    {

        if(min>a[i]) min=a[i];
    }
    cout<<"min="<<min<<endl;
     sort(a,a+5);
     cout << "\n Otsortirovan massiv: \n";
        for ( i=0; i<n; i++)
        cout << a[i] << "\t";
        cout << "\n";
    getch();
    return 0;
}

2

Re: Масиви

знайти  мінімум  парних  елементів масиву:

   for(i=1;i<n;i++)
    {
         if(a[i]%2==0)
        if(min>a[i]) min=a[i];
    }
    cout

чомусь цей варінат не працює

3

Re: Масиви

#include <iostream>
#include <conio.h>
#include <algorithm>
using namespace std;

int main()
{
    int const n=5;
    int i,min,a[n],b[n],kol=0;
    cout<<"  Enter elements: ";
    for(i=0;i<n;i++)
        cin>>a[i];
    min=a[0];
    for(i=1;i<n;i++)
    {

        if(min>a[i]) min=a[i];
    }
    cout<<"min="<<min<<endl;
    for(i=0;i<n;i++)
    {
        if(a[i]<0)
            b[i]=a[i];
        kol++;

    }
for(i=0;i<kol;i++)
    cout<<b[i]<<"\t";
     //sort(a,a+5);
     cout << "\n  massiv: \n";

        for ( i=0; i<n; i++)
        cout << a[i] << "\t";
        cout << "\n";
    getch();
    return 0;
}

http://2.firepic.org/2/images/2013-07/27/mkr4rqvf17ko.png

4

Re: Масиви

reywwe95 написав:

знайшов  функцію сортування

Якщо не розумієте, як працюють стандартні функції - краще ними не користуйтеся. Доки навчаєтеся - пишіть свої біциґлі, потім буде значно легше. А так нічому не навчитеся.

reywwe95 написав:

чомусь   цей варінат не    працює

По-перше, "чомусь не працювати" може, наприклад, тому, що комп'ютер вимкнений. Пишіть конкретно, що відбувається, телепатів тут катма.
По-друге, цей код явно неповний - немає рядку на один вище (ініціалізація min) та 3/4 останнього рядку. А телепатів тут... див. вище.
Ну і по-третє, ніхто тут не гарантує, що a[0] буде парним...

reywwe95 написав:

є   одна  ідея  але  вона  мені  здаєть ся невірна

І знову ви ся звертаєте до відсутніх тут телепатів.

Тепер - до задачі. Ви, в принципі, на правильному шляху; для того, щоб знайти мінімум парних елементів і його порядковий номер, треба:
- придумати якусь ознаку того, що перший парний елемент вже знайдено, найлегше - окремою змінною;
- не обов'язково одночасно пам'ятати і мінімум, і його номер - якщо номер, скажімо, imin, то a[imin] буде давати нам мінімальне значення;
- оскільки просять знайти номери, то передбачається, що таких елементів буде декілька; а обробка декількох елементів - це що? Правильно, цикл. Отже, після циклу з пошуком мінімума треба додати ще один цикл, в якому шукати елементи, що дорівнюють мінімуму, і виводити їхні номери.

Потім треба буде викинути з масиву додатні елементи. Для цього або треба створити новий масив і скопіювати в нього недодатні елементи, або пересунути недодатні елементи масиву a на початок масиву і запам'ятати його новий розмір. Старі підручники і викладачі радять перший спосіб, я раджу другий - при 1ГБ пам'яті не шкода виділити додаткові 20 байтів, але зробити програму зрозумілішою.
І тільки після цього можна сортувати. Раджу бульбашковим алгоритмом - він для новачків зазвичай найзрозуміліший.

Подякували: reywwe951

5

Re: Масиви

reywwe95 написав:
    for(i=0;i<n;i++)
    {
        if(a[i]<0)
            b[i]=a[i];
        kol++;

    }
Прихований текст

http://2.firepic.org/2/images/2013-07/27/mkr4rqvf17ko.png

Це типовий приклад того, що зветься невизначеною поведінкою - undefined behavior чи просто UB. У вас є масив b на 5 елементів. Ви копіюєте в нього 0-й, 3-й і 4-й елементи з a на відповідні місця. Що ж опиняється на 1-му і 2-му місцях? Сміття - те, що було в пам'яті до того, як був створений масив b.

Подякували: reywwe95, Yola2

6

Re: Масиви

як  позбутись  сміття  ??

7 Востаннє редагувалося koala (27.07.2013 15:04:38)

Re: Масиви

Записати щось на нього зверху, очевидно ж. Або не звертатися до замічених комірок. Наприклад,

    for(i=0;i<n;i++)
    {
        if(a[i]<=0)
            b[kol++]=a[i];
    }

8

Re: Масиви

Спасибі  за  поміч 

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

поясніть  цю   строчку

9

Re: Масиви

А що вам у ній незрозуміло?

10 Востаннє редагувалося -=ЮрА=- (27.07.2013 23:35:28)

Re: Масиви

reywwe95, тримай

#include <ctime>    //time
#include <cstdio>    //srand
#include <iostream>    //i/o
using namespace std;

int main()
{
    int * arr = 0;//вказівник на наш масив
    int imin  = 0;//буде містити індекс min єлементу
    int i, j;//змінні лічільники
    int n = 15;//буде містити розмір масиву
    //я забажав масив з 15 єлементів, модливо зробити ввод кількості 

    srand(time(0));//встановлюємо початкове значення генератора випадкових чисел
    //генеруємо масив ініціалізація - випадковими єлементами у межах -10...10
    //однчасно відшукуэмо мін элемент (це можна робити ы при простому вводі з клавіатури
    arr = new int[n];
    cout<<"\nINPUT :"<<endl;
    for(i = 0; i < n; i++)
    {
        arr[i] = (rand()%20 - 10);//випадковимі єлементи у межах -10...10
        //відшукуэмо мін элемент
        if( arr[imin] > arr[i] )
            imin = i;
        cout<<arr[i]<<" ";
    }
    cout<<"\nMIN ELEMENT :"<<endl;
    cout<<"index : "<<imin<<endl;
    cout<<"value : "<<arr[imin]<<endl;

    //виключаймо з масиву додатні елементи.
    for(i = 0; i < n; i++)
    {
        if( arr[i] > 0 )
            arr[i] = 0;//занулюємо додатні єлементи
    }

    for(i = 0; i < n; i++)
    for(j = i; j < n; j++)
    {
        if(arr[i] < arr[j] )
        {
            //обмін без буфера
            arr[i] += arr[j];
            arr[j]  = arr[i] - arr[j];
            arr[i]  = arr[i] - arr[j];
        }
    }
    cout<<"\nSORTED ARRAY :"<<endl;
    for(i = 0; i < n; i++)
        cout<<arr[i]<<" ";
    cin.get();
    return 0;
}
Post's attachments

Безымянный.jpg 17.41 kb, 333 downloads since 2013-07-27 

Подякували: Yola1

11

Re: Масиви

всім  спасибі    !

12 Востаннє редагувалося koala (30.07.2013 06:03:35)

Re: Масиви

Для любителів користувати sort замість сортувати вручну:

Код
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>

using namespace std;

bool isEven ( int number )
{
    return number % 2 == 0;
}

bool isNonPositive ( int number )
{
    return number <= 0;
}

int main()
{
  unsigned nElements;
    cout << "Enter array length ";
    cin >> nElements;
  vector< int > array(nElements);
  cout << "Enter elements:" << endl;
  generate( array.begin(), 
              array.end(),
                        [] () -> int {
                            int number;
                            cin >> number;
                            return number;
                        }
              );
    
  vector< int > evenElements( count_if( array.begin(), array.end(), isEven) );
    if( evenElements.size() )
    {
      copy_if( array.begin(), array.end(), evenElements.begin(), isEven );
      int min = *min_element( evenElements.begin(), evenElements.end() );
      cout << "Mininal even element is " 
             << min
                 << ", found on position(s):" << endl;
    unsigned index=0;
    for_each( array.begin(), 
                  array.end(),
                  [min, &index] (int number ) { 
                              if( number == min ) cout << index << " "; 
                              ++index;
                     }
                );              
  }
  else
    cout << "No even elements found";
    
  vector< int > nonPositiveElements( count_if( array.begin(), array.end(), isNonPositive) );
  if( nonPositiveElements.size() )
  {
      copy_if( array.begin(), array.end(), nonPositiveElements.begin(), isNonPositive );
        sort( nonPositiveElements.begin(), nonPositiveElements.end(), greater< int >() );
    cout << endl << "Sorted array:" << endl;  
    for_each( nonPositiveElements.begin(), 
              nonPositiveElements.end(),
                [] (int number) { 
                            cout << number << " "; 
                    }
                );              
  }
  else
    cout << "No non-positive elements found";
    cout << endl;
}
Результат

http://replace.org.ua/misc.php?action=pun_attachment&amp;item=216&amp;download=0

Post's attachments

задача.png 22.9 kb, 305 downloads since 2013-07-28 

Подякували: incred1

13

Re: Масиви

koala написав:

Для любителів користувати sort замість сортувати вручну:

Код
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>

using namespace std;

bool isEven ( int number )
{
    return number % 2 == 0;
}

bool isNonPositive ( int number )
{
    return number <= 0;
}

int main()
{
  unsigned nElements;
    cout << "Enter array length ";
    cin >> nElements;
  vector< int > array(nElements);
  cout << "Enter elements:" << endl;
  generate( array.begin(), 
              array.end(),
                        [] () -> int {
                            int number;
                            cin >> number;
                            return number;
                        }
              );
    
  vector< int > evenElements( count_if( array.begin(), array.end(), isEven) );
    if( evenElements.size() )
    {
      copy_if( array.begin(), array.end(), evenElements.begin(), isEven );
      int min = *min_element( evenElements.begin(), evenElements.end() );
      cout << "Mininal even element is " 
             << min
                 << ", found on position(s):" << endl;
    unsigned index=0;
    for_each( array.begin(), 
                  array.end(),
                  [min, &index] (int number ) { 
                              if( number == min ) cout << index << " "; 
                              ++index;
                     }
                );              
  }
  else
    cout << "No even elements found";
    
  vector< int > nonPositiveElements( count_if( array.begin(), array.end(), isNonPositive) );
  if( nonPositiveElements.size() )
  {
      copy_if( array.begin(), array.end(), nonPositiveElements.begin(), isNonPositive );
        sort( nonPositiveElements.begin(), nonPositiveElements.end(), greater< int >() );
    cout << endl << "Sorted array:" << endl;  
    for_each( nonPositiveElements.begin(), 
              nonPositiveElements.end(),
                [] (int number) { 
                            cout << number << " "; 
                    }
                );              
  }
  else
    cout << "No non-positive elements found";
    cout << endl;
}
Результат

http://replace.org.ua/misc.php?action=pun_attachment&amp;item=216&amp;preview&amp;secure_str=931t1563

Щось картинка погано прикріпилась

Подякували: koala1

14

Re: Масиви

Подивіться будь-ласка, код не працює,де помилка?
З клавіатури ввести послідовність структур, кожна з яких задає координати двох протилежних (лівої верхньої і правої нижньої) вершин прямокутника, сторони якого паралельні до осей координат. Роздрукувати введені дані у вигляді таблиці, відсортувавши їх за зростанням лівої координати x прямокутника. Визначити й вказати прямокутники з найбільшою і найменшою площею.

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

struct pryamoug
{
    int x;
    int y;

};
struct pryamoug A,B,C,D;

struct pryamoug p[8]={ {A.x,A.y},{B.x,B.y}, {C.x,C.y}, {D.x,D.y} };

int main (void)
{

    int sort (struct pryamoug p[8]);


        printf("Enter koord tochky A, D");
        scanf("%i %i %i %i",&A.x,&A.y,&D.x,&D.y);
        if(A.x>=D.x || A.y<=D.y)
        {
            printf("Nevirni dani, povtorit vvedennya");

        }

    B.x=D.x;
    B.y=A.y;
    C.x=A.x;
    C.y=D.y;

    sort(p[8]);
    return 0;

}
int sort(struct pryamoug p[8])
{
    int i,j,temp,n=7;
    for(i=0;i<n-1;i++)
     for(j=i+1;j<n;j++)
     if(p[i]>p[j])
     {
        temp=p[i];
        p[i]=p[j];
        p[j]=temp;
     }


}

void show(struct pryamoug p[8])
{
    int i;
    printf("\n\t===========================================\n");
    printf("\t |    A.x    |    A.y    |    B.x    |    B.y    |    C.x    |    C.y    |     D.x    |    D.y");
    for(i=0;i<p[8];i++)
    {
        printf("\t|    %i    |    %i    |    %i     |    %i    |    %i    |    %i    |    %i    |    %i    |    %i",
                  p[i]);
    }


}

15

Re: Масиви

Треба ще доробляти,але поки основа не працює

16

Re: Масиви

@Helen11
Створіть окрему тему для вашого завання

17

Re: Масиви

Ви правила читали перед тим, як питати? Зверніть увагу на пп. 3.4 і 3.6.
І, до речі, на ваше питання("де помилка?") може відповісти будь-який компілятор, можете людей не смикати.

18

Re: Масиви

@koala, @Очі.завидющі

Сильно не реагуйте: людина за півроку не навчилася цьому.
Схожа спроба була тут. І тут.

19

Re: Масиви

Як ввести кількість елементів масиву поза функцією(робота зі структурами) без попереднього використання константи?

#include "stdafx.h"

#include <Windows.h>

#include <iostream>

using namespace std;
const unsigned int sz = 3;

struct cars {

    char type[8];

    char num_car[8];

    long int y_of_release;

    long long int probig;

};

cars s[sz];

20

Re: Масиви

Створіть окрему тему, у вас своє питання.