Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 
Polski Portal COLOBOTa
COLOBOT Polish Portal

Programy pomiarowe - Radar3.0

jedrus113 - 07-07-2009, 19:57
Temat postu: Radar3.0
Jeśli przylecicie na jakąś nieznaną planete, to przed zużyciem cennej kostki tytanu na budowe radar,u możecie użyć tego programu do sprawdzenia czy na planecie są jakieś wrogie formy życia.

Kod:
int Compte(int cat) //cat - kategoria
{
int i, total;
object p;

total = 0;
for ( i=0 ; i<10000 ; i++ )
{
p = retobject(i);
if ( p == null ) break;
if ( p.category == cat ) total ++;
}
return total;
}
extern void object::Radar3()
{

message("Na planecie jest:");
if(radar(AlienQueen) != null)
{
int liczbakroli=Compte(AlienQueen);
message(Compte(AlienQueen)+"Krolowych obcych");
}

if(radar(AlienEgg) != null)
{
int liczbajaj=Compte(AlienEgg);
message(Compte(AlienEgg)+" jaj obcych");
}

if(radar(AlienAnt) != null)
{
int lczbamrowek=Compte(AlienAnt);
message(Compte(AlienAnt)+" mrowek");
}

if(radar(AlienSpider) != null)
{
int lczbapajakow=Compte(AlienSpider);
message(Compte(AlienSpider)+" pajakow");
}

if(radar(AlienWasp) != null)
{
int lczbaos=Compte(AlienWasp);
message(Compte(AlienWasp)+" os");
}

if(radar(AlienWorm) != null)
{
int lczbarobali=Compte(AlienWorm);
message(Compte(AlienWorm)+" robakow");
}

}


//Jest to ostateczna wersja tego programu (Błąd z osami poprawiony) nieda się go już chyba ulepszyć.

adiblol - 07-07-2009, 20:07

Jesli chcesz sprawdzić ile jest owadów to Poczytaj o funkcji retobject.
jedrus113 - 07-07-2009, 20:50

Wielkie Dzięki adiblol bez ciebie bym se niedał rady (ale mogłeś napisać co to jest retobject).
adiblol - 07-07-2009, 22:28

Piszę z komórki więc mi się nie chciało. Błąd jest przy osach.
Bartek c++ - 08-07-2009, 11:50

ProgramPrzyda się w misjach ściągniętych z neta :)
pipok - 08-07-2009, 13:52
Temat postu: Re: Radar3.0
jedrus113 napisał/a:
//Jest to ostateczna wersja tego programu (Błąd z osami poprawiony) nieda się go już chyba ulepszyć.
Chyba jednak się da ulepszyć. :)
W głownym programie kawałki kodu typu
Kod:
if(radar(AlienQueen) != null)
{
int liczbakroli=Compte(AlienQueen);
message(Compte(AlienQueen)+"Krolowych obcych");
}
zawierają niepotrzebnie dwukrotne wywołanie funkcji radar() z tym samym parametrem (Alien Qeeen). Podobnie masz dwa razy wywołanie funkcji Compte(). Wystarczy ją z danym argumentem wywołać tylko raz, przecież wynik i tak zapamiętałeś w zmiennej liczbakroli. Dodatkowo: nie potrzeba osobny zmiennych na przechowywanie liczby królowych, mrówek itd... Zapamiętane liczby wykorzystuje się tylko raz - do wypisania komunikatu.
Główna część programu może spokojnie być napisana prościej i efektywniej:
Kod:
extern void object::Radar3()
{
  int ileObcych;

  message("Na planecie jest:");

  ileObcych=Compte(AlienQueen);
  if (ileObcych!=0)   { message(Compte(ileObcych)+" Krolowych obcych");  }

  ileObcych=Compte(AlienEgg);
  if (ileObcych!=0)   { message(Compte(ileObcych)+" jaj obcych");  }

[...]
Przy okazji: zainteresuj się tablicami ;)
Używając tablic można ten program zapisać jeszcze bardziej elegancko...

pipok - 08-07-2009, 13:55
Temat postu: Re: Radar3.0
Ech! nieupilnowane copy&paste...
Przepraszam :oops:
Kod:
extern void object::Radar3()
{
  int ileObcych;

  message("Na planecie jest:");

  ileObcych=Compte(AlienQueen);
  if (ileObcych!=0)   { message(ileObcych)+" Krolowych obcych");  }

  ileObcych=Compte(AlienEgg);
  if (ileObcych!=0)   { message(ileObcych)+" jaj obcych");  }

[...]

jedrus113 - 08-07-2009, 14:48
Temat postu: Radar4.0
Nienawidze was !!
Ale bede miał nauczke na przyszłość "NIGDY NIE PISZ ŻE LEPIEJ BYĆ NIE MOŻE BO ZAWSZE ZNAJDZIE SIE KTOŚ KTO ZNAJDZIE SPOSÓB AŻEBY TO ULEPSZYĆ!!"
Echch..
Radar4.0
Kod:
int Compte(int cat) //cat - kategoria
{
int i, total;
object p;

total = 0;
for ( i=0 ; i<10000 ; i++ )
{
p = retobject(i);
if ( p == null ) break;
if ( p.category == cat ) total ++;
}
return total;
}
extern void object::Radar4()
{

int ileObcych;

message("Na planecie jest:");
ileObcych=Compte(AlienQueen);
if (ileObcych!=0) message((ileObcych)+" Krolowych obcych");

ileObcych=Compte(AlienEgg);
if (ileObcych!=0) message((ileObcych)+" jaj obcych");

ileObcych=Compte(AlienAnt);
if (ileObcych!=0) message((ileObcych)+" mrowek");

ileObcych=Compte(AlienSpider);
if (ileObcych!=0) message((ileObcych)+" pajakow");

ileObcych=Compte(AlienWasp);
if (ileObcych!=0) message((ileObcych)+" os");

ileObcych=Compte(AlienWorm);
if (ileObcych!=0) message((ileObcych)+" robakow");

}

jedrus113 - 08-07-2009, 14:50
Temat postu: login
Sie nawet przezwas zalogować nie zdążyłem..
Można by prosić jakiegoś kogoś ze uprawnieniami o kasacje tego posta wyżej? Napiszę drugi ładniejszy..

shoter - 08-07-2009, 15:02

do tego mozna funkcje wykorzystac
ileObcych=Compte(AlienQueen);
if (ileObcych!=0) message((ileObcych)+" Krolowych obcych");

void(int cat,string zdanie)
{
int ile = Compte(AlienQueen);
if(ile !=0) message((ile) + zdanie);

}

adiblol - 08-07-2009, 16:07

Uważaj jedrus z tym 'nienawidzę was'. To jest ostatnie ostrzeżenie. Później dostaniesz WARNA!!!
jedrus113 - 08-07-2009, 16:19
Temat postu: ??
adiblol napisał/a:
Uważaj jedrus z tym 'nienawidzę was'. To jest ostatnie ostrzeżenie. Później dostaniesz WARNA!!!

Ale co zrobiłem?
Poprostu was nienawidze więc napisałem że was nienawidze. Czyli tak jakbyś na przykład ty powiedział że kogoś lubisz. Nie widze powodu do dawania warnów czy czegokolwiek.

shoter - 08-07-2009, 16:32

adiblol napisał/a:
Uważaj jedrus z tym 'nienawidzę was'. To jest ostatnie ostrzeżenie. Później dostaniesz WARNA!!!

adibol bez przesady,nie terroryzuj tak uzytkownikow warnami :/

adiblol - 08-07-2009, 16:37

Nie terroryzuję tylko Jedrus jest dziecinny i trzeba go ukarać :roll:

[ Dodano: 08-07-2009, 16:39 ]
Jedrus, nienawidzisz nas za to że jesteśmy lepsi od ciebie czy jak? :roll:

Schocker - 08-07-2009, 18:31

Plus, to, co pisał Pipok, było sugestią, a nie rozkazem. @Jedrus: Mogłeś ulepszyć program, nie musiałeś... Nikt Cię tu do tego nie zmuszał.
@Adiblol: Wg. mnie jeszcze jeden post, pokazujący jego dziecinność i warn. Póki co jeden.
// Schocker, masz zapewnione uprawnienia moderatora! Tylko będę musiał skonsultować z Abadonem -adiblol
// o.O Miło... ^^ Bardzo. Tyle mi się udało sklecić. Dzięki! ^^ -Schocker

jedrus113 - 08-07-2009, 18:55

To że można ulepszyć program znaczy że go trzeba ulepszyć, bo jak to wygląda że mój program niejest doskonały??
//jakaś porypana składnia... Warn? -adiblol
dobra adiblol nie czepiaj się, widać, że się stara -DemoLisH

pipok - 08-07-2009, 21:10
Temat postu: Re: Radar4.0
Funkcję Compte() wywołujesz tyle razy, ile jest gatunków Obcych. To znaczy, że tyle samo razy (sześć) przeglądasz wszystkie obiekty planszy, sprawdzając, czy są danego typu. A wystarczy obiekty przeglądnąć tylko raz, powiększając w razie napotkania Obcego sumę dla jego kategorii:

Kod:
extern void object::Radar_Arr()
{
  int nr, obcy[], suma[];
  string[] napis;
  object p;
 
  nr = 0;
  suma[nr]=0; obcy[nr] = AlienQueen;  napis[nr++]="krolowych obcych";
  suma[nr]=0; obcy[nr] = AlienAnt;    napis[nr++]="mrowek";
  suma[nr]=0; obcy[nr] = AlienWasp;   napis[nr++]="os";
  suma[nr]=0; obcy[nr] = AlienSpider; napis[nr++]="pajakow";
  suma[nr]=0; obcy[nr] = AlienWorm;   napis[nr++]="robakow";
  suma[nr]=0; obcy[nr] = AlienEgg;    napis[nr++]="jaj";
 
  for (int i=0 ; i<10000 ; i++ )
  {
    p = retobject(i);
    if ( p == null ) break;
    for (int j = sizeof(obcy) - 1; j > 0 ; j--)
    {
      if (p.category == obcy[j]) suma[j]++;
    }
  }
 
  for (int j = sizeof(obcy) - 1; j > 0 ; j--)
  {
     if (suma[j]!=0) message(suma[j]+" "+napis[j]);
  }
}

Korniszon - 14-10-2010, 11:02

