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

Utworzenie tablicy z maksimum pozostałych tablic.

Object Storage Arubacloud
0 głosów
367 wizyt
pytanie zadane 7 listopada 2020 w C i C++ przez Kacperek_code Obywatel (1,690 p.)
edycja 7 listopada 2020 przez Kacperek_code

Cześć, nie mam pomysłu jak zrealizować punkt 3.

W funkcji main zadeklarować cztery tablice X, Y, Z i Q, N - elementowe.
1. wypełnić tablice liczbami losowymi z przedziału <p, k>, do funkcji przekazać tablicę, jej
rozmiar i granice przedziału p, k, wylosować tablice X, Y, Z,
2. wypisać tablice X, Y, Z
3. utworzyć tablicę Q następująco: Q[i] = maksimum( X[i], Y[i], Z[i]) wypisać tablicę Q
korzystając z funkcji z p. 2.

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <Windows.h>




void losuj(int t[], int N, int p, int k)
{
    for (int i = 0; i < 10; i++)
    {
        t[i] = p + rand() % (k - p + 1);
    }
}

void wypisz(int t[], int N)
{
    for (int i = 0; i < N; i++)
    {
        std::cout << t[i] << " ";
    }
}

int maksimum(int t[], int N)
{
    int max = t[0];

    for (int i = 1; i < N; i++)
    {
        if (t[i] > max)
        {
            max = t[i];
        }
    }

    return max;
}

int main()
{
    srand(time(0));
    const int N = 10;
    int X[N], Y[N], Z[N], Q[N];

    int p, k;

    std::cout << "Podaj zakres losowania: <p k>: ";
    std::cin >> p >> k;
    std::cout << "\n";

    std::cout << "Tablica X: ";
    losuj(X, N, p, k);
    wypisz(X, N);
    std::cout << "\n";

    std::cout << "\nTablica Y: ";
    losuj(Y, N, p, k);
    wypisz(Y, N);
    std::cout << "\n";

    std::cout << "\nTablica Z: ";
    losuj(Z, N, p, k);
    wypisz(Z, N);
    std::cout << "\n";

   
    std::cout << "\nTablica Q: ";
    losuj(Q, N, p, k);
    wypisz(Q, N);

    std::cin.ignore();
    std::cin.get();
    return EXIT_SUCCESS;
}

Proszę o pomoc.

2 odpowiedzi

0 głosów
odpowiedź 7 listopada 2020 przez j23 Mędrzec (194,920 p.)
for (int i = 0; i < N; ++i) 
    Q[i] = maksimum(X[i], Y[i], Z[i]);

Rozjaśniło trochę?

komentarz 7 listopada 2020 przez Kacperek_code Obywatel (1,690 p.)
Nie bardzo, bo tyle to ja sam napisałem i wywala błąd za błędem.  Dlatego napisałem tutaj na forum
komentarz 7 listopada 2020 przez Kacperek_code Obywatel (1,690 p.)
edycja 7 listopada 2020 przez Kacperek_code
komentarz 7 listopada 2020 przez j23 Mędrzec (194,920 p.)

Skoro tamten kod sam napisałeś, to dlaczego masz problem z napisaniem funkcji maksimum przyjmującej trzy wartości i zwracającej największą z nich?

0 głosów
odpowiedź 7 listopada 2020 przez tangarr Mędrzec (154,860 p.)

Musisz utworzyć nową tablicę int o długości równej ilości tablic.

Dla każdego elementu tej tablicy musisz przypisać wynik funkcji maksimum odpowiedniej tablicy.

Dla ułatwienia możesz utworzyć tablicę wskaźników na int i umieścić w niej adresy swoich tablic.

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <Windows.h>

// w tej funkcji zmienna N była nieużywana
void losuj(int t[], int N, int p, int k)
{
    for (int i = 0; i < N; i++)
    {
        t[i] = p + rand() % (k - p + 1);
    }
}

void wypisz(int t[], int N)
{
    for (int i = 0; i < N; i++)
    {
        std::cout << t[i] << " ";
    }
}

int maksimum(int t[], int N)
{
    int max = t[0];

    for (int i = 1; i < N; i++)
    {
        if (t[i] > max)
        {
            max = t[i];
        }
    }

    return max;
}

int main()
{
    srand(time(0));
    const int N = 10;
    int X[N], Y[N], Z[N], Q[N];

    int p, k;

    std::cout << "Podaj zakres losowania: <p k>: ";
    std::cin >> p >> k;
    std::cout << "\n";

    std::cout << "Tablica X: ";
    losuj(X, N, p, k);
    wypisz(X, N);
    std::cout << "\n";

    std::cout << "\nTablica Y: ";
    losuj(Y, N, p, k);
    wypisz(Y, N);
    std::cout << "\n";

    std::cout << "\nTablica Z: ";
    losuj(Z, N, p, k);
    wypisz(Z, N);
    std::cout << "\n";

    std::cout << "\nTablica Q: ";
    losuj(Q, N, p, k);
    wypisz(Q, N);

    int* tablicaTablic[4] = { X, Y, Z, Q};
    int tablicaMax[4];
    for (int i=0; i<4; i++) {
        tablicaMax[i] = maksimum(tablicaTablic[i], N);
    }
    std::cout << "\nTablica tablicaMax: ";
    wypisz(tablicaMax, 4);

    std::cin.ignore();
    std::cin.get();
    return EXIT_SUCCESS;
}

 

