Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila open source robota Reachy Mini (YouTube). Předobjednat lze lite verzi za 299 dolarů a wireless verzi s Raspberry Pi 5 za 449 dolarů.
Dnes v 17:30 bude oficiálně vydána open source počítačová hra DOGWALK vytvořena v 3D softwaru Blender a herním enginu Godot. Release party proběhne na YouTube od 17:00.
McDonald's se spojil se společností Paradox a pracovníky nabírá také pomocí AI řešení s virtuální asistentkou Olivii běžící na webu McHire. Ian Carroll a Sam Curry se na toto AI řešení blíže podívali a opravdu je překvapilo, že se mohli přihlásit pomocí jména 123456 a hesla 123456 a získat přístup k údajům o 64 milionech uchazečů o práci.
Byla vydána (𝕏) červnová aktualizace aneb nová verze 1.102 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.102 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Byla vydána nová verze 2.4.64 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 8 bezpečnostních chyb.
Společnost xAI na síti 𝕏 představila Grok 4, tj. novou verzi svého AI LLM modelu Grok.
Ministerstvo vnitra odhalilo závažný kyberincident v IT systému resortu. Systém, do kterého se dostal útočník bez oprávnění, byl odpojen a nedošlo k odcizení dat [𝕏].
Před rokem byla streamovací služba HBO Max přejmenována na Max. Dle managementu slovo HBO v názvu nebylo důležité. Včera byl Max přejmenován zpět na HBO Max. Kolik milionů dolarů to stálo? 😂
Byla vydána nová major verze 8.0.0 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata (Wikipedie). Přehled novinek v oficiálním oznámení a v aktualizované dokumentaci.
Mastodon (Wikipedie) - sociální síť, která není na prodej - byl vydán ve verzi 4.4. Přehled novinek s náhledy a videi v oznámení na blogu.
>
int main(void)
{
int a,k,i;
scanf("%d", &a);
int b[2000];
for(i = 0; i < a; i++){
b[i];
}
b[i] = k;
printf("\n%d\n", k);
return 0;
}
Nevite proc to nefunguje? na zacatku se ma ulozit hodnota do promenne a. Potom se definuje neinicializovane pole b. Potom by se mela zapsat hodnota z promenne a do pole b a pak by se mela hodnota pole b priradit do promenne k.
#include <iostream> #include <array> using namespace std; void main(int argc, char* argv[]) { array<int, 3> arr = { 1, 2, 3 }; for (int i : arr) cout << i << endl; system("pause"); }
lhs = rhs;lhs je věc, do které se přiřazuje. Normálně tedy proměnná, prvek pole nebo struktury, ..., obecně něco adresovatelného. rhs je hodnota, která se přiřazuje. Porovnej si na základě toho svoje popisy, co se má dít, s kódem. Zjistíš, že vůbec neodpovídají. [*] Pro puristy: coby příkaz. Přiřazení je samozřejmě výraz, takže lze přiřadit i někde uprostřed výrazu, ale tímto teď nekomplikuji.
waste01.c: In function ‘main’: waste01.c:7:5: warning: ISO C90 forbids mixed declarations and code [-Wpedantic] int b[2000]; ^ waste01.c:9:2: warning: statement with no effect [-Wunused-value] b[i]; ^ waste01.c:11:10: warning: ‘k’ is used uninitialized in this function [-Wuninitialized] b[i] = k; ^Clang 3.4 -Wall -pedantic
waste01.c:9:5: warning: expression result unused [-Wunused-value] b[i]; ~ ~^ waste01.c:11:12: warning: variable 'k' is uninitialized when used here [-Wuninitialized] b[i] = k; ^ waste01.c:5:12: note: initialize the variable 'k' to silence this warning int a,k,i; ^ = 0 2 warnings generated.Měl by ses snažit, aby ti kompilátor žádné warningy nevyhazoval i při velmi drsném nastavení, co se má kontrolovat. Minimálně v tomto případě bys totiž hned viděl, že ten tvůj kód nedává moc smysl. Co si BTW představuješ pod pojmem "pole"? Přijde mi, že ti to není vůbec jasné...
int pole[1001][3]
jak se da zadat vstup do toho pole?
nebo kdyz na vstupu zadame cislo do promenne N a cislo N ma predstavovat pole[N][3]
pole[N][3] - hodnota v poli "pole" na řádku N, sloupci 3 pole[N][3] = x; // Do pole "pole" přiřaď na řádek N, sloupec 3 hodnotu "x"
int N = 20;
int pole[N][3];
pole[1-N][1-3] = 3; // Do pole "pole" prirad cislo 3 na radek 1 az N, sloupec 1 az 3 hodnotu 3
muze to tak byt?
staticky alokované pole (to, co operátor []
vyrobí) nemůže mít proměnnou velikost, takže použít jako délku pole nekonstantní proměnnou není přípustné
V tomhle případě to projde, protože ta alokace se provádí až za běhu. Neprošlo by to u globální proměnné nebo kdyby pole
bylo static
. Použije se ale samozřejmě aktuální hodnota N
v okamžiku té inicializace.
The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))).Klidně můžete napsat i 50[mojepole]. Souhlasím, žě nemusíme mást (česky?) začátečníka, ale taky mu nemusíme lhát. A jeho pole je něco, čemu se nadává VLA a je naprosto v souladu s C99, C11 pak tuto "featuru" stanoví jako volitelnou (když není dostupné, musí být definováno __STDC_NO_VLA__).
Přiřadit hodnotu více prvkům v poli najednou nelze, na to je třeba použít cyklus.Když se chce, tak jde i toto
int N = 20; int pole[N][3]; /*int pole[20][3] */ pole[1-N][1-3] = 3; /*pole[-19][-2] = 3; */Tedy zápis mimo alokovaný prostor.
Záporné indexy mohou fungovat takto, ale že by to byla zrovna začátečnická praktika…
int pole[3] = {0,1,2}; int *ptr = &pole[2]; printf("%d,%d,%d",pole[0],pole[1],pole[2]); printf("%d,%d,%d",ptr[-2],ptr[-1],ptr[0] );
Ne. Nevymýšlejte si, prosím, svou vlastní syntaxi. Četl jste snad někde něco o tom, že jako index pole můžete napsat rozsah, navíc se znakem, který obvykle znamená odečítání? Překladač není člověk a nebude hádat, co jste tím asi tak mohl myslet. To, co jste napsal, by ve skutečnosti znamenalo
pole[-19][-2] = 3
Pokud chcete naplnit celé pole, musíte to udělat cyklem:
int i, j; for (i = 0; i < N; i++) for (j = 0; j < 3; j++) pole[i][j] = 3;nebo pokud překladač podporuje C99 syntaxi
for (int i = 0; i < N; i++) for (int j = 0; j < 3; j++) pole[i][j] = 3;
cisla[2][123123]
?
int
, short
, long
, float
). Protože v tom jediném pointru, který podprogram dostane, není žádná informace o rozměrech, musí dostat dalšími parametry počet řádku a sloupců. A pak se po prostoru pole může pohybovat.
Nebo je to myšleno, že program dostane datový proud na STDIN? Pak si na to musí udělat/alokovat místo, načíst data a opět se pointry dostane, kam potřebuje.
int main(void) { int a,k,i; // tři proměnné int neinicializované scanf("%d", &a); //přečteme číslo a uložíme proměnnou do "a" int b[2000]; // neinicializované pole for(i = 0; i < a; i++){ //provedeme cyklus několikrát pokud bude a>i b[i]; //zde nic neděláme nemá to význam } //konec cyklu b[i] = k; //neinicializovanou proměnnou přečteme a zapíšeme do pole někam kam ukazuje proměnná i čili zapisujeme buhví co a bůh ví kam printf("\n%d\n", k); //vypíšeme nesmysl co je v neinicializované proměnné k return 0; //konec }Co takhle si nejdříve něco přečíst Programování v jazyce C
b[i] = k; //neinicializovanou proměnnou přečteme a zapíšeme do pole někam kam ukazuje proměnná i čili zapisujeme buhví co a bůh ví kam
To není tak úplně pravda, bezprostředně po skončení cyklu bude mít proměnná i
hodnotu a
. Že to nedává smysl, protože pravá strana je neinicializovaná a levou pak nikdy nepoužijeme (a nedávalo by to smysl ani obráceně, protože levá strana také není inicializovaná), to už je jiná kapitola.
Musím říct, že tady mne tazatel dostal. Většinou u špatně napsaného programu aspoň tuším, co měl autor na mysli. Tady se naprosto neodvažuji hádat; podobné pocity jsem měl při čtení zdrojáku z úlohy 6 tady.
Tiskni
Sdílej: