Generator 12-znakowego kodu! Pomocy (zielony)

Generator 12-znakowego kodu! Pomocy (zielony)
dymion01
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0

Witam, nie mogę poradzić sobie z napisaniem prostej aplikacji w C++, której zadaniem byłoby generowanie losowych kodów 12-znakowych. Chciałbym, aby miały taki format:
np.: O8PS-SD34-2GH0,
to znaczy 4 znaki, myślnik, kolejne, myślnik i jeszcze raz 4 znaki. Próbowałem coś pisać w Borlandzie, ale jak widać coś mi nie wychodzi, dlatego zwracam się z prośbą o pomoc ;D
Jak na razie jestem jeszcze zielony w tych sprawach więc fajnie by było jakby kod był jakiś prostszy jeżeli się da, chyba wiecie o co mi chodzi ;) Z góry dzięki za pomoc!


"Gdy cię mają wieszać, poproś o szklankę wody. Nigdy nie wiadomo, co się wydarzy, zanim przyniosą" - Andrzej Sapkowski "Wszyscy ludzie są mądrzy: jedni przedtem, inni potem" - Chinese Proverb
edytowany 1x, ostatnio: dymion01
allocer
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 11 lat
1

Idiots, idiots everywhere.
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Pokaż co dotychczas zrobiłeś albo zapłać za komuś za wykonanie tego (dział Praca).


ST
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 11 lat
0

Stwórz sobie string ze wszystkimi znakami, które mogą zostać wygenerowane. Wylosuj liczbę z zakresu [0;length_string), weź znak z tego stringu o indeksie wylosowanej liczby, dodaj do stringu z kodem i co 4 znaki dodawaj myślnik.


Pozdro & poćwicz!
dymion01
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0

W sumie to próbowałem tylko zdefiniować zmienne char: 24 znaki (litery) i 10 znaków (liczby), i teraz chciałbym, aby po kliknięciu Buttona w okienku Edit generował się ten kod w takim formacie jakim go przedstawiłem. Mam pytanie jak do tablicy wstawić zmienne char, aby można było fajnie losować wtedy funkcją rand()?, bo tyle na razie umiem xd Może trochę chaotycznie piszę, ale mam nadzieję, że można mnie zrozumieć ;) I jeszcze pytanie jak mogę "dokładać" zmienne w oknie Edit->Tekst, w sensie, że mam np. char a='S' i char b='O', to jak napisać, Edit1->Tekst=a+b;? czy jakoś inaczej?


"Gdy cię mają wieszać, poproś o szklankę wody. Nigdy nie wiadomo, co się wydarzy, zanim przyniosą" - Andrzej Sapkowski "Wszyscy ludzie są mądrzy: jedni przedtem, inni potem" - Chinese Proverb
dymion01
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0
stfu napisał(a):

Stwórz sobie string ze wszystkimi znakami, które mogą zostać wygenerowane. Wylosuj liczbę z zakresu [0;length_string), weź znak z tego stringu o indeksie wylosowanej liczby, dodaj do stringu z kodem i co 4 znaki dodawaj myślnik.

String w sensie tablice string?
string tab[np.20]={ABCDEFGHIJKLM123456};
Tak? Sorki jeszcze raz za lamerskie podejście, ale od czegoś trzeba zacząć...


"Gdy cię mają wieszać, poproś o szklankę wody. Nigdy nie wiadomo, co się wydarzy, zanim przyniosą" - Andrzej Sapkowski "Wszyscy ludzie są mądrzy: jedni przedtem, inni potem" - Chinese Proverb
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
2

nie wiem czy tylko ja miałem problemy ze zrozumieniem tego, ale chyba Ci chodzi po prostu o coś takiego

Kopiuj
 char liczby[] ={"1234567890"}

i tak samo z literami

a do dodawaniu do danej zmiennej jakieś wartości to poczytaj o operatorach

edit. string jest klasa, nie potrzebujesz tablicy stringów.
A najlepiej zaczyna się od książki lub google a nie forum ;)

edytowany 1x, ostatnio: fasadin
msm
char liczby[] ={"1234567890"} - albo char *liczby, albo = "123467890" - obecna forma jest niepoprawna.
fasadin
a czy tablica nie jest po prostu stałym wskaźnikiem? Czemu jest nieprawidłowe? Chyba nawet w symfonii standard jest tak zapisany jeden z przykładów
msm
Może nie tyle niepoprawnie, co nadmiarowo - wystarczy char liczby[] ="1234567890" (bez nawiasów), używasz formy inicjalizacji struktur - tak jakbyś napisał int a = { 3 }; - ogólnie nie przejmuj się, po prostu się czepiam :>
fasadin
rzeczywiście nie zauważyłem, że napisałem nadmiarowe dlatego tak się zdziwiłem ;) dzięki za spostrzegawczość.
dymion01
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0
Kopiuj
char znaki[]="ABCDEFGHIJKLMNOPRSTUWYXZ1234567890"  ;
srand(time(NULL));
Edit1->Text=znaki[rand()%33]; 

