Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z umiejscowieniem najmniejszej wartości wektora na początku.

Ostatnio zmodyfikowano 2014-07-30 19:57
Autor Wiadomość
tomasz27
Temat założony przez niniejszego użytkownika
Problem z umiejscowieniem najmniejszej wartości wektora na początku.
» 2014-07-21 21:49:31
Witam, mam do wykonania takie zadanie. Napisać program, który w kolejnych N iteracjach sortuje N-elementowy wektor A. Sortowanie odbywa się przez wybór najmniejszego elementu (z części nieposortowanej) a następnie ustawienie go (podmianę z elementem) na pierwszej pozycji nieposortowanej części tego wektora.
Udało mi się wyświetlić najmniejszą wartość wprowadzanego wektora, ale nie umiem sobie poradzić z wyśiwetleniem całego wektora tylko z zastąpionym pierwszym elementem.
Narazie kod wygląda następująco:
C/C++
#include <iostream>

using namespace std;

int main()
{
    int n = 10;
    int i, tab[ n ];
    int min;
    cout << "Podaj elementy tablicy:" << endl;
    for( i = 0; i < n; i++ )
    {
        cout << i << "element tablicy: ";
        cin >> tab[ i ];
    }
    min = tab[ 0 ];
    for( i = 0; i < n; i++ )
    {
        if( tab[ i ] < min )
       
             min = tab[ i ];
        else
             i++;
       
    }
    for( i = 0; i < n; i++ )
    {
        if( min )
        {
            tab[ 0 ] = min;
            cout << min;
        }
       
        else
             i++;
       
    }
    //     cout << min << endl;
   
    return 0;
}

Bardzo proszę o sugestie, jak należałoby to rozwiązać, ponieważ nie mam pomysłu. [/i]
P-114173
pekfos
» 2014-07-21 21:54:54
Nie szukaj najmniejszej wartości, tylko indeksu, pod którym jest najmniejsza wartość. Potem to zwykłe std::swap(tab[i], tab[min])

C/C++
tab[ n ]
Tak się nie tworzy tablic w C++.

C/C++
for( i = 0; i < n; i++ )
{
    if( tab[ i ] < min )
   
         min = tab[ i ];
    else
         i++;
   
}
Jaki sens ma ten else?
P-114174
tomasz27
Temat założony przez niniejszego użytkownika
» 2014-07-24 21:41:15
Mam problem z tym zadaniem nadal, domyślam się, że jest proste i na kilka linijek kodu.. Wiem już, że tak nie wolno deklarować tablicy, zastanawiam się, jak wykonać to zadanie. Nie wiem, jaki algorytm powinien być tutaj stworzony, aby zrealizować to zadanie. Proszę bardzo o jakieś wskazówki.
P-114314
pekfos
» 2014-07-24 21:51:50
Nie szukaj najmniejszej wartości, tylko indeksu, pod którym jest najmniejsza wartość.
Wiesz, co masz znaleźć, a same szukanie to najbardziej elementarny algorytm pod słońcem. W czym problem..?
P-114316
tomasz27
Temat założony przez niniejszego użytkownika
» 2014-07-25 07:46:42
Mam coś takiego, ale w każdym kolejnym wierszu iteracji indeks, pod którym jest najmniejsza wartość powinien być na początku, a pozostałe nieuporządkowane elementy bez zmian. Sortuje wszystko od razu, a nie wiem jak zrobić tak, żeby najmniejszy element tylko był na początku a reszty nie sortować..
C/C++
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    cout << "Podaj elementy tablicy: " << endl;
    int i, j;
    int a[ 5 ];
    int zamiana, temp;
    for( i = 0; i < 5; i++ )
    {
        cout << "tab[" << i + 1 << "] = ";
        cin >> a[ i ];
    }
    do
    {
        zamiana = 0;
        for( i = 0; i < 5; i++ )
        {
            if( a[ i ] > a[ i + 1 ] )
            {
                zamiana = zamiana + 1;
                temp = a[ i ];
                a[ i ] = a[ i + 1 ];
                a[ i + 1 ] = temp;
            }
        }
    }
    while( zamiana != 0 );
   
    for( int j = 0; j < 5; j++ )
    {
        for( int k = 0; k < 5; k++ )
        { cout << a[ k ] << " "; }
        cout << endl;
    }
   
    return 0;
}
P-114325
unkn9wn
» 2014-07-25 10:07:07
ciężko analizować kod jak z notatnika

Sortuje wszystko od razu, a nie wiem jak zrobić tak, żeby najmniejszy element tylko był na początku a reszty nie sortować..

więc ... nie sortuj wszystkiego ? Zamiast od razu sortować, możesz np.: tylko odnaleźć liczbę którą będziesz zamieniał, a dopiero później, po pętli sprawdzającej zamienić 


C/C++
for( i = 0; i < 5; i++ )
{
    cout << "tab[" << i + 1 << "] = ";
    cin >> a;
}

A dokąd te liczby wczytujesz? Sama nazwa tablicy jest wskaźnikiem do pierwszego elementu tablicy i nie przestawi się na kolejny element
P-114327
pekfos
» 2014-07-25 10:24:45
Mam coś takiego,
A co to jest? To nie algorytm, który masz zaimplementować.

a nie wiem jak zrobić tak, żeby najmniejszy element tylko był na początku a reszty nie sortować..
I znowu same, bezużyteczne 'nie wiem'. Skoro aż tak opornie idzie, a usiłujemy cię czegoś nauczyć, to trzeba zmienić strategię.. Zostaw póki co te zadanie i napisz program który z 5 podanych przez użytkownika liczb wyszuka najmniejszą wartość (nie indeks) - prawie to miałeś w pierwszym poście. Potem stopniowo się to przerobi, by było odpowiedzią na zadanie z tematu.

C/C++
for( i = 0; i < 5; i++ )
{
    cout << "tab[" << i + 1 << "] = ";
    cin >> a;
}

A dokąd te liczby wczytujesz? Sama nazwa tablicy jest wskaźnikiem do pierwszego elementu tablicy i nie przestawi się na kolejny element
To gorzej, niż kod z notatnika, bo takie rzeczy jak [i] wcina parser.
P-114329
tomasz27
Temat założony przez niniejszego użytkownika
» 2014-07-28 17:24:17
Niestety od trzech dni nie miałem dostępu do komputera. Oczywiście chęć nauczenia się czegoś jest duża, lecz faktycznie idzie opornie. Wskazówki tego typu, jak podałeś są na wagę złota. Napisałem więc krótki program, w którym wczytywane jest 5 liczb, a następnie wyznaczana najmniejsza wartość. Proszę o dalsze wskazówki.

 
C/C++
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    cout << "Podaj elementy tablicy: " << endl;
    int i, min;
    int a[ 5 ];
    cout << "Podaj 5 elementow wektora: " << endl;
    for( i = 0; i < 5; i++ )
    {
        cout << i << " element: ";
        cin >> a[ i ];
    }
    min = a[ 0 ];
    for( i = 0; i < 5; i++ )
    {
        if( a[ i + 1 ] < a[ i ] )
             min = a[ i + 1 ];
       
    }
    cout << min;
   
    return 0;
}
P-114582
« 1 » 2 3
  Strona 1 z 3 Następna strona