• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Struct = tablica String - Value ?
#1
Cześć

czy za pomocą Struct mogę zrobić tablicę String - Value

typu:

nazwa tablicy = [ 

tomek, czasWmillis;
Piotrek, czasWmillis;
 itp do 10 takich par 

] ?

Coś typu Tablica String + int jako String + Value

+ sortowanie takiej tablicy by na pierwszym miejscu była osoba która ma najmniejszą liczbę milisekund 
+ dodawanie do tablicy nowej pary
+ zerowanie tablicy gdy zeruje grę 

Pozd
 
Odpowiedź
#2
Możesz stworzyć tablicę struktur, oraz strukturę tablic.
Zacznij naukę, bo to o co pytasz to podstawa podstaw.
Opisz dokładniej o co Ci chodzi, bo pytanie nie jest napisane zgodnie z zasadami języka polskiego.
Ciężko się to czyta.

(Edit)
No dobra, trochę to wyjaśnijmy.
Można stworzyć typ danych dla struktury. Wtedy każda zmienna tego typu będzie przechowywać strukturę.
Kod:
typedef struct {
string imie;
int czas;
}zawodnik;

Teraz tworzymy zmienną dla każdego zawodnika:
Kod:
zawodnik s_Marek;
zawodnik s_Tomek;

Następnie możemy przypisać im wartości.
Kod:
s_Marek.imie = "Marek";
s_Marek.czas= 2500;

s_Tomek.imie = "Tomek";
s_Tomek.czas = 2780;

Drugim sposobem jest stworzenie tablicy struktur.
Kod:
struct {
string imie;
int czas;
}zawodnik[10];

Każda tablica będzie wypełniana tak jak powyżej.
Kod:
zawodnik[0].imie = "Marek";
zawodnik[0].czas = 2500;
itd.....

Albo można wstawić tablicę zmiennych do struktury.
Kod:
struct {
string imie[10];
int czas[10];
}zawodnik;

zawodnik.imie[0] = "Marek";

itd.....

Można też stworzyć typ danych, jak podałem powyżej i stworzyć tablicę zmiennych tego typu.
Kod:
typedef struct {
string imie;
int czas;
}zawodnik;

  zawodnik s_zawodnik[10];
  s_zawodnik[0].imie = "Darek";
  s_zawodnik[0].czas = 2690;
  s_zawodnik[1].imie = "Marek";
  s_zawodnik[1].czas = 3000;
itd....

Każdy sposób jest dobry, wszystko zależy od widzimisię programisty.
Ja osobiście wybrał bym ten ostatni, ponieważ jest dla mnie najbardziej "naturalny", czy przyjazny.

A i zapomniał bym. Ten ostatni sposób jest najprostszy do stworzenia tablicy dynamicznej, o wymiarach określanych podczas pracy programu. Nie musisz rezerwować miejsca w pamięci, jeśli tego nie wykorzystasz, ponieważ graczy nie będzie 10, tylko powiedzmy trzech.

Kod:
int ilu_zawodnikow;
  zawodnik * s_zawodnik = new zawodnik[ilu_zawodnikow];
  s_zawodnik[0].imie = "Darek";
  s_zawodnik[0].czas = 2690;
  s_zawodnik[1].imie = "Marek";
  s_zawodnik[1].czas = 3000;
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
łał super odpowiedz już szybko tłumaczę co chcę zrobić Smile

Arduino + 2 ( lub 5) przycisków i tyle samo LED.

Na początku gry wpisujemy imię graczy przez Serial Monitor: Serial.read(); tutaj 2'ch graczy, 

Każdy przycisk ma swoją diodę LED,

Naciśnięcie przycisku uruchamia grę polegającą na tym, że gdy losowo wybrana dioda LED się zapali to odpowiedni gracz naciska jak najszybciej przycisk aby ją zgasić.

Arduino łapie czas od zaświecenia się LED do naciśnięcia przycisku i zapisuje po czym uruchamia grę ponownie. Takich rund będzie np 10. 

Po zakończeniu całej gry Arduino sortuje tablicę i wyświetla użytkowników od tego co był najszybszy do najwolniejszego Smile

Zatrzymałem się tylko na tym jak dodawać złapane czasy do takiej jakby tablicy i w niej robić operacje na wartościach czyli sortowanie na sam koniec gry.

Przepraszam za poprzedni chaotyczny post. Twoja odpowiedz jest super dawką wiedzy, której w sumie nie ma chyba w internecie. Jest tylko informacja o struct ale tak pobieżna, że szok:
https://playground.arduino.cc/Code/Struct

Zabieram się za zrozumienie powyższych komend i jego implementację Smile
 
Odpowiedź
#4
W takim przypadku, można na przykład stworzyć tablicę struktur o wymiarze równym ilości graczy.
Wewnątrz struktury umieścić zmienną "imię", oraz zmienną tablicową "czas" o wymiarze równym ilości rund.
Kod:
struct {
string imie;
int czas[10];
}zawodnik[4];

W powyższym mamy czterech zawodników oraz dziesięć rund.
Oczywiście można pokusić się o stworzenie tablic dynamicznych dla ilości zawodników, oraz liczby rund.

Dodawanie czasów no oczywiście w pętli.
Kod:
for (int x = 0; x < 10; x++)// dziesięć rund
{ for (int y = 0; y < 4; y++) // czterech zawodników
    zawodnik[y].czas[x] = pomiar();
}}

Tu masz rundy dla kolejnych graczy, można oczywiście kolejność losować, żeby gracze nie wiedzieli, któremu zapali się dioda. Czyli losować wartość x oraz y. To się nazywa losowanie bez powtórzeń.

A sortowanie, to sortowanie. Sprawdzasz w pętli czy kolejny element w tablicy jest większy od poprzedniego i zamieniasz je miejscami. Wcześniej raczej będziesz liczył średnią tych czasów?
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#5
Nie żadnej średniej nie będzie tylko ile minęło czasu od zapalenia LED do zgaszenia jej przyciskiem
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości