• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyszukiwanie dwóch najmniejszych liczb i zamiana miejsc

VPS Starter Arubacloud
+1 głos
1,793 wizyt
pytanie zadane 3 czerwca 2016 w C i C++ przez zuzka_kotek Początkujący (290 p.)
edycja 3 czerwca 2016 przez zuzka_kotek

Dzień Dobry 
Mam za zadanie napisania programu, który m.in. zamienia miejscami dwóch wybranych elementów oraz wyświetlanie dwóch najmniejszych liczb razem z indeksem. Napisałam obie funkcje tylko działają nieprawidłowo. Czy ktoś mógłby mi podpowiedzieć co robię źle?

​void minimum(float tablica[])
{
    float mini_1, mini_2;
    mini_1 = tablica[0];
    mini_2 = tablica[1];
    int indeks_mini_1 = 0;
    int indeks_mini_2 = 1;
    if (mini_1 > mini_2)
    {
        mini_1 = tablica[1];
        mini_2 = tablica[0];
        indeks_mini_1 = 1;
        indeks_mini_2 = 0;
    }
    for (int i = 0; i < ROZMIAR; i++)
    {
        if (tablica[i] < mini_2)
            mini_2 = tablica[i];
        indeks_mini_2 = i;

        if (mini_1 > mini_2 || mini_1 == mini_2)
        {
            mini_1 = tablica[i];
            mini_2 = tablica[1];
            indeks_mini_2 = 1;
            indeks_mini_1 = i;
        }

        int indeks_mini_1 = 0;
        int indeks_mini_2 = 1;
        for (int j = 1; j <= ROZMIAR; j++)
        {
            if (tablica[j] < tablica[indeks_mini_1])
                indeks_mini_1 = j;
            if (tablica[j] < tablica[indeks_mini_2])
                indeks_mini_2 = j;
        }
    }
    cout << "Element najmniejszy nr_1: " << mini_1 << endl;
    cout << "Index najmniejszego elementa nr_1: " << indeks_mini_1 << endl;
    cout << "Element najmniejszy nr_2: " << mini_2 << endl;
    cout << "\n\tIndex najmniejszego elementa nr_2: " << indeks_mini_2 << endl;
}
void zamiana(float tablica[])
{
    float a, b, c;
    cout << "Podaj pierwsza liczbe do zamiany: ";
    cin >> a;
    cout << "Podaj druga liczbe do zamiany: ";
    cin >> b;
    for (int i = 0; i < ROZMIAR; i++)
    {
        if (tablica[i] == a || tablica[i] == b)
        {
            for (int j = 0; j < ROZMIAR; j++)
            {
                if (tablica[j] == b && i != j || tablica[j] == a && i != j)
                {
                    c = tablica[j];
                    tablica[j] = tablica[i];
                    tablica[i] = c;
                }
            }
        }

        cout << tablica[i] << " ";
    }
}

2 odpowiedzi

0 głosów
odpowiedź 3 czerwca 2016 przez Avernis Nałogowiec (27,400 p.)
nie możesz użyć funkcji z przestrzeni nazw std: min, swap?
komentarz 3 czerwca 2016 przez zuzka_kotek Początkujący (290 p.)
Wybacz jestem dopiero początkująca w programowaniu i nie rozumiem
komentarz 3 czerwca 2016 przez Avernis Nałogowiec (27,400 p.)
std::min(1 liczba, 2 liczba) //  porównanie która mniejsza, bodajże zwracała mniejszą liczbe

std::swap(1 liczba, 2 liczba) // zamiana miejscami
0 głosów
odpowiedź 3 czerwca 2016 przez juriiw Gaduła (3,470 p.)
Zuzka opisz dokładniej działanie programu (co on ma robić). Ja to zrozumiałem tak:

Program ma dwie opcje:

1. Wyszukać dwie najmniejsze liczby w podanej tablicy.

2. Wybrane indeksy w tablicy zamienić miejscami.
komentarz 6 czerwca 2016 przez zuzka_kotek Początkujący (290 p.)

