» Poradna » Programy

Jazyk C-jednorozmerne polia a smerniky

 |   |  Microsoft Windows 10 Chrome 54.0.2840.71

Zdravim, mam mensi vacsi problem s projektom do skoly.. mam zadany subor z ktoreho mam scitat pocet poloziek typu plat, dynamicky vytvorit jednorozmerne pole realnych cisel a polozky typu plat zo suboru zapisat do pola v takom poradi, v akom su v subore. Subor vyzera nasledovne:1760Jozef Maly0(plat)1078.88111120091799Maria Krasna1(plat)636.9812101999Snazim sa uz dva dni, naozaj s tym neviem pohnut, je to urcite jednoduche ale ja akosi tym poliam a smernikom neviem pochopit samozrejme na skole to nikto nevysvetli.. tazky zivot na fiit. nechcem si zlahcovat pracu len by som potrebovala nejako nakopnut. Kazdopadne za kazdu odpoved dakujem

Mohlo by vás také zajímat

Odpovědi na otázku

 |   |  Microsoft Windows 10 Firefox 49.0

Jojo, ukazatele :) Pamatuji si že nám je na střední vysvětlili tak dobře, že by to nepochopil nikdo. Přitom to není nic složitého.Možná by se hodilo, kdybys nám sem přes pastebin ukázal kam ses dostal sám. Alespoň dokážeš že jsi nad tím už přemýšlel (a nebudeme to programovat za tebe) a na kódu a jeho chybách se to dobře vysvětluje :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 49.0

Je to jednoduché, pokud to může být v C++ nebo můžeš omezit počet řádků i jejich délky. Příklad v čistém C s omezením (nezkoušeno):#include "stdio.h"#define MAX_RADKU 100#define MAX_RADEK 80int main(int argc, const char**argv){ double platy[MAX_RADKU]; int delka = 0; char buff[RADEK ]; FILE* f = fopen(argv[1],"rt"); while (delka < MAX_RADKU && fgets(buff,sizeof(buff),f) { double plat; if (sscanf("(plat)%f", &plat)>0) platy[delka++] = plat; }}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 49.0

Sorry, mělo být sscanf(buff, "(plat)%f", &plat)Funkce sscanf nejdřív požaduje řetězec "(plat)", a pokud tam je, parseruje následující číslo a zapíše do proměnné v parametru.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 49.0

Nejen že mu tohle vůbec, ale vůbec nepomůže, protože potřebuje vědět jak a proč, ne znát celý výsledek (takhle se při dalším úkolu na stejné téma zasekne úplně stejně), ale navíc je tvé řešení úplně mimo. Chtěl dynamické pole, takže mu tvá ukázka se staticky definovaným polem rozhodně nepomůže.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Mozilla 49.0

v podstate potrebujete reálnom, ktorý vráti smerník na nedefinovaný typ (void*). A potom si dve možnosti bud smerník pretypovať na float * a pracovať s tým ako s identifikátorom poľa alebo to presúvať byte po byte s využitím sizeof (float)... Estetické riešenia typu (id+=i)= value; vynechám, lebo sú zahrnuté v druhom

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Mozilla 49.0

bože realloc nie reálnom. mobilný spellcheck

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 49.0

Ale tak vezmem si to popořadě. Předpokládám že základ víš. Pointer je číslo, které definuje adresu v paměti. Na té adrese může být cokoliv. Proto při definici pointeru říkáš na co ukazuje. (nemusíš, ale.. Tím se zatím asi ani nemusíš zabývat)int *i;je ukazatel na integer.Pokud chceš pracovat přímo s hodnotou na adrese ukazatele, musíš se ptát opět přes **i = 15printf("Hodnota i: %x\n", *i );printf("A jeho adresa v paměti: %x\n", i );Pole je takový zvláštní případ. Ono i klasicky deklarované pole je ukazatel na jeho první prvek. Proto mu, pokud je dynamické, musíš definovat i paměť, kterou má přidělenou. Na to slouží příkaz malloc.int *pole = malloc (sizeof (int) );Vytvoří pole integerů s místem pro uložení jednoho integeru (ty budeš pracovat s float nebo double, ale to je stejné)Pokud pak potřebuješ přidat prvek, musíš poli přidělit víc pamětipole = realloc(pole, n * sizeof(int));(zvětší pole na N prvků. Ty si můžeš počítat)Doufám že tam nemám chybu, poslední dobou jsem programovala jen C++ a tam bych použila rovnou vector class :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 54.0.2840.71

ako si povedala.. zaklad viem. ale naozaj iba zaklad. prestudovala som uz celu knihu Herouta, pozeram studujem vsetky prednasky zo skoly, pozeram videa ale ja proste neviem ani ako zacat. vobec tomu nerozumiem. viem si akurat tak zadeklarovat, na konci urobit podmienku ak je a to je cele. ten projekt ma sedem uloh a ja mam dve iba tie najzakladnejsie s cyklami vobec ani nechapem tomu co si napisala.. ale dakujem za snahu myslim ze to na tej skole mozem zabalit

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 54.0.2840.71

