mnożenie liczb w tablicy

0

Cześć,
Mam do napisania funkcję, która sprawdza umiejętność dodawania liczb zakresie do 20.

Udało mi się napisać funkcję, która losuje jedną liczbę. Nie mam pomysłu jak wylosować drugą, inną liczbę.

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

int losowanie()
{
    int w;
    srand(time(NULL));
    w = rand() % 19 + 1;
    return w;
}

int main()
{
    int wylosowana = losowanie();

    printf("Wylosowana liczba to: %d\n", wylosowana);
    return 0;
}
0

Eee.... wywołaj tą funkcję drugi raz? Tylko przypisz do nowej zmiennej.

0

Rozumiem, że to ma być dodawanie maksymalnie do 20? Jeśli tak, to możesz po wylosowaniu pierwszej liczby wylosować drugą ale maksymalnie do przedziału (20 - wylosowana)

0
Kamila Nowak napisał(a):

Rozumiem, że to ma być dodawanie maksymalnie do 20? Jeśli tak, to możesz po wylosowaniu pierwszej liczby wylosować drugą ale maksymalnie do przedziału (20 - wylosowana)

Nie. 20 - wylosowana jest bez sensu. Jeśli wylosuje 5, to wtedy przedział będzie do 15?

Wystarczy prosta pętla do while i sprawdzanie, czy wylosowana liczba już istnieje.

0

Jeżeli to ma docelowo dodawać dwie liczby z zakresu 0 - 20, to nie widać powodu, żeby liczby nie mogły się powtarzać; chyba, że nie mogą? Wtedy jest inny problem: wylosować dwie różne liczby z dwudziestu. To wtedy, jak sugeruje powyżej @serek , najprościej zrobić pętlę while, albo, bardziej elegancko shuffle algorithm

0

Hej, widzę, że nie zdążyłem odpowiedzieć wystarczająco szybko przed kolegami powyżej. Tak jak sugerowano wcześniej, kiedy szukasz losowych unikatowych liczb z przedziału 1-20 polecam skorzystać z algorytmu Fishera-Yatesa. Wypełniasz tablicę wartościami 1-20 i wykonujesz algorytm, który tę tablicę pomiesza. Teraz mając tablicę losowych wartości możesz je po kolei sobie wyjmować i robić co tam sobie potrzebujesz. Mała uwaga dotycząca jakości kodu:

  1. Staraj się nazywać metody, funkcje i zmienne po angielsku.
  2. Unikaj nazw, które nic nie mówią tak jak w twoim wypadku jest to:
int w;

A no i masz przykładowy kod, który zwraca w tablicę z losowymi wartościami 1-20 (przerobiony twój program):

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

void losowanie(int tablicaDoPomieszania[], int wielkoscTablicy)
{
	srand(time(NULL));
	for (int i = wielkoscTablicy - 1; i > 0; i--)
	{
		int j = rand() % (i + 1);
		int tymczasowaTablica = tablicaDoPomieszania[i];
		tablicaDoPomieszania[i] = tablicaDoPomieszania[j];
		tablicaDoPomieszania[j] = tymczasowaTablica;
	}
}

int main() {
	int tablicaLosowychLiczb[20];

	//Wypełniam tablicę wartościami od 1-20 po kolei
	for (int i = 0; i <= 20 - 1; i++) {
		tablicaLosowychLiczb[i] = i + 1;
	}

	int wielkoscTablicy = sizeof(tablicaLosowychLiczb) / sizeof(tablicaLosowychLiczb[0]);
	//Układam wszystkie wartości w tablicy w sposób losowy by nie były po kolei
	losowanie(tablicaLosowychLiczb, wielkoscTablicy);

	//wypisuję wszystkie wartości z tablicy po kolei według indeksu
	for (int i = 0; i <= 20 - 1; i++) {
		printf("index: %d | %d\n",i , tablicaLosowychLiczb[i]);
	}
	return 0;
}
0

Nie mam pomysłu jak wylosować drugą, inną liczbę.

Wystarczy zadać sobie trud przeczytania dokumentacji funkcji, których się używa. srand służy do seedowania generatora liczb pseudolosowych. Jak go resetujesz tą samą wartością to za każdym razem będziesz uzyskiwał te same wartości. Rozwiązanie: użyj tej funkcji raz, zamiast za każdym razem.

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