| multim Temat założony przez niniejszego użytkownika | Zadanie domowe nr 1. z rozdziału 21, wątek nr: n++ » 2015-07-24 15:09:27 Jestem kolejnym newbie, który poległ na tym zadaniu. Walczyłem trzeci dzień i spasowałem. Program się zapętla w okolicach funkcji: sprawdzCzyUzyta(int t[], int wynikT[], int idLosowania, int ile, int iK); Cały kod: Edit: Przepraszam, wkleiłem zły kod.#include <iostream>#include <cstdlib>
 #include <ctime>
 using namespace std;
 
 int wprowadz_dane( int t[], int ile )
 {
 cout << "Podaj " << ile << " liczby:" << endl;
 int i = 0;
 do
 {
 cin >> t[ i ];
 i++;
 }
 while( i < ile );
 
 return 0;
 }
 
 int losuj( int ile )
 {
 return rand() % ile;
 }
 
 char sprawdzCzyUzyta( int t[], int wynikT[], int idLosowania, int ile, int iK )
 {
 int tmp = 0;
 int i = 0;
 do {
 if( tmp != t[ idLosowania ] )
 {
 tmp = t[ idLosowania ];
 wynikT[ i + iK ] = t[ idLosowania ];
 iK++;
 }
 else
 {
 return true;
 }
 i++;
 }
 while( i < ile - 1 );
 
 iK++;
 return false;
 
 }
 
 int wypisz_wyniki( int t[], int ile )
 {
 int i = 0;
 do
 {
 cout << i + 1 << ": " << t[ i ] << endl;
 i++;
 }
 while( i < ile - 1 );
 
 return false;
 return 0;
 }
 
 int main()
 {
 srand( time( 0 ) );
 int tablica[ 3 ], wynik[ 2 ], ile = 3, los, iK = 0;
 wprowadz_dane( tablica, ile );
 cout << endl;
 int i = 0;
 do
 los = losuj( ile );
 while( sprawdzCzyUzyta( tablica, wynik, los, ile, iK ) == true );
 
 wypisz_wyniki( wynik, ile );
 cout << endl;
 return 0;
 }
 
 | 
|  | 
| pekfos | » 2015-07-24 15:11:52 | char sprawdzCzyUzyta( int t[], int wynikT[], int idLosowania, int ile, int iK ){
 int tmp = 0;
 int i = 0;
 do {
 if( tmp != t[ idLosowania ] )
 {
 tmp = t[ idLosowania ];
 wynikT[ i + iK ] = t[ idLosowania ];
 iK++;
 }
 else
 {
 return true;
 }
 i++;
 }
 while( i < ile - 1 );
 
 iK++;
 return false;
 
 }
 
 | 
 Co to wg ciebie robi? | 
|  | 
| multim Temat założony przez niniejszego użytkownika | » 2015-07-24 15:59:12 Funkcja miała sprawdzać,   czy jest obecna wartość t[idLosowania] - tablica z wprowadzonymi 3 zmiennymi, w tablicy z wynikami - wynikT[]. 
 PS. Może nie powinienem się brać za programowanie? Próbowałem czytać B. Eckela, ale nie szło mi to zbyt dobrze, kolejną szansą był ten kurs. Ech...
 | 
|  | 
| pekfos | » 2015-07-24 16:14:26 | Funkcja miała sprawdzać,   czy jest obecna wartość t[idLosowania] - tablica z wprowadzonymi 3 zmiennymi, w tablicy z wynikami - wynikT[]. | 
 Skoro z t[]  używasz tylko t[idLosowania] , to po co ci w tej funkcji tablica i indeks, zamiast przekazywać od razu tą wartość? I skoro chcesz tylko sprawdzić, czy jakaś wartość jest w tablicy wynikT[] , to dlaczego przypisujesz coś co tej tablicy..? | Próbowałem czytać B. Eckela, ale nie szło mi to zbyt dobrze | 
 Thinking in C++? To lepsze dla przeprowadzających się z C i średnio-zaawansowanych, a nie dla początkujących. | 
|  | 
| multim Temat założony przez niniejszego użytkownika | » 2015-07-24 17:43:38 Próbowałem się wzorować na rozwiązaniu z wcześniejszych tematów, w którym po pozytywnym sprawdzeniu (braku obecności danej wartości w tablicy wynikowej)  przypisywało ją do tej tablicy. 
 | 
|  | 
| pekfos | » 2015-07-24 17:55:54 | w którym po pozytywnym sprawdzeniu (braku obecności danej wartości w tablicy wynikowej)  przypisywało ją do tej tablicy. | 
 W jaki sposób możesz stwierdzić, że wartości w tablicy nie ma, skoro nie sprawdziłeś wszystkich elementów? Nie mieszaj ze sobą tylu rzeczy, bo bez odpowiedniego planowania nic ci z tego nie wyjdzie. Nazwałeś funkcję 'sprawdz', więc tylko sprawdzaj. | 
|  | 
| multim Temat założony przez niniejszego użytkownika | » 2015-07-24 19:01:24 Poprawiłem co nieco, ale nadal wyniki wychodzą z pustych komórek tabeli. Da się jakoś śledzić w debuggerze CodeBlocksa wartości z poszczególnych komórek tabeli?  Aktualizacja kodu: #include <iostream>#include <cstdlib>
 #include <ctime>
 using namespace std;
 
 int wprowadz_dane( int t[], int ile )
 {
 cout << "Podaj " << ile << " liczby:" << endl;
 int i = 0;
 do
 {
 cin >> t[ i ];
 i++;
 }
 while( i < ile );
 
 return 0;
 }
 
 int losuj( int ile )
 {
 return rand() % ile;
 }
 
 int przypiszWynik( int wejsciowaT[], int los, int wyjsciowaT[], int iNr )
 {
 wyjsciowaT[ iNr ] = wejsciowaT[ los ];
 return 0;
 }
 
 bool sprawdzCzyUzyta( int sprLiczbe, int t[], int idLosowania, int licznik, int przekaz[] )
 {
 int i = 0;
 do {
 if( t[ i ] != sprLiczbe )
 {
 licznik++;
 przypiszWynik( t, idLosowania, przekaz, i );
 }
 else
 {
 return true;
 }
 i++;
 }
 while( i < licznik );
 
 return false;
 }
 
 int wypisz_wyniki( int t[], int ile )
 {
 int i = 0;
 do
 {
 cout << i + 1 << ": " << t[ i ] << endl;
 i++;
 }
 while( i < ile - 1 );
 
 return false;
 return 0;
 }
 
 int main()
 {
 srand( time( 0 ) );
 int tablica[ 3 ], wynik[ 2 ], ile = 3, los, liczbaSpr, iLicznik = 0;
 wprowadz_dane( tablica, ile );
 cout << endl;
 do
 {
 los = losuj( ile );
 liczbaSpr = tablica[ los ];
 }
 while( sprawdzCzyUzyta( liczbaSpr, wynik, los, iLicznik, wynik ) == true );
 
 wypisz_wyniki( wynik, ile );
 cout << endl;
 return 0;
 }
 
 | 
|  | 
| carlosmay | » 2015-07-24 19:15:16 Funkcja sprawdzającą powinna zwracać wartość typu bool.Do sprawdzenia wystarczy ci wartość do porównania, tablica wynikowa i jej rozmar.
 Sprawdzasz czy dana wartość jest w tablicy.
 Jak jest true, jak nie false.
 
 | 
|  | 
| « 1 »  2 3 |