W sumie to tak. Program ma za zadanie jeszcze kilka rzeczy robić typu wyświetlać max itp. 

#include <conio.h>
 
#include <string>
#include <iostream>
#include <time.h>
#include <cstdlib>
#define ROZMIAR 10
using namespace std;
 
void menu();
void wypelnianie_losowe(float tablica[]);
void wypelnianie_kolejne(float tablica[]);
float suma_ujemna(float tablica[]);
void przesuniecie_w_lewo(float tablica[]); //przesunie elementy tablicy o 1 w lewo
void przesuniecie_w_prawo(float tablica[]); //przesunie elementy o 2 w prawo
float maksimum(float tablica[]);
void minimum(float tablica[]); //wyswietla 2 najmiejsze liczby razem z jej indeksem
void zamiana(float tablica[]); //zamienia dwie liczby
void usuwanie_wszystkich_spacji(string napis);
void usuwani_spacji_wielokrotnych(string napis);
int main()
{
    srand(time(NULL));
    float tablicaa[ROZMIAR];
    int liczba;
    string napiss;
    menu();
    cout << "podaj liczbe:";
    cin >> liczba;
    switch (liczba) {
    case 1:
        wypelnianie_losowe(tablicaa);
        cout << endl;
        break;
    case 2:
        wypelnianie_kolejne(tablicaa);
        cout << endl;
        break;
    }
    cout << "Suma ujemnych elementow wynosi: " << suma_ujemna(tablicaa) << endl;
    przesuniecie_w_lewo(tablicaa);
    cout << endl;
    przesuniecie_w_prawo(tablicaa);
    cout << endl;
    cout << "Najwiekszy element tablicy to: " << maksimum(tablicaa) << endl;
    // minimum(tablicaa);
    cout << endl;
    zamiana(tablicaa);
    cout << endl;
    cout << "Napisz zdanie:";
    cin.ignore();
    getline(cin, napiss);
    usuwanie_wszystkich_spacji(napiss);
    cout << endl;
    cout << "Napisz zdanie:";
    cin.ignore();
    getline(cin, napiss);
    usuwani_spacji_wielokrotnych(napiss);
    cout << endl;
 
    system("pause");
    return 0;
}
 
void menu()
{
    cout << "---\tMENU UZYTKOWNIKA\t---" << endl;
    cout << "1:Wypelnij tablice losowymi liczbami" << endl;
    cout << "2:Wypelnij tablice kolejnymi liczbami" << endl;
    cout << "a:Suma ujemnych elementow" << endl;
    cout << "b:Przesuuniecie wszystkich elementow o 1 w lewo" << endl;
    cout << "c:Przesuuniecie wszystkich elementow o 2 w prawo" << endl;
    cout << "d:Najwieksza liczba w tablicy" << endl;
    cout << "e:Dwie najmniejsze wartosci z ich indeksami" << endl;
    cout << "f:Najczesciej pojawiajaca sie wartosc" << endl;
    cout << "g:Zamiana miejscami dwoch zmiennych" << endl;
    cout << "h:Sortowanie tablicy" << endl;
    cout << "i:Usuwanie wszystkich spacji" << endl;
    cout << "j:Usuwanie spacji wielokrotnych" << endl;
}
void wypelnianie_kolejne(float tablica[])
{
    cout << "Tablica z kolejnymi elementami:" << endl;
    for (int i = 0; i < ROZMIAR; i++) {
        tablica[i] = i + 1;
        cout << tablica[i] << "\t";
    }
}
void wypelnianie_losowe(float tablica[])
{
    cout << "Tablica z elementami wylosowanymi:" << endl;
    for (int i = 0; i < ROZMIAR; i++) {
        tablica[i] = rand() % 201 - 100;
        cout << tablica[i] << "\t";
    }
}
float suma_ujemna(float tablica[])
{
    int suma = 0;
    for (int i = 0; i < ROZMIAR; i++) {
        if (tablica[i] < 0)
            suma += tablica[i];
    }
    return suma;
}
void przesuniecie_w_lewo(float tablica[])
{
    cout << "Tablica po przesunieciu o 1 w lewo: " << endl;
    for (int i = 0; i < ROZMIAR; i++) {
        if (i == ROZMIAR - 1) {
            cout << tablica[0] << "\t";
        }
        else {
            cout << tablica[i + 1] << "\t";
        }
    }
}
void przesuniecie_w_prawo(float tablica[])
{
    cout << "Tablica po przesunieciu elementow o 2 w prawo:" << endl;
    for (int i = 0; i < ROZMIAR; i++) {
        if (i == 0) {
            cout << tablica[ROZMIAR - 2] << "\t";
        }
        else if (i == 1) {
            cout << tablica[ROZMIAR - 1] << "\t";
        }
        else {
            cout << tablica[i - 2] << "\t";
        }
    }
}
float maksimum(float tablica[])
{
    int maks = tablica[0];
    for (int i = 0; i < ROZMIAR; i++) {
        if (tablica[i] > maks)
            maks = tablica[i];
    }
    return maks;
}
void minimum(float tablica[])
{
    float mini_1, mini_2;
    mini_1 = tablica[0];
    mini_2 = tablica[1];
    int indeks_mini_1 = 0;
    int indeks_mini_2 = 1;
    if (mini_1 > mini_2) {
        mini_1 = tablica[1];
        mini_2 = tablica[0];
        indeks_mini_1 = 1;
        indeks_mini_2 = 0;
    }
    for (int i = 0; i < ROZMIAR; i++) {
 
        if (tablica[i] < mini_2)
            mini_2 = tablica[i];
        indeks_mini_2 = i;
 
        if (mini_1 > mini_2 || mini_1 == mini_2) {
            mini_1 = tablica[i];
            mini_2 = tablica[1];
            indeks_mini_2 = 1;
            indeks_mini_1 = i;
        }
 
        int indeks_mini_1 = 0;
        int indeks_mini_2 = 1;
        for (int j = 1; j <= ROZMIAR; j++) {
            if (tablica[j] < tablica[indeks_mini_1])
                indeks_mini_1 = j;
            if (tablica[j] < tablica[indeks_mini_2])
                indeks_mini_2 = j;
        }
    }
    cout << "Element najmniejszy nr_1: " << mini_1 << endl;
    cout << "Index najmniejszego elementa nr_1: " << indeks_mini_1 << endl;
    cout << "Element najmniejszy nr_2: " << mini_2 << endl;
    cout << "\n\tIndex najmniejszego elementa nr_2: " << indeks_mini_2 << endl;
}
void zamiana(float tablica[])
{
    float a, b, c;
    cout << "Podaj pierwsza liczbe do zamiany: ";
    cin >> a;
    cout << "Podaj druga liczbe do zamiany: ";
    cin >> b;
    for (int i = 0; i < ROZMIAR; i++) {
        if (tablica[i] == a || tablica[i] == b) {
            for (int j = 0; j < ROZMIAR; j++) {
                if (tablica[j] == b && i != j || tablica[j] == a && i != j) {
                    c = tablica[j];
                    tablica[j] = tablica[i];
                    tablica[i] = c;
                }
            }
        }
 
        cout << tablica[i] << " ";
    }
}
 
void usuwanie_wszystkich_spacji(string napis)
{
 
    int dlugosc;
    dlugosc = napis.length();
    for (int i = 0; i < dlugosc; i++) {
        if (napis[i] == ' ')
            cout << "";
        else
            cout << napis[i];
    }
}
void usuwani_spacji_wielokrotnych(string napis)
{
    int dlugosc;
    dlugosc = napis.length();
    for (int i = 0; i < dlugosc; i++) {
        if (napis[i] == ' ' && napis[i + 1] == ' ')
            cout << " ";
        else
            cout << napis[i];
    }
}

 