Ja nawet zrobiłem program liczący wszystkie z możliwych do znalezienia obiektów.
Kod:
extern void object::Radar_All_Objects()
{
    errmode(0); //błąd wyskakiwał mi przy którejś pętli for, więc wpisałem errmode(0);
    message("Program daje liczbę różnych obiektów na planszy");
    int [] suma, obj;
    int nr;
    object p;
    string [] napis;
   
    nr = 0;
    suma[nr] = 0; obj[nr] = Houston; napis[nr++] = "centrum kontroli misji";
    suma[nr] = 0; obj[nr] = SpaceShip; napis[nr++] = "statków kosmicznych";
    suma[nr] = 0; obj[nr] = BotFactory; napis[nr++] = "fabryk robotów";
    suma[nr] = 0; obj[nr] = ResearchCenter; napis[nr++] = "centrum badawczych";
    suma[nr] = 0; obj[nr] = RadarStation; napis[nr++] = "radarów";
    suma[nr] = 0; obj[nr] = ExchangePost; napis[nr++] = "stacji przekaźnikowych";
    suma[nr] = 0; obj[nr] = RepairCenter; napis[nr++] = "centrum naprawczych";
    suma[nr] = 0; obj[nr] = DefenseTower; napis[nr++] = "wież obronnych";
    suma[nr] = 0; obj[nr] = AutoLab; napis[nr++] = "laboratoriów";
    suma[nr] = 0; obj[nr] = PowerStation; napis[nr++] = "stacji energytycznych";
    suma[nr] = 0; obj[nr] = PowerPlant; napis[nr++] = "fabryk ogniw elektrycznych";
    suma[nr] = 0; obj[nr] = NuclearPlant; napis[nr++] = "elektrowni atomowych";
    suma[nr] = 0; obj[nr] = Converter; napis[nr++] = "hut";
    suma[nr] = 0; obj[nr] = Derrick; napis[nr++] = "kopalni";
    suma[nr] = 0; obj[nr] = PowerCaptor; napis[nr++] = "piorunochronów";
    suma[nr] = 0; obj[nr] = Vault; napis[nr++] = "skrytek";
    suma[nr] = 0; obj[nr] = AlienNest; napis[nr++] = "gniazd obcych";

    suma[nr] = 0; obj[nr] = PracticeBot; napis[nr++] = "robotów ćwiczebnych";
    suma[nr] = 0; obj[nr] = TargetBot; napis[nr++] = "robotów - celów";
    suma[nr] = 0; obj[nr] = WheeledGrabber; napis[nr++] = "transporterów na kołach";
    suma[nr] = 0; obj[nr] = TrackedGrabber; napis[nr++] = "transporterów na gąsienicach";
    suma[nr] = 0; obj[nr] = WingedGrabber; napis[nr++] = "transporterów latających";
    suma[nr] = 0; obj[nr] = LeggedGrabber; napis[nr++] = "transporterów na nogach";
    suma[nr] = 0; obj[nr] = WheeledSniffer; napis[nr++] = "szperaczów na kołach";
    suma[nr] = 0; obj[nr] = TrackedSniffer; napis[nr++] = "szperaczów na gąsienicach";
    suma[nr] = 0; obj[nr] = WingedSniffer; napis[nr++] = "szperaczów latających";
    suma[nr] = 0; obj[nr] = LeggedSniffer; napis[nr++] = "szperaczów na nogach";
    suma[nr] = 0; obj[nr] = WheeledShooter; napis[nr++] = "dział na kołach";
    suma[nr] = 0; obj[nr] = TrackedShooter; napis[nr++] = "dział na gąsienicach";
    suma[nr] = 0; obj[nr] = WingedShooter; napis[nr++] = "dział latających";
    suma[nr] = 0; obj[nr] = LeggedShooter; napis[nr++] = "dział na nogach";
    suma[nr] = 0; obj[nr] = WheeledOrgaShooter; napis[nr++] = "dział organicznych na kołach";
    suma[nr] = 0; obj[nr] = TrackedOrgaShooter; napis[nr++] = "dział organicznych na gąsienicach";
    suma[nr] = 0; obj[nr] = WingedOrgaShooter; napis[nr++] = "latających dział organicznych";
    suma[nr] = 0; obj[nr] = LeggedOrgaShooter; napis[nr++] = "dział organicznych na nogach";
    suma[nr] = 0; obj[nr] = Subber; napis[nr++] = "nurków";
    suma[nr] = 0; obj[nr] = PhazerShooter; napis[nr++] = "dział fazowych";
    suma[nr] = 0; obj[nr] = Thumper; napis[nr++] = "uderzaczy";
    suma[nr] = 0; obj[nr] = Shielder; napis[nr++] = "osłaniaczy";
    suma[nr] = 0; obj[nr] = Recycler; napis[nr++] = "recyklerów";

    suma[nr] = 0; obj[nr] = Me; napis[nr++] = "astronautów";
    suma[nr] = 0; obj[nr] = Tech; napis[nr++] = "inżynierów";

    suma[nr] = 0; obj[nr] = TitaniumOre; napis[nr++] = "rud tytanu";
    suma[nr] = 0; obj[nr] = UraniumOre; napis[nr++] = "rud uranu";
    suma[nr] = 0; obj[nr] = Titanium; napis[nr++] = "tytanów";
    suma[nr] = 0; obj[nr] = PowerCell; napis[nr++] = "ogniw elektrycznych";
    suma[nr] = 0; obj[nr] = NuclearCell; napis[nr++] = "atomowych ogniw elektrycznych";
    suma[nr] = 0; obj[nr] = OrgaMatter; napis[nr++] = "materii organicznych";
    suma[nr] = 0; obj[nr] = BlackBox; napis[nr++] = "czarnych skrzynek";
    suma[nr] = 0; obj[nr] = TNT; napis[nr++] = "materiałów wybuchowych";
    suma[nr] = 0; obj[nr] = KeyA; napis[nr++] = "klucz a";
    suma[nr] = 0; obj[nr] = KeyB; napis[nr++] = "klucz b";
    suma[nr] = 0; obj[nr] = KeyC; napis[nr++] = "klucz c";
    suma[nr] = 0; obj[nr] = KeyD; napis[nr++] = "klucz d";

    suma[nr] = 0; obj[nr] = Mine; napis[nr++] = "min";
    suma[nr] = 0; obj[nr] = Barrier; napis[nr++] = "barier";
    suma[nr] = 0; obj[nr] = Wreck; napis[nr++] = "wraków";

    suma[nr] = 0; obj[nr] = BlueFlag; napis[nr++] = "niebieskich flag";
    suma[nr] = 0; obj[nr] = YellowFlag; napis[nr++] = "żółtych flag";
    suma[nr] = 0; obj[nr] = RedFlag; napis[nr++] = "czerwonych flag";
    suma[nr] = 0; obj[nr] = GreenFlag; napis[nr++] = "zielonych flag";
    suma[nr] = 0; obj[nr] = VioletFlag; napis[nr++] = "fioletowych flag";

    suma[nr] = 0; obj[nr] = WayPoint; napis[nr++] = "punktów kontrolnych";
    suma[nr] = 0; obj[nr] = Target2; napis[nr++] = "powietrznych punktów kontrolnych";
    suma[nr] = 0; obj[nr] = Target1; napis[nr++] = "słupów z kolcami";
    suma[nr] = 0; obj[nr] = TitaniumSpot; napis[nr++] = "złóż tytanu";
    suma[nr] = 0; obj[nr] = UraniumSpot; napis[nr++] = "złóż uranu";
    suma[nr] = 0; obj[nr] = PowerSpot; napis[nr++] = "złóż energii";

    suma[nr] = 0; obj[nr] = AlienAnt; napis[nr++] = "mrówek";
    suma[nr] = 0; obj[nr] = AlienSpider; napis[nr++] = "pająków";
    suma[nr] = 0; obj[nr] = AlienWorm; napis[nr++] = "robali";
    suma[nr] = 0; obj[nr] = AlienWasp; napis[nr++] = "os";
    suma[nr] = 0; obj[nr] = AlienEgg; napis[nr++] = "jaj";
    suma[nr] = 0; obj[nr] = AlienQueen; napis[nr++] = "królowych obcych";
   
    while(true)
    {
        for(nr = 0; nr < 1000; nr ++)
        {
            p=retobject(nr);
            if(p==null) break;
            for(int j = 0; j < sizeof(obj); j ++)
            {
                if(p.category == obj[j])
                {
                    suma[j] ++;
                }
            }
        }
        for(nr = 0; nr < sizeof(obj); nr ++)
        {
            if(suma[nr] != 0)
            {
                message(suma[nr]+" "+napis[nr]);
                suma[nr] = 0;
                wait(3);
            }
        }
    }
}

