==== Mit csinálok? Szigetek... ==== Repülőgéppel Európából Amerikába haladva adott távolságonként megmérjük az alattunk lévő felület tengerszint feletti magasságát. Ez az óceán felett 0, szárazföldek és szigetek felett pozitív egész érték. A mérések már Európa felett elkezdődnek és Amerika felett érnek véget. A mérési adatok maximális száma legyen 70. * Mekkora volt a legmagasabb mért pont magassága? * Rajzoljuk ki mérési eredményeket arányos méretű oszlopokkal egymás mellé úgy, hogy a legmagasabb oszlop legfeljebb 20 sor magas legyen, miközben a legalacsonyabban fekvő szárazföld esetén is kirajzolunk legalább egy egységnyi magas oszlopot. * Hány szigetet találtunk út közben? * Mekkora a leghosszabb sziget hossza? Hányadik sziget a leghosszabb? * Milyen hosszan haladt az út során víz felett összesen a repülő? * Mekkora a szárazföldek átlagos magassága? * Két tömbbe gyűjtsük ki az átlagos magasság feletti szakaszok kezdő és végpontjait! * Gyűtsük ki az út során érintett szigetek hosszait. Írjuk ki őket csökkenő sorrendben! * Kereük meg a leghosszabb emelkedő szakaszt! Hol kezdődik? Hol ér véget? Milyen hosszú? * Repültünk-e el szakadék felett az út során? (Szakadéknak nevezzük az olyan helyet, ahol két szomszédos szárazföldi rész között 50m-nél nagyobb a különbség.) * Érintettünk-e hasadékot? (Két szakadék közötti "völgy".) * A legmeredekebb ugrás emelkedő, vagy lejtő (a repülő útirányából nézve)? int[] M = new int[] { 10, 20, 30, 10, 0, 0, 0, 50, 2, 100, 200, 500, 200, 0, 0, 0, 20, 20, 20, 20, 20, 3, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 45, 34, 2, 200, 0, 0, 20, 30, 30, 30, 30, 0, 0, 100, 200, 300, 20, 400, 500,1 ,1 , 0, 0, 20, 20, 20, 20 }; int max = M[0]; // kezdetben az első elem az "eddigi legnagyobb" for (int i = 1; i < M.Length; i++) // végigmegyünk a 2. elemtől az utolsóig { /* * Ha az eddigi legnagyobbnál nagyobb elemet találunk, * akkor mostantól ő a "eddigi legnagyobb" */ if (max < M[i]) max = M[i]; } // A tömb végére érve az "eddigi legnagyobb" a tömb maximális értéke lesz Console.WriteLine("A legnagyobb mért érték: {0}", max); // Ábrázoljuk az adatokat for (int i = 20; i > 0; i--) // Végig megyünk a sorokon 20-tól 1-ig (felülről-lefelé) { for (int j = 0; j < M.Length; j++) // Végigmegyünk a mérési adatokon (balról-jobbra) { if (i<=Math.Ceiling((double)M[j]/max*20)) { Console.Write("#"); } else { Console.Write("_"); } } Console.WriteLine(); // soremelés } // Hány sziget van? int db = 0; // még nem találtunk egy szigetet sem for (int i = 0; i < M.Length - 1; i++) // Az utolsó előtti elemig megyünk csak! { // Ha az i+1. pozíció szárazföld kezdet, akkor növeljük a darabszámot if (M[i] == 0 && M[i + 1] > 0) db++; } // Az utolsó szárazföld kezdet nem szigetet, hanem a partot jelöli! Console.WriteLine("A szigetek száma: {0}", db - 1); // Mekkora és hányadik a leghosszabb sziget? int maxSzigetHossz = 0; // Az eddigi leghosszabb sziget hossza int maxSzigetSorszam = 0; // Az eddigi leghosszabb sziget sorszáma int aktSzigetHossz = 0; // Az aktuális sziget hossza int aktSzigetSorszam = 0; // Az aktuáis sziget sorsáma for (int i = 1; i < M.Length - 1; i++) // a másodiktól az utolsó előtti elemig megyünk { if (M[i - 1] == 0 && M[i] > 0) // sziget kezdet { aktSzigetHossz = 1; aktSzigetSorszam++; } else if (M[i] > 0) // szárazföld "belső" { aktSzigetHossz++; } else if (M[i - 1] > 0) // sziget vég { if (aktSzigetHossz > maxSzigetHossz) // hosszabb az eddigi leghosszabbnál { maxSzigetHossz = aktSzigetHossz; maxSzigetSorszam = aktSzigetSorszam; } } } Console.WriteLine("A leghosszabb sziget sorszáma: {0}", maxSzigetSorszam); Console.WriteLine("A leghosszabb sziget hossza: {0} egység", maxSzigetHossz); Console.ReadKey();