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

question-closed Losowanie cyfr z pominięciem jednej

Cloud VPS
0 głosów
202 wizyt
pytanie zadane 29 września 2016 w C i C++ przez 4sp3ll Początkujący (410 p.)
zamknięte 30 września 2016 przez 4sp3ll

Witam,

pracuje nad napisaniem programu szyfrującego który w zbiorze przypadkowych cyfr będzie ukrywał litery.

Przykład (Ctrl+f >> znajdź 9):

999999964786547996476599999994638364899999956.996995574999999

995456765565565997656599686888687677899364995743.995743995647

999999939946994999994699999994999999799999937.994999997999999

6886699599379939946997364739969934566994.99564997993994993735

99999994999999599999439999999599999949946599.6997999996999999

Odstępy między wierszami w edytorze tego posta są bardzo duże, nie wiem czy będzie to widać w samym poście, ale powinien ukazać się naszym oczom napis "Subscribe".

Wymyśliłem sobie, że podzielę takie "wiersze" zbudowane z 5 linii cyfr na obszary po 50 znaków w których będzie jedna litera.

Chciałbym aby losowanie odbyło się bez cyfry oznaczonej przez użytkownika jako klucz, np. aby w liczbach losowanych nie występowała cyfra "1" i litera "I" nie była zniekształcona.

Jestem początkujący - przerobionych 10 lekcji Pana Mirosława na youtube o C++. Proszę o pomoc.

Prototypowy kod:

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <time.h>
#include <windows.h>

using namespace std;

int szufladka[50];
int klucz;
string slowo;


int main()
{
    cout << "Wpisz klucz (max 1): ";
    cin >> klucz;

    cout << "Wpisz I albo C (max 1): ";
    cin >> slowo;

    srand(time(NULL));
    if  (slowo == "I")
               {
                for (int i=0; i<=49; i+=10 )
                {
                szufladka[i]   = rand()%10;
                cout<<  szufladka[i];
                szufladka[i]   = rand()%10;
                cout<<  szufladka[i];
                szufladka[i]   = rand()%10;
                cout<<  szufladka[i];
                szufladka[i]   = rand()%10;
                cout<<  szufladka[i];
                cout<<  klucz;
                cout<<  klucz;
                szufladka[i]   = rand()%10;
                cout<<  szufladka[i];
                szufladka[i]   = rand()%10;
                cout<<  szufladka[i];
                szufladka[i]   = rand()%10;
                cout<<  szufladka[i];
                szufladka[i]   = rand()%10;
                cout<<  szufladka[i]<<endl;
                szufladka[i]   = rand()%10;
                }

               }
return 0;
}

 

komentarz zamknięcia: Problem rozwiązany

1 odpowiedź

+1 głos
odpowiedź 29 września 2016 przez Pieniek Gaduła (3,330 p.)
wybrane 30 września 2016 przez 4sp3ll
 
Najlepsza

Skoro dopiero zaczynasz możesz napisać sobie taką funkcję:

 

int randWithout(int key) {
	int value = key;
	do {
		value = rand() % 10;
	} while (value == key);
	return value;
}

Cały kod będzie wyglądał tak:

 

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <time.h>
#include <windows.h>
#include<string>

using namespace std;

int szufladka[50];
int klucz;
string slowo;

int randWithout(int key) {
	int value = key;
	do {
		value = rand() % 10;
	} while (value == key);
	return value;
}


int main()
{
	cout << "Wpisz klucz (max 1): ";
	cin >> klucz;

	cout << "Wpisz I albo C (max 1): ";
	cin >> slowo;

	srand(time(NULL));
	if (slowo == "I")
	{
		for (int i = 0; i <= 49; i += 10)
		{
			szufladka[i] = randWithout(klucz);
			cout << szufladka[i];
			szufladka[i] = randWithout(klucz);
			cout << szufladka[i];
			szufladka[i] = randWithout(klucz);
			cout << szufladka[i];
			szufladka[i] = randWithout(klucz);
			cout << szufladka[i];
			cout << klucz;
			cout << klucz;
			szufladka[i] = randWithout(klucz);
			cout << szufladka[i];
			szufladka[i] = randWithout(klucz);
			cout << szufladka[i];
			szufladka[i] = randWithout(klucz);
			cout << szufladka[i];
			szufladka[i] = randWithout(klucz);
			cout << szufladka[i] << endl;
			szufladka[i] = randWithout(klucz);
		}

	}
	return 0;
}

 

komentarz 29 września 2016 przez Pieniek Gaduła (3,330 p.)
edycja 29 września 2016 przez Pieniek

Jeśli chciał byś to zrobić lepiej to wtedy powinieneś się zastanowić:

  1. Ilu wartości potrzebujesz(i tyle losować przy pomocy funkcji rand).
  2. Jakich wartości potrzebujesz(i każdej wylosowanej wartości przyporządkować wartość ze zbioru który Cie interesuje).
int randWithout(int key) {
	int value = rand() % 9;
	if (value >= key) {
		value++;
	}
	return value;
}

 

komentarz 30 września 2016 przez 4sp3ll Początkujący (410 p.)
Dziękuję! Bardzo pomocne.

Podobne pytania

0 głosów
2 odpowiedzi 7,049 wizyt
pytanie zadane 7 grudnia 2016 w C i C++ przez koliber Początkujący (400 p.)
0 głosów
4 odpowiedzi 627 wizyt
pytanie zadane 2 maja 2019 w C i C++ przez MakaBresk Obywatel (1,060 p.)
+1 głos
3 odpowiedzi 978 wizyt
pytanie zadane 29 sierpnia 2021 w JavaScript przez ShockWave Bywalec (2,350 p.)

93,482 zapytań

142,414 odpowiedzi

322,761 komentarzy

62,894 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

Kursy INF.02 i INF.03
...