\\prawie bym zapomniał - liczy też obcych :D :!: :mrgreen: :-)

adiblol - 14-10-2010, 12:32

W wieku 9 lat taki zaawansowany program? No, gratuluję.
Korniszon - 14-10-2010, 13:32

He he - ja już myślę nad trudniejszymi programami. :D
Berserker - 14-10-2010, 20:03

Bys napisal co on dokladnie robi, bo mam wrazenie, ze widze pare potencjalnych usprawnien ale nie bede ich wytykal odrazu bo jeszcze sie przyczepisz, ze nie rozumiem go :P
Korniszon - 24-12-2010, 13:37

Teraz możesz już je wtykać. :)
Berserker - 24-12-2010, 17:31

Teraz to ich juz nie pamietam ;d

@edit

Niepotrzebnie jest tu tyle pisane. Mogles wykorzystac to, ze kategorie to tak naprawde stale typu int i za pomoca tych stalych adresowac elementy tablicy. Przyklad:

Kod:

p = retobject(i);
(p != null) ? list[p.category]++ : break;


Drugim elementem ktory by sporo ulatwil byloby stworzenie prostej klasy do zapamietywania takich bzdur jak napis. Ulatwiloby ci to zycie. Przyklad:
Kod:
public class noob
{
int cat = 0;
string msg = "";
void noob(int c, string m)
{
cat = c;
msg = m;
}
}
extern void object::Test()
{
noob list[];
list[AlienAnt] = new noob(AlienAnt, "mrowka");
message(list[AlienAnt].msg);
}

Tak kombinujac bys mogl jeszcze go uproscic (rezygnacja z wlasnych napisow i wyswietlanie po prostu kategorii w stylu "AlienAnt: 2"), ale pewnie bedziesz i tak mial problem ze zrozumieniem tego, co tu napisalem wiec nie bede sie rozpisywac :P

Korniszon - 25-12-2010, 08:56

Mała zmiana:
Zamiast:
Kod:
message(suma[nr]+" "+napis[nr]);

może być:
Kod:
message("Ilosc "+napis[nr]+": "+suma[nr]);

Berserker - 25-12-2010, 10:30

Drastyczna ta zmiana :)
Korniszon - 25-12-2010, 16:16

Ale może wyświetlić:
Kod:
4 mrówek

a to może być dla niektórych niezrozumiałe.

Kod:
Ilość mrówek: 4

jest bardziej zrozumiałe. :)


Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group