matt21mcr Temat założony przez niniejszego użytkownika |
Tablica dwuwymiarowa - losowe wypełnienie z zakresu lilcz niepodzielnych przez 3 bez powtórzeń » 2019-12-06 11:50:36 Witam, mam taki program, który już wcześniej napisałem. #include <cstdlib> #include <iostream> #include <time.h>
using namespace std;
int x, y; int losuj[ 6 ][ 6 ];
int main() { srand( time( 0 ) ); for( y = 0; y < 5; y++ ) { for( x = 0; x < 6; x++ ) { losuj[ y ][ x ] =(( rand() % 70 ) - 5 ); cout << losuj[ y ][ x ] << " "; } cout << endl; } system( "PAUSE" ); return 0; }
Teraz mam serio duży problem, bo muszę wypełnić tablicę 6x5 elementami z zakresu -25 do 43, liczby wylosowane nie mogą się powtarzać oraz muszą być podzielne przez 3. Przejrzałem mnóstwo forów zagranicznych też i mam z tym poważny problem. Będę bardzo wdzięczny za jakąkolwiek pomoc. Z góry dziękuję za pomoc :-) Matty |
|
matt21mcr Temat założony przez niniejszego użytkownika |
Wypełnianie wartościami 6 x 6 gotowe, jeszcze brakuje liczb podzielnych przez trzy » 2019-12-06 12:20:44 Więc znalazłem rozwiązanie na to, aby tablica została wypełniana niepowtarzającymi się liczbami: #pragma hdrstop #pragma argsused
#ifdef _WIN32 #include <tchar.h> #else typedef char _TCHAR; #define _tmain main #endif
#include <stdio.h> #include <iostream> #include <cstdlib> #include <ctime>
void swap( int array[], int pos1, int pos2 ) { int tmp = array[ pos1 ]; array[ pos1 ] = array[ pos2 ]; array[ pos2 ] = tmp; }
int _tmain( int argc, _TCHAR * argv[] ) { srand( time( NULL ) ); int numbers[ 100 ]; int matrix[ 6 ][ 6 ]; for( int i = 0; i < 100; ++i ) { numbers[ i ] = i; } int repeat = rand() % 100 + 100; for( int i = 0; i < repeat; ++i ) { swap( numbers, rand() % 100, rand() % 100 ); } for( int i = 0; i < 6; ++i ) { for( int j = 0; j < 6; ++j ) { matrix[ i ][ j ] = numbers[ i * 10 + j ]; } } std::cout << "This is the matrix:" << std::endl << std::endl; for( int i = 0; i < 6; ++i ) for( i = 0; i < 10; i++ ) { for( int j = 0; j < 6; ++j ) { std::cout << matrix[ i ][ j ] << " "; } std::cout << std::endl; } getchar(); system( "PAUSE" ); return 0; }
Bardzo miły fragment kodu, nawet dla mnie zrozumiały, ale teraz z tymi liczbami podzielnymi to już się totalnie gubię.. Niby to jest proste z forów, które przejrzałem, ale gdzie to dopisać... Dzięki, Matty |
|
nanoant20 |
» 2019-12-06 16:51:33 Teraz mam serio duży problem, bo muszę wypełnić tablicę 6x5 elementami z zakresu -25 do 43, liczby wylosowane nie mogą się powtarzać oraz muszą być podzielne przez 3 |
z ciekawości ten zakres to od -25 czy od 25? jeżeli od -25 do 43 int liczba = (( rand() % 69 ) - 25 ); jeżeli od 25 do 43 int liczba = (rand() % (43 - 25 + 1)) + 25; int liczba =(( rand() % 69 ) - 25 ); if( liczba % 3 == 0 ) { }
Losowanie bez powtórzeń//edit jeżeli nawet zakres będzie od -25 do 43 to do tablicy liczb podzielnych przez 3 i bez powtórzenia można zapisać tylko 23 //edit temat jest niejednoznaczny z treścią w temacie Tablica dwuwymiarowa - losowe wypełnienie z zakresu lilcz niepodzielnych przez 3 bez powtórzeń |
a w treści liczby wylosowane nie mogą się powtarzać oraz muszą być podzielne przez 3 |
|
|
matt21mcr Temat założony przez niniejszego użytkownika |
LICZBY TYLKO PODZIELNE PRZEZ 3, zakres -25 do 43 - POMOC W MODYFIKACJI KODU » 2019-12-07 12:06:57 nanoant20, przede wszystkim wielkie dzięki za odzew i pomoc(!) - Przepraszam z góry, nie wiem czy można zmienić tytuł postu. Powiem szczerze, że są to często szukane tematy, z racji tego, że wielu 'uczących'; uważa, że uczy to logicznego myślenia w programowaniu. Proszę Was, zacnych programistów, aby pomogli mi w rozwiązaniu tego problemu do końca. :-). TYLKO LICZBY PODZIELNE PRZEZ 3. Wiem, że to by funkcjonowało, bo już sprawdziłem: { int tab[ 6 ], i; for( i = 0; i < 6; i++ ) { cin >> tab[ i ]; if( tab[ i ] % 3 == 0 ) cout << tab[ i ] << endl; }
Tylko zastanawiam się, gdzie to poprawnie w kodzie programu wtsawić, wcześniej pokazanego. Chodzi mi o ten kawałek kodu" #pragma hdrstop #pragma argsused
#ifdef _WIN32 #include <tchar.h> #else typedef char _TCHAR; #define _tmain main #endif
#include <stdio.h> #include <iostream> #include <cstdlib> #include <ctime>
void swap( int array[], int pos1, int pos2 ) { int tmp = array[ pos1 ]; array[ pos1 ] = array[ pos2 ]; array[ pos2 ] = tmp; }
int _tmain( int argc, _TCHAR * argv[] ) { srand( time( NULL ) ); int numbers[ 100 ]; int matrix[ 6 ][ 6 ]; for( int i = 0; i < 100; ++i ) { numbers[ i ] = i; } int repeat = rand() % 100 + 100; for( int i = 0; i < repeat; ++i ) { swap( numbers, rand() % 100, rand() % 100 ); } for( int i = 0; i < 6; ++i ) { for( int j = 0; j < 6; ++j ) { matrix[ i ][ j ] = numbers[ i * 10 + j ]; } } std::cout << "This is the matrix:" << std::endl << std::endl; for( int i = 0; i < 6; ++i ) for( i = 0; i < 10; i++ ) { for( int j = 0; j < 6; ++j ) { std::cout << matrix[ i ][ j ] << " "; } std::cout << std::endl; } getchar(); system( "PAUSE" ); return 0; }
{ / cpp ] Wielkie dzi ę ki, pozdro, Matty |
|
pekfos |
» 2019-12-07 12:25:24 Dla dowolnego całkowitego n, 3n jest podzielne przez 3. Użyj odpowiednio mniejszego zakresu i pomnóż wynik razy 3. W tym wypadku [-8, 14] odpowiada wszystkim możliwym liczbom podzielnym przez 3 z przedziału który podałeś. Nie trudno zauważyć, że ma tylko 23 liczby, więc tablicy 5x6 nie wypełnisz bez powtórzeń. |
|
matt21mcr Temat założony przez niniejszego użytkownika |
Tablica 6x6 » 2019-12-07 12:31:31 Dzięki Pefkos, wiem, rozumiem mniej wiecęj do czego zmierzasz. Dzięki za info. Natomiast błędnie opisałem tablicę 5x6, gdyż tablica powinna mieć 6x6 pozycji, łącznie 36...
Mam problem ze zmianą tego kodu użytego powyżej, a może macie lepszy pomysł? \
Serio odwdzięczę się za helpa ;-) |
|
pekfos |
» 2019-12-07 12:40:23 Lepszym pomysłem będzie zrewidowanie poprawności treści zadania. Nie da się wylosować 36 liczb z 23 możliwych bez powtórzeń. Nie wiem co chcesz w tym kodzie modyfikować. |
|
matt21mcr Temat założony przez niniejszego użytkownika |
Treść polecenia... » 2019-12-07 12:45:32 Dziękuję Pefkos za helpa. Treść brzmi dokładnie tak: "Napisz program wypełniający tablicę dwuwymiarową 6x6 elementami typu całkowitego z zakresu od -25 do 43. Wylosowane wartości nie mogą się powtarzać i wylosowane liczby muszą być podzielne przez 3. " Chciałbym wszystkich przeprosić za wprowadzenie w błąd. To w sumie by była modyfikacja poprzedniego programu, czyli: #include <cstdlib> #include <iostream> #include <time.h>
using namespace std;
int x, y; int losuj[ 6 ][ 6 ];
int main() { srand( time( 0 ) ); for( y = 0; y < 5; y++ ) { for( x = 0; x < 6; x++ ) { losuj[ y ][ x ] =(( rand() % 70 ) - 5 ); cout << losuj[ y ][ x ] << " "; } cout << endl; } system( "PAUSE" ); return
|
|
« 1 » 2 |