To mi działa tylko proszę jeszcze o informacje jak dodać znak do znaku, żeby były wyświetlone wszystkie 4 wylosowane obok siebie?
Bo jak na razie to losuje tylko jeden znak z ciągu...


"Gdy cię mają wieszać, poproś o szklankę wody. Nigdy nie wiadomo, co się wydarzy, zanim przyniosą" - Andrzej Sapkowski "Wszyscy ludzie są mądrzy: jedni przedtem, inni potem" - Chinese Proverb
allocer
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 11 lat
0

A o pętlach to Ty słyszałeś? Losujesz 4 znaki, wstawiasz myślnik i znowu losujesz 4 znaki.


Idiots, idiots everywhere.
dymion01
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0
allocer napisał(a):

A o pętlach to Ty słyszałeś? Losujesz 4 znaki, wstawiasz myślnik i znowu losujesz 4 znaki.

Kopiuj
for(int i=4;i>0;i--)
Edit1->Text=znaki[rand()%33]; 

Nie o to mi chodzi tylko o to, że nie wiem jak dokleić w Edit1->Text kolejny wylosowany znak... Niech mnie ktoś zrozumie! ;D


"Gdy cię mają wieszać, poproś o szklankę wody. Nigdy nie wiadomo, co się wydarzy, zanim przyniosą" - Andrzej Sapkowski "Wszyscy ludzie są mądrzy: jedni przedtem, inni potem" - Chinese Proverb
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
1

weź poczytaj jakąś książkę czy podstawowy kurs...
zamiast = napisz +=

dymion01
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0

for(int i=4;i>0;i--) - na takie coś bym nie wpadł.

Ważne, że działa ;)


"Gdy cię mają wieszać, poproś o szklankę wody. Nigdy nie wiadomo, co się wydarzy, zanim przyniosą" - Andrzej Sapkowski "Wszyscy ludzie są mądrzy: jedni przedtem, inni potem" - Chinese Proverb
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

@dymion01: weź jakąś książkę o C++ i spokojnie ją przeczytaj, ponieważ brakuje Ci podstawowych informacji o składni tego języka...


dymion01
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0
fasadin napisał(a):

weź poczytaj jakąś książkę czy podstawowy kurs...
zamiast = napisz +=

Już tak próbowałem, aż taki tępy nie jestem, ale to nie rozwiązuje problemu, Pole Edit1->Text zostaje nawet puste bez żadnego znaku...
Jakieś inne pomysły?


"Gdy cię mają wieszać, poproś o szklankę wody. Nigdy nie wiadomo, co się wydarzy, zanim przyniosą" - Andrzej Sapkowski "Wszyscy ludzie są mądrzy: jedni przedtem, inni potem" - Chinese Proverb
edytowany 1x, ostatnio: dymion01
dymion01
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:8
0

Już rozkminiłem jak to zrobić ;)

Kopiuj
for(int i=4;i>0;i--)
{
Edit1->Text=Edit1->Text+znaki[rand()%33];
} 

Widocznie "+=" nie działa w tej sytuacji, wszystkim dziękuję za chwilę poświęconą na głupie pytanie zielonego jeszcze w c++. Pójdę za waszymi poradami i przeczytam jakąś dobrą książkę o tym języku. Wielkie Dzięki jeszcze raz ;)


"Gdy cię mają wieszać, poproś o szklankę wody. Nigdy nie wiadomo, co się wydarzy, zanim przyniosą" - Andrzej Sapkowski "Wszyscy ludzie są mądrzy: jedni przedtem, inni potem" - Chinese Proverb
msm
Administrator
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 miesiące
2

Skoro problem rozwiązany, to chyba nikomu nie zaszkodze wrzucając gotowca? ;>

Proszę bardzo, generator losowych kodów (w C, wymaga stdint.h i stdio.h) - ale przeanalizuj to zanim o coś zapytasz...

Kopiuj
typedef struct {
    uint16_t datA, datB, datC; 
} code;

void toString(code c, char str[15]){
    sprintf(str, "%.4X-%.4X-%.4X", c.datA, c.datB, c.datC);
}

code randomCode(){
    code result = { rand(), rand(), rand() };
    return result;
}