komentarz 8 czerwca 2016 przez juriiw Gaduła (3,470 p.)
edycja 8 czerwca 2016 przez juriiw

Zuza wybacz, że odpisuję tak późno ale ostatnio nie mam czasu aby usiąść przy kompie.

Zerknąłem tak pobieżnie na funkcję "minimum" i postanowiłem napisać na szybkości uderzająco podobny przykład (aby nie było, że podaję na tacy gotowe rozwiązanie):

#include <iostream>

using namespace std;

int tablica[10] = {11,140,0,13,49,500,6,1,8,9};

int main()
{
    int x1 = tablica[0];    //przypisalem 0-wy elem. tablicy zeby w petli FOR bylo z czym porownywac
    int x2 = tablica[0];    //
    int pozycja1, pozycja2; //pozycja w tablicy na ktorej znajdyuje sie szukany, najmniejszy element

    //////// petla szukajaca pierwszej najmniejszej liczby ////////////////
    for(int i = 0; i < 10; i++)
    {
        if(tablica[i] < x1)
        {
            x1 = tablica[i];
            pozycja1 = (i+1);   // (i+1) - aby ladniej wygladalo przy opisie. Uzytkownik Twojego programu moze nie wiedziec,
        }                       // ze indeksy tablicy liczone sa od zera wiec dla jego oka beda od 1 do 10   :D
    }
    ///////////////////////////////////////////////////////////////////////

    cout << "Tablica zawiera ciag cyfr: {11,140,0,13,49,500,6,1,8,9}\n\n";
    cout << "Najmniejsza liczba to: \t\t" << x1 << " i jest na pozycji " << pozycja1 << "\n";

    //////// petla szukajaca drugiej najmniejszej liczby /////////////////
    for(int i = 0; i < 10; i++)                 //petla brzmi tak: skacz kolejno po tablicy...
    {                                           //
        if(tablica[i] != tablica[(pozycja1-1)]) //                ...pomin krok petli w ktorym natrafisz na element tablicy                   
        {                                       //                  wybrany jako najmniejszy w poprzednim szukaniu.
            if(tablica[i] < x2)                 //                
                {
                    x2 = tablica[i];
                    pozycja2 = (i+1);
                }
        }
    }
    ///////////////////////////////////////////////////////////////////////
    cout << "Nastepna najmniejsza liczba to: " << x2 << " i jest na pozycji " << pozycja2 << "\n\n\n\n";


return 0;
}

 

Postaram się szybko zerknąć na funkcję "zamiana" ...jeśli nie zasnę.

 

/edit

W miarę najprościej przedstawiam Ci pomysł na zamianę miejscami "pozycji" w tablicy.

Jeśli choć troszkę pomogłem to zakreśl zieloną fajeczkę :D

#include <iostream>

using namespace std;

int tablica[10] = {11,140,0,13,49,500,6,1,8,9};

int main()
{
    cout << "Mamy tablice: {11,140,0,13,49,500,6,1,8,9}" << endl;
    cout << "Zamieniam pozycje 4 z 7 miejscami\n\n";

    int a = 4;
    int b = 7;

    int c = tablica[a-1];
    tablica[a-1] = tablica[b-1];
    tablica[b-1] = c;

    cout << "Po zamianie tablica wyglada nastepujaco: {";

    for(int i = 0; i < 10; i++)
    {
        cout << tablica[i] << ",";
    }

    cout << "}\n\n\n\n";

return 0;
}

 

Podobne pytania

0 głosów
3 odpowiedzi 4,608 wizyt
pytanie zadane 21 września 2016 w C i C++ przez Xabi14 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 4,376 wizyt
pytanie zadane 30 maja 2016 w C i C++ przez zuzka_kotek Początkujący (290 p.)
0 głosów
0 odpowiedzi 114 wizyt
pytanie zadane 8 stycznia 2018 w SQL, bazy danych przez Grzegorz Mikina Dyskutant (8,060 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...