Search the Community
Showing results for tags 'array'.
-
Zdravím, Do školy potrebujem urobiť určitu funkciu ktorú už mám hotovú (jej určenie a fungovanie je nepodstatné) a funguje sáma o sebe ak spravím výpis priamo v nej tak je výpis správny. Problém nastáva ak je riadne zavolana z iného miesta (main) v tedy je výpis uplne zvlaštný až náhodny. int special_numbers(const int input_array[], const int array_size, int result_array[]){ int totally = 0; for (int i = 0; i < array_size; ++i) { int temp_sum = 0; for (int x = i+1; x < array_size; ++x) temp_sum += input_array[x]; if(temp_sum < input_array[i]){ result_array[i] = input_array[i]; printf("Súčet %d je menší ako %d = (JE ŠPECIALNE) [ %d ] \n", temp_sum, input_array[i], result_array[i]); //Tento výpis je správny totally ++; } } return totally; } Výpis funkcie je: Volanie (v main): int input_array[] = {16,17,4,3,5,2}; int result_array[6]; int count = special_numbers(input_array, 6, test_array); for(int i = 0; i < count; i++){ printf("%d ", test_array[i]); } výsledok printu je napríklad: 0 17 993648864. Ale má byť: 17 5 2 Pritom hore printf priamo vo funkcií ukazuje v poslednej časti výpis .."[ %d ] \n', ..., result_array); správne. Ako to opraviť? Podmienka je že nesmú byť použité globalne premenné. Ďakujem.
-
Ahojte a zdravím všechny, chtěl bych vás zde poprosit o malou pomoc. Přes příkaz /setwarp na SAMP serveru si vytvořím warp (údaje o pozici a příkaz se ukládá přes MYSQL do databáze) a potřebuju přes /warps tyto warpy vypsat. Zezačátku se mi povedlo warpy vypsat jednotlivě, tzn. jeden warp - jeden řádek, tohle ale nechci. Chtěl bych warpy nacyklovat ->vložit do pole a pak je vypsat jako jeden text. Můj kód zatím vypadá takto samozřejmě s errorem a netuším jak dál: mysql_query(Database, "SELECT * FROM `samp_warps` ORDER BY `warp_command` ASC"); new rowCount; //vytvoření proměnné pro uložení celkového počtu warpů cache_get_row_count(rowCount); //vytáhnutí počtu warpů a zapsaní do proměnné rowCount new warps[MAX_STRING] = {}; //vytvoření prázdného pole (MAX_STRING je definován) for(new i = 0; i <= rowCount; i++ ) //začátek cyklu pro vytáhnutí jednotlivého warpu z databáze { new mysqlSelectWarp[65]; format(mysqlSelectWarp, sizeof(mysqlSelectWarp), "SELECT * FROM `samp_warps` WHERE id='%i'", i++); mysql_query(Database, mysqlSelectWarp); //dotaz pro jeden WARP new warpName[20]; cache_get_value_name(i, "warp_command", warpName, sizeof(warpName)); //vytáhnutí sloupce s příkazem (jméno warpu) warps[i] = warpName; //tuto původně jsem myslel, že by fungovalo jako vložení stringu do proměnné a zde je error: error 006: must be assigned to an array } Je tedy možné nějak toto zprovoznit? Děkuji předem
-
Obtížnost: Osnova: 1. Úvod, co je to pole 2. Deklarace pole 3. Práce s indexy (přiřazování hodnot) 4. Pole a řetězec 5. Vícerozměrné pole 6. Závěr 1. Úvod Zdravím, tohle je druhý ze série návodů pro začínající pawnery. Návod navazuje na ten předchozí o proměnných (klik). Znalost proměnných je nutná k pochopení tohoto návodu, proto Vám doporučuji, abyste si nejprve přečetli ten první návod (odkaz je k dispozici). Co je to pole? Pole (angl. array) je, zjednodušeně řečeno, proměnná, do které můžeme ukládat více hodnot. Funguje to tak, že se nám v paměti vymezí prostor a tento prostor se nám rozdělí na tolik buněk, kolik určíme. Jako kdybychom vzali dort a rozkrojili ho na námi určený počet kousků. K těmto jednotlivým buňkám (kouskům dortu) pak přistupujeme pomocí tzv. indexů. 2. Deklarace pole Jako první začneme s deklarací pole. Ta funguje stejně jako u proměnné, akorát s malým rozdílem. . new hraci[3]; . Opět jsme použili slůvko new, opět jsme zvolili název a opět jsme to všechno zakončili středníkem. Co se tedy změnilo? Hned za název jsme přidali hranaté závorky [ ] a do nich jsme vepsali velikost pole. Je tam 3, což znamená, že pole s názvem hraci má celkem 3 buňky. Samozřejmě můžeme deklarovat více polí naráz a přidat k nim různé tagy (pro různé datové typy), stejně jako u proměnných. . new hraci[3], Float:souradnice[4], bool:admin[10]; . 3. Práce s indexy (přiřazování hodnot) Nyní máme vytvořené pole. Jak teď do jednotlivých buněk uložíme hodnoty? Budeme k nim přistupovat přes, již zmíněné, indexy. Každá buňka má svůj unikátní index. Indexy vždy začínají od nuly. Poslední index bude vždy o jedno menší, než je velikost pole. Takže naše pole hraci bude mít indexy 0 až 2, pole souradnice bude mít indexy 0 až 3 a pole admin bude mít indexy 0 až 9. Teď pojďme poli hraci přiřadit nějaké hodnoty. . hraci[0] = 1; hraci[1] = 0; hraci[2] = -3; . Takhle jsme všem třem buňkám určili hodnotu. Indexy zapisujeme tam, kde jsme při deklaraci zapisovali velikost. Pro procvičení to samé uděláme i s druhým polem. . souradnice[0] = 4.7; //ukládáme čísla s desetinnou čárkou souradnice[1] = 8.52; souradnice[2] = -1.02; souradnice[3] = -0.5; . Pro zajímavost (rozklikněte spoiler): 4. Pole a řetězec Už u proměnných jsme narazili na tento způsob deklarace – jednalo se o řetězce. Je načase si říci, že řetězec není nic jiného než pole znaků. Každá buňka obsahuje jeden znak z řetězce. Podívejme se na následující příklad: . new pozdrav[4+1]; //deklarace pole znaků (řetězce), nezapomeňme přičíst jedničku (znak) navíc pozdrav = "ahoj"; . Teď máme v poli/řetězci pozdrav slovo "ahoj". Když si ho rozpitváme, zjistíme, že každý index v sobě má jedno písmeno. . pozdrav[0] = 'a' pozdrav[1] = 'h' pozdrav[2] = 'o' pozdrav[3] = 'j' . Index 4 jsem záměrně nezmínil. Proč? Podrobněji se tomu budu věnovat v návodu o řetězcích, prozatím si vystačíme s informací, že jedná-li se o řetězec (u ostatních polí to neplatí), musí poslední buňka zůstat nezměněná. Necháme ji prostě tak, jak je. Pro zajímavost (rozklikněte spoiler): 5. Vícerozměrné pole (pro středně pokročilé – rozklikněte spoiler) 6. Závěr A jsme na konci. Nyní už víme, jak funguje pole, jak jej vytvořit a jak s ním pracovat. Taky jsme si řekli něco málo o principu vícerozměrných polí a o tom, jaký vztah má řetězec k poli. Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
-
Obtížnost: Osnova: 1. Úvod, co je řetězec 2. Nulový znak 3. Ukládání hodnot do řetězce 4. Závěr 1. Úvod Zdravím Vás, dostali jsme se už ke třetímu návodu pro začínající pawnery. Ještě než se do toho pustíme, doporučuji, abyste si přečetli předchozí dva návody (návod na pole – návod na proměnnou), zejména návod na pole, bez něj budete mít problémy pochopit problematiku řetězců. O řetězci (angl. string) byla řeč již dříve. Zopakujeme si to hlavní – je to pole znaků, do kterého ukládáme texty, zprávy, hesla atd. Každá buňka obsahuje jeden znak. Do poslední buňky nic neukládáme. Proč vlastně do poslední buňky nic neukládáme? Kvůli nulovému znaku. 2. Nulový znak Je načase, abychom si konečně vysvětlili, proč u řetězců potřebujeme buňku navíc, proč tuhle poslední buňku nikdy nezaplňujeme. Je to kvůli tzv. nulovému znaku (také EOS – End of String). Tenhle konkrétní znak (mimochodem vypadá takhle – '\0') v Pawn totiž určuje konec řetězce. Jazyk po nás požaduje, abychom mu sdělili, když řetězec skončí. Proto je nezbytné k délce řetězce vždy přičíst jeden znak navíc, ten je vyhrazen pro tento nulový znak. . new pozdrav[4+1]; //deklarace řetězce, která je nám důvěrně známa z předchozího návodu na pole pozdrav = "ahoj"; //uložení pozdravu do řetězce . Slovo "ahoj" má 4 znaky, celkem tedy potřebujeme řetězec o délce pěti znaků (4 + nulový znak). Abychom měli představu, jak to v tom řetězci vypadá, rozpitváme si ho: . pozdrav[0] = 'a' pozdrav[1] = 'h' pozdrav[2] = 'o' pozdrav[3] = 'j' pozdrav[4] = '\0' //onen nulový znak v páté buňce s indexem 4 . Ať už potřebujeme řetězec k čemukoli, vždy musíme myslet na tento nulový znak. Pro příklad, pokud funkce SendClientMessage může odeslat zprávu o maximální délce 144 znaků, řetězec s touto zprávou musí mít délku 145. 3. Ukládání hodnot do řetězce Existuje více způsobů, jak můžeme do řetězce něco uložit. Vlastně jich je spousta, my si ukážeme ty základní. a) Přímé ukládání pomocí operátoru přiřazení Tím mám na mysli rovnítko (=). Takhle jsme to dělali doposud, uvedeme identifikátor řetězce (bez hranatých závorek), rovnítko a poté text ohraničený uvozovkami ("). . pozdrav = "ahoj"; . Tento způsob ukládání lze použít, když přesně víme, co tam chceme uložit. Také je nutno podotknout, že ukládaný text nesmí být delší, než je délka řetězce. Upřímně si myslím, že s tímto se v praxi moc nepotkáte (akorát při inicializaci). Často je potřeba text upravit, dosadit do něj hodnoty proměnné apod. K těmto účelům nám slouží formátování. b ) Formátování Když formátujeme text, označujeme tím proces, při kterém do něj vkládáme hodnoty jiných proměnných a řetězců. Slouží nám k tomu funkce format. . format(output[], len, const format[], {Float,_}:...) . Za "output[]" dosadíme řetězec, kam chceme výsledný text uložit. Parametr "len" po nás chce délku výsledného textu. "const format[]" je onen text, který chceme formátovat. To poslední – "{Float,_}:..." – jsou proměnné/řetězce, které chceme dosadit. Ukažme si to na příkladu: . new hrac[4+1] = "Pepa"; //takto vypadá inicializace řetězce new penize = 500, score = 1000; //proměnné, které budeme dosazovat new vysledek[100]; //výsledný řetězec, kde bude nás formátovaný text format(vysledek, sizeof vysledek, "Hráč %s má %d dolarů a %d skóre.", hrac, penize, score); . V řetězci vysledek teď budeme mít: Hráč Pepa má 500 dolarů a 1000 skóre. . Ve fomátované zprávě jsme použili jisté znaky – %s a %d. Těmto znakům se říká specifikátory. Aby ta funkce format věděla, kam má to hrac, penize a score dosadit, musíme mu to dát nějak vědět. To je účel specifikátorů. Uvádíme je vždy v tom pořadí, v jakém po sobě jdou proměnné/řetězce, které dosazujeme. Máme následující specifikátory: %d nebo %i – celá čísla %s – řetězec %f – čísla s desetinnou čárkou %c – znak Nejsou všechny, ale jako základ nám tohle postačí. 4. Závěr A to by k řetězcům bylo všechno. Konečně již víme, co je nulový znak a k čemu slouží. Už víme, jak do řetězců ukládat běžný, ale také formátovaný text. Jediné, na co jsem ještě zapomněl – pomocí sizeof jsme zjistili velikost řetězce vysledek (počet buněk toho řetězce). Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
-
Zdravim, prichadzam sem lebo si neviem uz poradit potrebujem vytvorit urcite pole pre zbrane ktore hrac ma pri sebe nie ktoru zbran ma v ruke.. a potom pouzit to pole v podmienke if(!pole). Napr pole[] ={14,25,26} no a ak ma hrac neaku z tychto zbrani (jednu ci dve alebo kolko) tak return 0; ja som to skusal uz hociako ale najlepsie mi to vyslo tak asi ze jednu zbran mi to zachytilo xD stock kupene(playerid) { new weapdatas[13][2]; for(new i;i<13;i++) GetPlayerWeaponData(playerid,i,weapdatas[i][0],weapdatas[i][1]); for(new i;i<13;i++) { if(weapdatas[i][1] >= 1) { switch(weapdatas[i][0]) { case 8,16,18,26,35,36,37,38,39,40: return true; } } } return false; } no a pouzil som if(!kupene) ale nic sa nedeje dam vam sem aj naco to potrebujem aby to bolo lahsie new wstring[32]; new INI:file = INI_Open(UserPath(playerid)); INI_SetTag(file,"Data"); for(new s = 0; s < MAX_WEAPONS; s++) { GetPlayerWeaponData(playerid, s, Weapon_Info[playerid][pWeapon][s], Weapon_Info[playerid][pAmmo][s]); if(!kupene(playerid)) { for(new w = 0; w < MAX_WEAPONS; w++) { format(wstring, sizeof(wstring), "Weapon%d", w); INI_WriteInt(file, wstring, Weapon_Info[playerid][pWeapon][w]); } for(new a = 0; a < MAX_WEAPONS; a++) { format(wstring, sizeof(wstring), "Ammo%d", a); INI_WriteInt(file, wstring, Weapon_Info[playerid][pAmmo][a]); } } } INI_Close(file);
-
Zdravím.. Řeším tady jeden problém.. Potřeboval bych poradit, jak sloučit dvě pole? Respektive stringy: Mám dvě proměnné $a a $b: Obě proměnné jsou stringy, a obě zapsané ve tvaru id:počet,id:počet,id:počet ... Čili pomocí funkce explode(",",$a); je možné z každé z těch proměnných udělat pole, kde každý prvek bude id:počet, čili třeba: 5:2 A já bych potřeboval, aby to sloučilo tyhle dvě pole (nebo proměnné, to je jedno, stejně bych to pak zase převedl na string) podle id.. čili například pokud: $a = 2:2,4:15,33:2,20:1 $b = 1:1,3:4,2:1,20:5 tak aby mi to z toho udělalo: $c = 1:1,2:3,3:4,4:15,20:6,33:2 (snad barvy pomůžou v orientaci ) Předěm díky, pokud někdo pomůžete a poradíte chochy CHtěl bych poprosit někoho z moderátorů, aby to přesunul do sekce Help.. Omylem jsem to dal sem.. Díky