komentarz 8 listopada 2020 przez Kacperek_code Obywatel (1,690 p.)

Czyli nie bardzo da się zrobić w taki sposób 

for (int i = 0; i < N; ++i) 
    Q[i] = maksimum(X[i], Y[i], Z[i]);

?

Jak próbuję kombinować to ciąge wywala mi 2 błędy: 


Błąd (aktywny)    E0167    argument typu "int" jest niezgodny z parametrem typu "int *"   
Błąd    C2664    „int maksimum(int [],int)”: nie można dokonać konwersji argumentu 1 z „int” do „int []”      

 

    for (int i = 0; i < N; ++i)
    {
        Q[i] = maksimum(X[i], N);
    }
      


 

komentarz 8 listopada 2020 przez tangarr Mędrzec (154,860 p.)

Po pierwsze: Dlaczego te wywołania nie działają? Bo nie są zgodne z sygnaturą funkcji maksimum. Funkcja przyjmuje dwa elementy: adres tablicy oraz jej długość. Nie możesz do niej przekazać trzech liczb ( X[i], Y[i], Z[i] ) ponieważ to nie jest tablica. Nie możesz też do niej przekazać wyrażenia  maksimum(X[i], N) ponieważ X[i] nie jest tablicą, tylko pojedynczą liczbą.

Wydaje mi się, czy zmieniłeś opis pytania? Teraz brzmi zupełnie inaczej i to co zaproponowałem nie ma już sensu.

Wyrażenie Q[i] = maksimum( X[i], Y[i], Z[i]) w treści zadania jest tylko przepisem obrazującym co masz obliczyć.

I-ty element tablicy Q ma być maksymalnym elementem z tych trzech: X[I],Y[I],Z[I].

Teraz zostaje problem w jaki sposób użyć do tego funkcji

int maksimum(int t[], int N)

Dla każdej iteracji musisz utworzyć tablicę trójelementową i przekazać ją do funkcji maksimum

for (int i=0; i<N; i++) {
    int tab[] = { X[i], Y[i], Z[i] };
    Q[i] = maksimum(tab, 3);
}

 

komentarz 8 listopada 2020 przez Kacperek_code Obywatel (1,690 p.)

Dobra napisałem to, tylko nie jestem pewny czy to dobrze działa bo jak rozumiem dobrze polecenie to program powinien z każdej tablicy wybrać największą z liczb , czyli tablica Q powinna mieć 3 elementy. Zrobiłem to tak, ale nie

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <Windows.h>


void losuj(int t[], int N, int p, int k)
{
    for (int i = 0; i < N; i++)
    {
        t[i] = p + rand() % (k - p + 1);
    }
}

void wypisz(int t[], int N)
{
    for (int i = 0; i < N; i++)
    {
        std::cout << t[i] << " ";
    }
}

int maksimum(int t[], int N)
{
    int max = t[0];

    for (int i = 1; i < N; i++)
    {
        if (t[i] > max)
        {
            max = t[i];
        }
    }

    return max;
}

int main()
{
    srand(time(0));
    const int N = 10;
    int X[N], Y[N], Z[N], Q[N];

    int p, k;

    std::cout << "Podaj zakres losowania: <p k>: ";
    std::cin >> p >> k;
    std::cout << "\n";

    std::cout << "Tablica X: ";
    losuj(X, N, p, k);
    wypisz(X, N);
    std::cout << "\n";

    std::cout << "\nTablica Y: ";
    losuj(Y, N, p, k);
    wypisz(Y, N);
    std::cout << "\n";

    std::cout << "\nTablica Z: ";
    losuj(Z, N, p, k);
    wypisz(Z, N);
    std::cout << "\n";


    for (int i = 0; i < N; i++)
    {
        int tab[] = { X[i], Y[i], Z[i] };
        Q[i] = maksimum(tab, 3);
    }
      
    std::cout << "\nTablica Q: ";
    wypisz(Q, 3);
    std::cout << "\n";

    std::cin.ignore();
    std::cin.get();
    return EXIT_SUCCESS;
}

wydaje mi się, żeby to było dobrze.

komentarz 8 listopada 2020 przez tangarr Mędrzec (154,860 p.)

Dlaczego użyłeś takiej instrukcji?

wypisz(Q, 3);

Tablica Q ma N elementów.

komentarz 8 listopada 2020 przez Kacperek_code Obywatel (1,690 p.)

To powinno być 

 wypisz(Q, N);

Bo to tak zrozumiałem, że ta tablica Q ma zwracać 3 elementy - czyli maks z X, max z Y i Z. 

komentarz 8 listopada 2020 przez tangarr Mędrzec (154,860 p.)
Tablica przekazana do funkcji maksimum musi mieć 3 elementy.
komentarz 8 listopada 2020 przez Kacperek_code Obywatel (1,690 p.)

Czyli program działa dobrze tak? 

  wypisz(Q, N);

 

Podobne pytania

0 głosów
1 odpowiedź 194 wizyt
pytanie zadane 13 stycznia 2023 w C i C++ przez Janchess Początkujący (480 p.)
0 głosów
0 odpowiedzi 691 wizyt
pytanie zadane 25 listopada 2019 w C i C++ przez Plusik Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 146 wizyt
pytanie zadane 21 czerwca 2023 w JavaScript przez Olivier Mazur Użytkownik (680 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...