Przykład użycia w konsoli:

Kopiuj
int main() {
    srand(time(0));

    char buf[15];
    code c = randomCode();
    toString(c, buf);

    printf("%s", buf);
}
Patryk27
Ale nie losuje liter :<
msm
Losuje, tylko że szesnastkowe więc jest jeszcze bardziej hackerski ;>
KR
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 2 lata
  • Postów:353
0
Kopiuj
string codeMaker(int parts, int chars, random_device &rnd)
{
	string signs =
		//"abcdefghijklmnopqrstuvwxyz"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        "1234567890";
	string result;
	random::uniform_int_distribution<> index_dist(0, signs.size()-1);
	for(int i=0;i<parts;i++)
	{
		for(int j=0;j<chars;j++)
		{
			result += signs[index_dist(rnd)];
		}
		if(i!=parts-1)result += '-';
	}
	return result;
}

Z wykorzystaniem boost::random

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 12 lat
0

Tradycyjnie:

Kopiuj
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <algorithm>

const char code_char_set[] = "ABCDEFGHIJKLMNOPRSTUWYXZ1234567890";

typedef char Code[16];

char RandomCodeChar() { return code_char_set[std::rand() % sizeof(code_char_set)]; }
void GenerateRandomCode(Code *c) { std::generate(*c, *c + sizeof(*c), RandomCodeChar); }
void PrintCode(const Code &c) { std::printf("%.4s-%.4s-%.4s-%.4s", c, c + 4, c + 8, c + 12); }

int main() {
	std::srand(time(NULL));

	Code code;
	GenerateRandomCode(&code);
	PrintCode(code);
}
edytowany 1x, ostatnio: adf88
Xitami
  • Rejestracja:ponad 20 lat
  • Ostatnio:około rok
0

czemu mnie się zdaje, że tu nie miejsce na random?
no możn trzymać kciuki, że się nie zawali, ale to chyba głupie.

robcio
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Lokalizacja:Opole
  • Postów:533
0

Najkrótsza metoda:

Kopiuj
	srand(time(NULL));
	std::string c = "1234567890ABCDEFGHIJKLMNOPRSTUWYXZ";
	std::random_shuffle(c.begin(),c.end());
	c.resize(12);
	std::for_each(c.begin(),c.end(),[](char s)->void 
	{static int l = 1; std::cout << s; if(!(l%4)) std::cout << '-'; l++;}); 

Nie odpowiadam na PW z prośbą o pomoc programistyczną.
GD
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:39
0

Ja uzywam czegos takiego:

Kopiuj
void get_random_str(char *dest, int len)
{
const   char	*chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	int	max=0;
	int	i=0;

	max = strlen(chars);

	srand(time(NULL)*getpid());

	for ( i=0; i<len; i++ )
		dest[i] = chars[rand() % max];

	dest[i] = EOS;
}

getpid() zwraca nr procesu, co daje bardziej przypadkowy wynik.

Oczywiscie EOS to '\0'.


And remember, Beethoven wrote his first symphony in C.
edytowany 2x, ostatnio: gd
msm
Trochę WTF-owe rozwiązanie z getpid()em - 1) nieprzenośne. 2) getpid() nie daje bardziej przypadkowego wyniku (pomijając sytuację gdy uruchamiasz n programów w jednym momencie) - za to użycie srand(getpid())jest mało bezpieczne (w przypadku zastosowań gdzie bezpieczeństwo ma znaczenie... nie żeby rand się do tego i tak nadawał), ponieważ jeśli ktoś pozna pid to może przewidzieć losowane liczby. Ale u Ciebie tego nie ma, skoro tak czy inaczej mnożysz to z time.
GD
W moim zastosowaniu nie ma takiej mozliwosci zeby ktos poznal pid :) BTW: Jakbys sie zabezpieczyl w sytuacji, w której jest ryzyko "podsluchu"?
msm
Do zastosowań kryptograficznych to się i tak srand() i rand() nie nadaje, przydałoby się czytać z jakiegoś dedykowanego urządzenia zewnętrznego (albo chociaż najniższy bit wejścia mikrofonu jest podobno całkiem niezłym źródłem losowości).
GD
Ciekawy pomysl :)
0

Taką aplikację napisałem w Delphi w 5 minut, chętnie oddam kod źródłowy :)

msm
Ja w C w minutę, już oddałem kod źródłowy...
Rekman
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:148
0

Text jest właściwością dlatego nie można uzyć operatora +=. W taki sposób:

for(int i=4;i>0;i--)
Edit1->Text = Edit1->Text + znaki[rand()*33];

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)