Wątek przeniesiony 2016-08-10 14:26 z przez ŁF. Powód: Wątek dotyczący podstaw

Losowanie bez powtorzen daczego moje liczbo sa rowne 0

Odpowiedz Nowy wątek
2016-08-10 14:22
0
#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
int losowanie(int liczba_wylosowana) {
  liczba_wylosowana = rand() % 10 + 1;
  return liczba_wylosowana;
}
bool warunek(int pojemnik_2[5], int liczba_1) {
  for (int i = 0; i <= 5; i++) {
    if (liczba_1 == pojemnik_2[i]) return false;
  }
  return true;
}
int main() {
  srand(time(NULL));
  cout << "Wylosuje liczbe od 1 do 10:" << endl;
  int pojemnik[5];
  int liczba = 0;
  int i = 0;
  do {
    i++;
    losowanie(liczba);
    warunek(pojemnik, liczba);
    pojemnik[i] = liczba;
    cout << pojemnik[i] << ",";
 
  } while (i != 5);
 
  return 0;
}
 

pomarańcz uciekł! :)

Pozostało 580 znaków

2016-08-10 14:24
1
int liczba = 0;

pozniej nigdzie nie zmieniasz tej zmiennej

pojemnik[i] = liczba;

a Twoja funkcja losujaca niby cos tam zwraca ale nigdzie tego wyniku nie przypisujesz

z uwag ogolnych

  1. nie korzystaj z tablic, od tego masz std::vector czy std::array
  2. nie time.h tylko ctime
  3. rand jest obsolete. Zobacz sobie (mozesz sam sprawdzic) jak sie robi to od C++11
edytowany 1x, ostatnio: fasadin, 2016-08-10 14:25
pojemnik[i] = liczba; a to dlaczego sie nie przypisuje? - bartek164 2016-08-10 14:25
spoko spoko dopiero sie ucze ale nie wiem dlaczego sie nie przypisuje - bartek164 2016-08-10 14:27
odpowiada sie w postach, komentarze sa do komentowania poza tematem - fasadin 2016-08-10 14:28

Pozostało 580 znaków

2016-08-10 14:26
ŁF
1

Przypisz do jakiejś zmiennej pseudolosową liczbę zwróconą przez funkcję losowanie().
warunek(pojemnik, liczba); - tu pewnie też będziesz się dziwił, że nie działa, a tymczasem nic nie robisz z otrzymanym wynikiem.

Na przyszłość:

  • nazywaj wszystko po angielsku
  • funkcje coś robią, więc w nazwie ma być czasownik + określenie do czego się odnosi czynność, a nie sam rzeczownik, np. wylosuj (getRandomNumber), sprawdźWarunek (checkCondition). Przy czym ta ostatnia nazwa jest też słaba, bo nie wiadomo na co ten warunek, więc najlepiej checkIfTableContainsNumber.

edytowany 1x, ostatnio: ŁF, 2016-08-10 14:30

Pozostało 580 znaków

2016-08-10 14:28
kq
1
  1. Przekazywanie parametru przez wartość i referencję koniecznie przeczytaj bo wyraźnie nie rozumiesz
  2. słabe nazwy zmiennych
  3. co robi warunek w main? (nic, ignorujesz wartość zwracaną przez funkcję)
  4. ignorujesz wartość zwracaną przez losowanie
  5. losowanie bez powtórzeń na małych zbiorach najłatwiej (ale niekoniecznie najwydajniej) jest zrobić mieszając kontener z pożądanymi liczbami i biorąc z niego n pierwszych liczb

Pozostało 580 znaków

2016-08-10 14:28
0

http://fasadin.4programmers.n[...]ody-czesc-2.html?view=sidebar

poczytaj o 6.2

Pozostało 580 znaków

2016-08-10 14:33
ŁF
1

pojemnik[i] = liczba; a to dlaczego sie nie przypisuje

Ależ przypisuje się:

  int liczba = 0; // liczba == 0
  do {
    i++;
    losowanie(liczba); // nadal liczba == 0, bo ani do funkcji nie przekazujesz referencji, ani nie używasz wartości przez funkcję zwróconej
    warunek(pojemnik, liczba); // liczba == 0
    pojemnik[i] = liczba; // liczba == 0, więc pojemnik[i] = 0

Amen.


Pozostało 580 znaków

2016-08-10 15:07
0

no ale program dalej powtarza liczby..dlaczego przy warunku return false ..program zapisuje i wpypisuje ta liczbe


pomarańcz uciekł! :)

Pozostało 580 znaków

2016-08-10 15:08
kq
0

A gdzie sprawdzasz ten warunek? I gdzie powtarzasz szukanie w przypadku, gdy wylosowałeś​ już znalezioną?


ale skoro jest zle wylosowana to nie powinno zwrocic false - bartek164 2016-08-10 15:29
i gdzie to false sprawdzasz? - kq 2016-08-10 15:30
no jest napisane jesli liczba jest == jakies liczbie z pojemnika ..wsyzstkie po kolei sprawdza to return false - bartek164 2016-08-10 15:32
tak, to jest w funkcji warunek. Gdzie na podstawie jej wyniku podejmujesz różne działania (powtórzenie losowania/zapisanie wylosowanej liczby)? - kq 2016-08-10 15:34
alez to wszystko skomplikowane - bartek164 2016-08-10 15:38
Jeśli pisanie w edytorze sprawia ci problemy, pisz pseudokod na popierze (krok po kroku), a później zamieniaj go na kod programu. Może szybciej zaskoczysz kolejność i potrzebę wykonywanych operacji. - carlosmay 2016-08-10 19:23

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0