V téhle úloze jde v podstatě jenom o to načíst data ze souboru, zjistit, jestli je na řádku plat a ten pak uložit do pole. Když už je pole zaplněno, tak je potřeba jej zvětšit, vyplatí se zvětšovat na dvounásobek původní délky.Začni tím, že si dynamicky vytvoříš pole a zaplníš ho daty. Pak si zkus to pole zvětšovat a zase do něj zapisovat. Např.: uděláš pole o velikosti 20, ve for cyklu o 100 opakováních do něj budeš zapisovat a vždy, když pole zaplníš, tak ho zvětšíš.Čtení ze souboru, tady bych začal tím, že soubor otevřu, vypíšu po řádcích a zase zavřu. Pak bych přidal logiku pro zjištění platu a nakonec zkonvertoval číslo ze řetězce do pole platů. Postupuj po jednotlivých krocích a až budeš mít naučený a vyzkoušený jak to dynamické pole se zvětšováním, tak to načítání ze souboru, jenom ty znalosti zkombinuješ.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Firefox 49.0

Představ si pointer jako adresu poštovní schránky :) int *schranka; - vytvoří někde schránku, do které se vejde číslo typu int a vrátí její adresu. hodnota schranka je pak ta „poštovní adresa“, hodnota *schranka je obsah té schránky. S polem je to podobně. Jenže pole není jedna schránka, pole je schránek několik. Jenže pro ty schránky musíme vytvořit místo. A vzhledem k tomu že pole je zase jenom adresa, vyrobíme pole pro jedno číslo int takhle:int *pole = malloc (sizeof (int) );malloc řekne, kolik paměti (jak velký prostor pro schránky) to pole schránek dostane přidělené. Tady je to paměť velikosti jednoho intu (sizeof(int)) . Pokud chceš vyrobit větší, třeba pole pro 5 hodnot, int *pole = malloc (5 * sizeof (int) );hodnota „pole“ - adresa první schránky v pořadí.pole[0] - obsah první schránkypole[4] - obsah páté schránkypole[5] - nesahat, to je šestá schránka, tam už nám to nepatří.Ono se to dá zapsat i takhle:pole[0] je to samé jako *(pole), pole[1] je to samé jako *(pole + 1)atd…prostě, pole[1] je obsah (značeno „*“) schránky na druhé adrese od „pole“ (pole + 1). Pošťačka jde k první (tady spíš nulté) schránce, mrkne do první vpravo od ní a vezme si její obsah :) No a realloc funguje stejně jako malloc, akorát přidělí schránkám víc / míň místa.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Plat, Maria, Pola


Určitě si přečtěte

Superinteligenci nedokážeme ovládat a nejspíše se nedozvíme, že už tam někde je

Superinteligenci nedokážeme ovládat a nejspíše se nedozvíme, že už tam někde je

** Firmy i organizace včetně EU připravují etické kodexy pro A.I. ** Vědci z Madridu zkoumali, jestli je budeme moci aplikovat na A.I. 2.0 ** A je tu háček, superinteligence pro nás totiž bude neuchopitelná

Jakub Čížek | 84

Jakub Čížek
Umělá inteligence
Japonská MANA může být 80× výkonnější než sebelepší tranzistorový procesor

Japonská MANA může být 80× výkonnější než sebelepší tranzistorový procesor

** Tranzistory současných počítačů vyzařují při přepínání teplo ** Na Tokijské univerzitě proto vyvíjejí adiabatické procesory ** Využívají supravodivost a jsou 80× úspornější

Jakub Čížek | 49

Jakub Čížek
TranzistoryProcesoryTechnologie
Konec modrých obrazovek smrti? Microsoft vydává mimořádnou aktualizaci pro Windows 10
Karel Kilián
Windows UpdateAktualizaceWindows 10
Jak nahradit webkameru: jde to telefonem, zadarmo a s lepším obrazem

Jak nahradit webkameru: jde to telefonem, zadarmo a s lepším obrazem

** Koronavirus donutil mnohé zaměstnance pracovat z domova ** V souvislosti s tím vzrostla poptávka po webových kamerách ** Webkameru ale nemusíte kupovat – stačí mobil a aplikace!

Karel Kilián | 17

Karel Kilián
WebkameraMobilní telefonMobilní aplikace
Týden Živě: On fakt dnes ještě někdo stahuje filmy z Ulož.to?

Týden Živě: On fakt dnes ještě někdo stahuje filmy z Ulož.to?

** Kauza Ulož.to a proč my dva už (moc) newarezíme ** Windows 10X existují, ale nabízí se otázka proč ** Nissan ukázal vizi kanceláře v podobě karavanu

Jakub Čížek, Vladislav Kluska | 155

Jakub ČížekVladislav Kluska
Týden ŽivěVideo
Jak stáhnout video z Youtube: 5 nejlepších nástrojů

Jak stáhnout video z Youtube: 5 nejlepších nástrojů

** Videa nejen z Youtube se hodí stáhnout v případě, že může být smazáno ** Rovněž se hodí možnost získat pouze audio ** Použít lze desktopové aplikace, webové nástroje i doplňky

Stanislav Janů | 32

Stanislav Janů
TipyNejlepší programy
Total Commander vstupuje do nové etapy. Vyšla první betaverze „desítky“
Lukáš Václavík
Správce souborůTotal Commander
Nejlepší programy na úpravu fotek: 11 ověřených tipů, placených i zdarma

Nejlepší programy na úpravu fotek: 11 ověřených tipů, placených i zdarma

** Vybrali jsme nejlepší programy pro úpravu fotek ve Windows ** Pokročilé grafické editory upraví fotografie k nepoznání ** Překvapivě použitelné jsou i aplikace na webu nebo dostupné zdarma

Karel Kilián | 15

Karel Kilián
Grafický editorNejlepší programySoftware