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

Tablica 2D - Wyswietlanie liczb wiekszych niz 5, parzystych, podzielnych przez 6...

Object Storage Arubacloud
0 głosów
478 wizyt
pytanie zadane 24 marca 2020 w C i C++ przez matt21mcr Nowicjusz (220 p.)
edycja 24 marca 2020 przez matt21mcr

Witam,

Napisalem czesc programu, wypelniajacy tablice 7x8 liczbami losowymi calkowitymi z zakresu od -5 do 256. Na wyjsciu ma program wyswietlac:

1. Wszystkie elementy wieksze od 5...
2. Znaleźć wszystkie elementy parzyste i je wywietlić
3. Znaleźć liczby podzielne przez 6 i je pokazac
4. Znaleźć wszystkie elementy mniejsze od zera i pokazać.

W miarę mozliwosci uzywac funkcje.

Na ten moment mam taki kod:

#include <iostream>
#include <time.h>
#include <cstdlib>
#include <windows.h>
#define MAXRAND 66;
#define SIZE 6;
using namespace std;
int main() {
   
    int x, y;
    int rand_tab[ 7 ][ 8 ];
    {
       
        cout << "Tablica 7x8 o przedziale losowych liczb od -5 do 256" << endl << endl;
        srand( time( 0 ) );
        for( y = 0; y < 7; y++ )
        {
            for( x = 0; x < 8; x++ )
            {
                rand_tab[ y ][ x ] =(( rand() % 251 ) - 5 );
               
                cout << rand_tab[ y ][ x ] << " ";
            }
            cout << endl;
        }
       
       
       
    } return 0;
}

Z góry dziękuję za jakąkolwiek pomoc w rozwiązaniu tych zadan.

Próbuję np. w ten sposób:

for( p1 = 0; p1 < 251; p1++ )
{
    for( p2 = 0; p2 < 251; p2++ )
    {
        if(( tab[ y ] ) > a &&( tab[ x ] ) > b )
        {
            cout << tab[ y ] <<;
        }
    }
}

ale no wiem, że to nie jest własciwe wyjscie...

 

Pozdrawiam :-)

komentarz 24 marca 2020 przez tkz Nałogowiec (42,000 p.)
Piszesz w C, czy C++? Czy cztery punkty mają być jednym, czy na wyjściu mają być 4 różne zbiory?

3 odpowiedzi

0 głosów
odpowiedź 24 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)

Nie napisales w czym dokladnie masz problem. Jako ze wiesz jak dziaja tablice i petle to:

1. Przelatujesz cala tablice w petli for i porownujesz czy dany elemnt jest wiekszy od 5, jesli tak to go wyswietlasz/zapisujesz w innej tablicy itd

2. lecisz przez tablice i uzywasz operacji modulo %, mysle, ze definicje liczb parzystych znasz

3. znowu modulo, choc teoretycznie kazda z liczb bedzie podzielna przez 6, ale z reszta, a Ty chyba chcesz bez reszty

4. podpunkt 1. tylko ze mniejsze od 0

W miarę mozliwosci uzywac funkcje.

Opakuj kazdy z tych podpunktow przekazujac tablice 2D.

0 głosów
odpowiedź 24 marca 2020 przez matt21mcr Nowicjusz (220 p.)
W C++. Najlepiej, gdyby to były funkcje, czyli gdyby przy wyjsciu byly od razu wszystkie 4 zbiory, ale niekoniecznie.... Nie mam punktu zaczepienia :-(
0 głosów
odpowiedź 24 marca 2020 przez tangarr Mędrzec (154,860 p.)

Przerobiłem twój kod, tak aby nakierować cię na używanie funkcji.

#include <iostream>
#include <time.h>
#include <stdlib.h>

using namespace std;

constexpr int m = 8;
constexpr int n = 7;

int losuj(int min, int max) {
    return rand() % (max - min + 1) + min;
}

void losujElementyTablicy(int tablica[m][n], int min, int max) {
    cout << "Tablica " << n << "x" << "8 o przedziale losowych liczb od " << min << " do " << max << endl << endl;
    for( int y = 0; y < m; y++ ) {
        for( int x = 0; x < n; x++ ) {
            tablica[y][x] = losuj(min, max);
            cout << tablica[y][x] << " ";
        }
        cout << endl;
    }
}

void wypiszLiczbyWiekszeNiz5(int tablica[m][n]) {

}

void wypiszParzysteLiczby(int tablica[m][n]) {
    
}

void wypiszLiczbyPodzielnePrzez6(int tablica[m][n]) {
    
}

void wypiszLiczbyMniejszeOd0(int tablica[m][n]) {
    
}

int main() {
    const int min = -5;
    const int max = 256;
    
    srand(time(0));
    
    int rand_tab[m][n];
    losujElementyTablicy(rand_tab, min, max);
    
    wypiszLiczbyWiekszeNiz5(rand_tab);
    wypiszParzysteLiczby(rand_tab);
    wypiszLiczbyPodzielnePrzez6(rand_tab);
    wypiszLiczbyMniejszeOd0(rand_tab);
    
    return 0;
}

Jedyne co musisz zrobić to zaimplementować puste funkcje.
Jak skończysz to podziel się kodem. Wtedy pokaże ci jak to można zgeneralizować jeszcze bardziej (Niech żyją funkcje! Nigdy więcej ctrl+c, ctrl+v).

komentarz 24 marca 2020 przez matt21mcr Nowicjusz (220 p.)
Wielkie dzięki za ten kod, to dokladnie to, czego potrzebowalem, teraz sproboje zrobic to, o co mnie prosisz :-)
komentarz 24 marca 2020 przez matt21mcr Nowicjusz (220 p.)

Tak się zastanawiam, czy nie mógłbys mi pomoc z jednym przykladem ? Wtedy jestem raczej pewny, ze ruszę z resztą, ale ten start mnie przeraża heh

Wypisalem na zwykle <5, ale nie w Twoim stylu, czyli nie proceduralnie:

for( y = 0; y < 7; y++ )
{
    for( x = 0; x < 8; x++ )
    {
        if( tab[ y ][ x ] > 5 )
             cout << tab[ y ][ x ] << " ";
       
    }
}

 

komentarz 24 marca 2020 przez tangarr Mędrzec (154,860 p.)

Uzupełnij ciało funkcji wypiszLiczbyWiekszeNiz5 bazując na pętli z funkcji losujElementyTablicy. Użyj argumentu przekazanego do funkcji (zmienna tablica) oraz stałych m i n. Dzięki nim kod staje się bardziej elastyczny. Możesz łatwo zmienić rozmiar macierzy.

komentarz 24 marca 2020 przez matt21mcr Nowicjusz (220 p.)

Więc tak:

void wypiszLiczbyWiekszeNiz5(int tablica[m][n]) {
    cout << "Wykaz liczb większych, niż cyfra 5" << endl;
    for( int y = 0; y < m; y++ ) {
        for( int x = 0; x < n; x++ ) {
            if( tablica[ y ][ x ] > 5 )
             cout << tablica[ y ][ x ] << " ";

        }
        cout << endl;

I dostaję własciwe odpowiedzi. To wydaje sie byc serio uzyteczne i bardzo proste wbrew pozorom... Dobrze ? :-)
 

 

komentarz 24 marca 2020 przez tangarr Mędrzec (154,860 p.)
I jedziesz dalej
komentarz 24 marca 2020 przez matt21mcr Nowicjusz (220 p.)
I niestety, za prosto chyba by bylo...

void wypiszParzysteLiczby(int tablica[m][n]) {
  cout << "Wykaz liczb parzystych z macieży" << endl;
  for( int y = 0; y < m; y++ ) {
        for( int x = 0; x < n; x++ ){
        if(tablica[m][n]%2==0)
        {
            cout<<tablica[m][n]<<" ";
        }
        cout << endl;
 

Juz bledy sie pojawiaja...
komentarz 24 marca 2020 przez tangarr Mędrzec (154,860 p.)

Zmienne m i n są rozmiarami tablicy. Twoje pętle używają zmiennych y i x.
Przemęczona głowa nie widzi już takich oczywistych błędów.
Jeżeli to zadanie nie jest na jutro rano to może zrób sobie przerwę.

komentarz 24 marca 2020 przez mokrowski Mędrzec (155,460 p.)
Bo zmienne nie powinny nazywać się m i n tylko wiersze i kolumny lub lepiej rows cols (lub odwrotnie) :-)
komentarz 24 marca 2020 przez matt21mcr Nowicjusz (220 p.)

No wlasnie jest, ale jeszcze jutro rano bede mogl powalczyc, czego nie rozumiem to bledy, ktore uniemozliwiaja mi uruchomienie apki, jakby byly problemy z funkcjami (3ema dokladnie, takze main)

void wypiszParzysteLiczby(int tablica[m][n]) {
  cout << "Wykaz liczb parzystych z macieży" << endl;
  for( int y = 0; y < m; y++ ) {
		for( int x = 0; x < n; x++ ){
		if(tablica[y][x]%2==0)
		{
			cout<<tablica[y][x]<<" ";
		}
		cout << endl;
	}
}

 

komentarz 25 marca 2020 przez tangarr Mędrzec (154,860 p.)
Nic nie widać na tym screenie.
Podejrzewam, że masz w kodzie dodatkowy nawias klamrowy } nie pasujący do żadnego bloku kodu.
komentarz 25 marca 2020 przez matt21mcr Nowicjusz (220 p.)

Problem z debugera wyswietla sie taki:

// function definition is not allowed here //

Są trzy bledy, obowiazuja one:

-Wypisz liczby podzielne przez 6
-Wypisz liczby mniejsze od 0
-Główną funckję main()

Wszystkiego probowalem... :-(

komentarz 25 marca 2020 przez matt21mcr Nowicjusz (220 p.)
using namespace std;

constexpr int m = 8;
constexpr int n = 7;

int losuj(int min, int max) {
    return rand() % (max - min + 1) + min;
}

void losujElementyTablicy(int tablica[m][n], int min, int max) {
    cout << "Tablica " << n << "x" << "8 o przedziale losowych liczb od " << min << " do " << max << endl << endl;
	for( int y = 0; y < m; y++ ) {
		for( int x = 0; x < n; x++ ) {
			tablica[y][x] = losuj(min, max);
			cout << tablica[y][x] << " ";
		}
		cout << endl;
	}
}

void wypiszLiczbyWiekszeNiz5(int tablica[m][n]) {
	cout << "Wykaz liczb większych, niż cyfra 5" << endl;
	for( int y = 0; y < m; y++ ) {
		for( int x = 0; x < n; x++ ) {
			if( tablica[ y ][ x ] > 5 )
			 cout << tablica[ y ][ x ] << " ";

		}
		cout << endl;
	}
}

void wypiszParzysteLiczby(int tablica[m][n]) {
  cout << "Wykaz liczb parzystych z macieży" << endl;
  for( int y = 0; y < m; y++ ) {
		for( int x = 0; x < n; x++ ){
		if(tablica[y][x]%2==0)
		{
			cout<<tablica[y][x]<<" ";
		}
		cout << endl;
	}
}


void wypiszLiczbyPodzielnePrzez6(int tablica[m][n]) {

}

void wypiszLiczbyMniejszeOd0(int tablica[m][n]) {

}
int _tmain(int argc, _TCHAR* argv[]) {
    const int min = -5;
    const int max = 256;

    srand(time(0));

    int rand_tab[m][n];
    losujElementyTablicy(rand_tab, min, max);

	wypiszLiczbyWiekszeNiz5(rand_tab);


    wypiszParzysteLiczby(rand_tab);
    wypiszLiczbyPodzielnePrzez6(rand_tab);
    wypiszLiczbyMniejszeOd0(rand_tab);

	system("Pause");

    return 0;
}
}

 

komentarz 25 marca 2020 przez matt21mcr Nowicjusz (220 p.)
Po wyłączeniu tej funkcji, program startuje bez problemu wiec zastanawiam sie, gdzie moze byc problem w tym przypadku...
komentarz 25 marca 2020 przez matt21mcr Nowicjusz (220 p.)
Miales racje, brakowało ' } '.

Teraz jeszcze dwie funkcje, bede probowal... :-)
komentarz 25 marca 2020 przez matt21mcr Nowicjusz (220 p.)
Ukonczone, uklony!!! :-)

Podobne pytania

+2 głosów
3 odpowiedzi 1,191 wizyt
0 głosów
0 odpowiedzi 120 wizyt
0 głosów
1 odpowiedź 830 wizyt
pytanie zadane 21 listopada 2020 w Matematyka, fizyka, logika przez kornelia Nowicjusz (120 p.)

92,588 zapytań

141,439 odpowiedzi

319,688 komentarzy

61,974 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!

...