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: #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++; } return 0; }
Bardzo proszę o sugestie, jak należałoby to rozwiązać, ponieważ nie mam pomysłu. [/i] |
|
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])Tak się nie tworzy tablic w C++. for( i = 0; i < n; i++ ) { if( tab[ i ] < min ) min = tab[ i ]; else i++; }
|
Jaki sens ma ten else? |
|
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. |
|
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..? |
|
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ć.. #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; } |
|
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ć 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 |
|
pekfos |
» 2014-07-25 10:24:45 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. 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. |
|
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. #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; }
|
|
« 1 » 2 3 |