• 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

Fiszki IT
Fiszki IT
+1 głos
1,239 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,260 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,260 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 2,630 wizyt
pytanie zadane 21 września 2016 w C i C++ przez Xabi14 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 3,537 wizyt
pytanie zadane 30 maja 2016 w C i C++ przez zuzka_kotek Początkujący (290 p.)
0 głosów
0 odpowiedzi 74 wizyt
pytanie zadane 8 stycznia 2018 w SQL, bazy danych przez Grzegorz Mikina Mądrala (6,340 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

84,736 zapytań

133,542 odpowiedzi

295,952 komentarzy

56,001 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...