Na blogu Raspberry Pi byla představena rozšiřující deska Raspberry Pi AI HAT+ 2 s akcelerátorem Hailo-10 a 8 GB RAM. Na rozdíl od předchozí Raspberry Pi AI HAT+ podporuje generativní AI. Cena desky je 130 dolarů.
Wikipedie slaví 25. výročí svého založení. Vznikla 15. ledna 2001 jako doplňkový projekt k dnes již neexistující encyklopedii Nupedia. Doména wikipedia.org byla zaregistrována 12. ledna 2001. Zítra proběhne v Praze Večer svobodné kultury, který pořádá spolek Wikimedia ČR.
Po více než dvou letech od vydání předchozí verze 2.12 byla vydána nová stabilní verze 2.14 systémového zavaděče GNU GRUB (GRand Unified Bootloader, Wikipedie). Přehled novinek v souboru NEWS a v aktualizované dokumentaci.
Google Chrome 144 byl prohlášen za stabilní. Nejnovější stabilní verze 144.0.7559.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 10 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře (YouTube).
Microsoft zveřejnil zdrojový kód XAML Studia a uvolnil ho pod MIT licencí. XAML Studio je nástroj ze světa Windows, určený pro tvorbu uživatelského rozhraní aplikací pomocí XAML (Extensible Application Markup Language). Stalo se tak zhruba po osmi letech od prvního prohlášení Microsoftu, že se tento kód chystá zveřejnit.
TimeCapsule, 'časová kapsle', je jazykový model trénovaný výhradně na datech z určitých míst a časových období, aby se tak napodobila autentická slovní zásoba, způsob vyjadřování a názory dané doby. Na Hugging face jsou k dispozici modely natrénované na historických textech dostupných v oblasti Londýna mezi lety 1800 až 1875.
Radicle byl vydán ve verzi 1.6.0 s kódovým jménem Amaryllis. Jedná se o distribuovanou alternativu k softwarům pro spolupráci jako např. GitLab.
Zemřel Scott Adams, tvůrce komiksových stripů Dilbert parodujících pracovní prostředí velké firmy.
Sdružení CZ.NIC vydalo novou verzi Knot Resolveru (6.1.0). Jedná se o první vydanou stabilní verzi 6, která je nyní oficiálně preferovanou a doporučovanou verzí, namísto předešlé verze 5. Více o Knot Resolveru 6 je možné se dočíst přímo v dokumentaci.
Byl vydán Linux Mint 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.
>
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: