Anonymní profil gna – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil gna – Programujte.comAnonymní profil gna – Programujte.com

 

Příspěvky odeslané z IP adresy 213.211.51.–

gna
.NET › Problém s delegátem
12. 10. 2021   #388712

V principu to máš dobře, jen ten Join si neporadí s Array. Třeba takhle to funguje:

return String.Join(" ", (object[])a);

Nebo nepoužívej Array.

gna
MySQL › Rozdíl minima a maxima v kaž…
3. 10. 2021   #388696

Záznamy jde seskupit pomocí GROUP BY (a ty agregační funkce pak počítají v rámci každé skupiny).

Takže možná nějak takhle (nezkoušeno): 

SELECT ...
FROM ...
WHERE EXTRACT(YEAR_MONTH FROM created) > EXTRACT(YEAR_MONTH FROM NOW() - INTERVAL 1 YEAR)
GROUP BY EXTRACT(YEAR_MONTH FROM created)
gna
Python › Proměnný počet argumentů fun…
27. 9. 2021   #388680

Při definici funkce jde definovat výchozí hodnoty parametrů. Takové parametry pak není potřeba uvádět a v tom případě budou mít tu výchozí hodnotu.

def search(name=None, age=None):
    if name is not None:
        neco s name
    if age is not None:
        neco s age

Nebo jde parametr označit dvěmi hvězdičkami a pak to bude dict se všemi (pojmenovanými a explicitně nedefinovanými) parametry:

def search(**kwargs):
    kwargs["name"]
    kwargs.get("name")
    ...
gna
OS - GNU / Linux › Instalace Wine
26. 9. 2021   #388674

To nevypadá na Fedoru. Místo dnf zkus yum a celkově návody na instalaci Wine/.NET/Xserver pro RHEL. (Ale  moc bych od toho nečekal, možná spíš rovnou Mono).

gna
.NET › Window server - cloud
26. 9. 2021   #388673

Myslel jsem netstat, ale vypadlo mi z toho t. Jestli ta tvoje appka používá MySQL, které jsi nainstaloval až teď, tak si nedovedu představit, jak by bez toho mohla fungovat a k čemu se chceš připojovat.

gna
Java › Nefufngující kód - čteníí xlsx
26. 9. 2021   #388672

POI máš nainstalovaný a naimportovaný tak, jak je to v tom videu?

gna
.NET › Window server - cloud
25. 9. 2021   #388667

To by mělo stačit, aby ti provoz z Internetu prošel na ten server. A na něm ti pravděpodobně běží ještě Windows Firewall, který defaultně všechna příchozí spojení blokuje. Tak to povol ještě v něm (nebo ho úplně vypni).

A nakonec se ujisti, že ta tvoje appka přijímá spojení odkudkoliv. Třeba když dáš v příkazovém řádku "nestat -a", tak bys měl vidět něco jako "0.0.0.0:2500 LISTENING".

gna
.NET › Window server - cloud
24. 9. 2021   #388661

Tak je to v Security groups. Nevím teda jak ve Free, ale asi to bude podobně.

gna
.NET › Window server - cloud
24. 9. 2021   #388660

Firewal musíš nastavit primárně v nastavení toho serveru. A až pak případně ještě v tom hostovaném systému, pokud je to potřeba.

Nevzpomínám si kde to tam je, ale mám pocit, že to není označeno jako Firewall, ale jako nějaké Policies, nebo tak nějak.

gna
.NET › Window server - cloud
23. 9. 2021   #388653

Vyšší verze potřebuješ jen když chceš fungovat jako server. Klientská část by ve Windows Home měla být.

gna
.NET › Window server - cloud
22. 9. 2021   #388649

Nevím, jak teď, ale Amazon Free Tier kdysi býval docela použitelný.

gna
Python › Typ hodnoty uložené ve Třídě
22. 9. 2021   #388648

To přiřazení jsem teda napsal zjednodušeně, samozřejmě to můžeš rozepsat, tak ja to zkoušíš teď.

genint = GenClass[int]()
genint: GenClass[int] = GenClass()
genint: GenClass[int] = GenClass[int]()
gna
Python › Typ hodnoty uložené ve Třídě
22. 9. 2021   #388647

Jestli jsou v té třídě prostě inty, tak ty otypuješ jako inty; a typ instance třídy pak bude jen ta třída. 

class IntClass:
    def __init__(self) -> None:
        self.values: list[int] = []
        
    def add(self, value: int) -> None:
        self.values.append(value)


inty = IntClass()
inty.add(3)    # ok
inty.add('a')  # err

Pokud je to generická třída, tak ji tak musíš definovat a pak můžeš určovat konkrétní typ. 

from typing import Generic, TypeVar

T = TypeVar('T')


class GenClass(Generic[T]):
    def __init__(self) -> None:
        self.values: list[T] = []
        
    def add(self, value: T) -> None:
        self.values.append(value)


genint = GenClass[int]()
genint.add(3)    # ok
genint.add('a')  # err

genstr = GenClass[str]()
genstr.add('a')  # ok
genstr.add(3)    # err
gna
.NET › Dynamické rozložení ovládací…
16. 9. 2021   #388623

#21 JerryM
Ty a tvoje hormady odkazů. Nic z těch enginů nevyužije a o Vulkan nezavadí ani náhodou, ale to ty nemůžeš vědět, když nikdy ani netušíš o čem meleš.

gna
.NET › Hashování hesla
15. 9. 2021   #388598

Jen na serveru. Hashování u klienta nemá žádný smysl.

gna
.NET › C# SQL Databáze - INNER JOIN
9. 9. 2021   #388571

Tak jsem se tím trochu prokousal a ty položky asi budou typu DataRow, který nedefinuje .Equals, takže je asi budeš must porovnat sám. Nebo třeba v databázi definovat constraint na unikátnost.

gna
.NET › C# SQL Databáze - INNER JOIN
9. 9. 2021   #388570

Index tě vůbec nezajímá. Na to už jsi přišel, že je pořadové číslo položky. Jde o to co dát toho .Contains.

PrvniListbox.Items.Contains(DruhyListbox.SelectedItem)

V Items hledat Item by dávalo smysl, ale nevím jak to funguje. Jinak samozřejmě můžeš ty položky projít a porovnat sám, jak chceš.

gna
.NET › C# SQL Databáze - INNER JOIN
9. 9. 2021   #388568

A to SelectedItem jsi zkusil?

gna
.NET › C# SQL Databáze - INNER JOIN
9. 9. 2021   #388565

Nevím, jak funguje ten .Contains (resp. co je tam za objekty a jak implementují .Equals).

Zkusil bych SelectedItem místo SelectedValue.

gna
Python › Nejednoznačné chování kódu v…
9. 9. 2021   #388562

Jediný efekt toho printu je asi v tom, že je poměrně pomalý. Ale myslím, že není problém číst plnou rychlostí.

To, co se mi nelíbí je, že pro každé čtení vytváříš novou instanci MCP3008. Netuším, jak je ta třída implementovaná, ale v tom by mohl být problém. Tou pauzou v printu možná dáš Pythonu/systému čas něco pouklízet.

channel0 = MCP3008(channel=0)
channel1 = MCP3008(channel=1)

funkce:
    cyklus:
        val0 = channel0.value
        val1 = channel1.value
gna
Regulární výrazy › Získávání informací z webu
8. 9. 2021   #388558

#3 fix
PHP nemusíš spouštět přes web server.

gna
.NET › C# SQL Databáze - INNER JOIN
7. 9. 2021   #388555

#5 Learnt
To zni, jako bys čekal, že to nějak definuje vazbu s tím ListBoxem. Ne, to je řada příkazů, které se provedou a hotovo.

Pokud při změně výběru chceš něco provést, tak můžeš definovat funkci, která se při té události spustí.

Podle dokumentace má ListBox události SelectedIndexChanged a SelectedValueChanged. Na to by to mělo jít napíchnout.

gna
.NET › C# SQL Databáze - INNER JOIN
7. 9. 2021   #388553

Mezi b.MestoId a WHERE nemáš mezeru.

gna
.NET › Otevření souboru a zároveň u…
1. 9. 2021   #388524

#7 Amik98
No tak tam nedáš string natvrdo, ale to co uživatel vybral, ne? Máš to při načítání a pak při ukládání najednou nevíš?

private void button13_Click(object sender, EventArgs e)
{
    OpenFileDialog dialog = new OpenFileDialog();
    if (dialog.ShowDialog() == DialogResult.OK)
    { 
        richTextBox1.Text = File.ReadAllText(dialog.FileName);
    }
}

private void button14_Click(object sender, EventArgs e)
{
    // asi budeš chtít upravit některé vlastnosti toho dialogu
    // viz dokumentace
    SaveFileDialog dialog = new SaveFileDialog();
    if (dialog.ShowDialog() == DialogResult.OK)
    {
        File.AppendAllText(dialog.FileName, richTextBox1.Text);
    }
}
gna
.NET › Otevření souboru a zároveň u…
1. 9. 2021   #388517

Jako jak tam máš OpenFileDialog pro otevření, tak chceš variantu pro uložení? To je SaveFileDialog.

gna
.NET › Otevření souboru a zároveň u…
1. 9. 2021   #388515

Není mi jasné, na co se ptáš a o co se v tom kódu pokoušíš. Opakem ReadAllText je WriteAllText.

richTextBox1.Text = File.ReadAllText(soubor);
...
File.WriteAllText(soubor, richTextBox1.Text);
gna
Offtopic › Kolejné :)
30. 8. 2021   #388499

#4 fix
Koukám, že té ekonomice rozumíš asi tak stejně jako programování.

gna
C / C++ › C# výpis čísel dělitelné urč…
28. 8. 2021   #388492

Operátor += je přičítání k aktuální hodnotě (v připadě stringu sčítání znamená spojování). 

x += y;
// je vlastně jen zkratka pro:
x = x + y;

Ten text má jen jednu hodnotu, ale postupně se mění jako "to co tam je" + "přidat něco nového".

gna
C / C++ › C# výpis čísel dělitelné urč…
28. 8. 2021   #388490

   

int a = Convert.ToInt32(textBoxA.Text);
int b = Convert.ToInt32(textBoxB.Text);
...
int delitel = Convert.ToInt32(textBoxDelitel.Text);

textBoxVysledek.Text = "";
if (a % delitel == 0) textBoxVysledek.Text += a + " ";
if (b % delitel == 0) textBoxVysledek.Text += b + " ";
...

gna
.NET › C# řádek s nejnižším součtem
20. 8. 2021   #388471

Obecně minimum najdeš tak, že projdeš všechny prvky a pamatuješ si ten nejmenší.

minimum = prvniHodnota;
projit_zbyvajici_hodnoty {
  if (hodnota < minimum) {
    minimum = hodnota;
  }
}

A nebo cokoliv jiného tě napadne. Možná máš tu matici seřaditelnou, nebo něco: 

List<List<int>> matice ...;
List<int> minradek = matice.OrderBy(radek => radek.Sum()).First();
gna
.NET › Nesmyslný error
13. 8. 2021   #388421

Lobby je pravděpodobně privátní třída, tak ji nemůžeš vracet z veřejné metody. Udělej findLobby jako private , nebo Lobby jako public.

gna
.NET › libMPSSE.dll - opakované vol…
13. 8. 2021   #388409

Pokud je to toto, tak by opakované volání nemělo nic rozbít. Ale nespoléhal bych na implementační detaily a prostě zajistil volání jen jednou.

gna
JavaScript, AJAX, jQuery › Spouštění funkce vícekrát
13. 8. 2021   #388396

#5 fix 

$(datepicker).datepicker();

Ale na to se vykašli a udělej to jak psal peter. Přidej těm elementům class="datepicker" a použij selektor ".datepicker".

gna
.NET › C# ukazatelé
10. 8. 2021   #388366

Pokud není operátor == přetížený, tak dělá to, co chceš.

Stoprocentní způsob je Object.ReferenceEquals(obj1, obj2).

gna
.NET › Filozofie komunikace klient…
9. 8. 2021   #388351

   

list.Add(neco);
ListChanged(list);
gna
.NET › Zamíchání kolekce
7. 8. 2021   #388336

#5 JerryM
Náhodné zamíchání kolekce je naprosto běžná věc. Což ty samozřejmě nemůžeš vědět.

gna
.NET › Zamíchání kolekce
7. 8. 2021   #388334

Já C# až tak do hloubky neznám a nevím, co by na tom mohlo nefungovat. Jakou chybu ti to hlásí?

gna
.NET › Zamíchání kolekce
6. 8. 2021   #388332

Obecně se míchání dělá tak, že projdeš všechny prvky a prohodíš je s jiným náhodným prvkem ze zbytku.

S LINQ můžeš třeba prvky seřadit podle náhodné hodnoty.

Random random = new Random();
randomized = original.OrderBy(x => random.Next()).ToList();
gna
.NET › Internetová komunikace - pro…
21. 7. 2021   #388234

Statická proměnná existuje jenom jedna jediná, pořád. Instanční je samostatná pro každou instanci dané třídy. Takže třeba můžeš mít třídu Osoba a každá instance bude mít vlastní jméno a můžeš vytvořit Honzíka a Pepíka.

Ale když budeš z více vláken manipulovat s jednou osobou, tak pořád může dojít k souběhu.

Pokud nepotřebuješ ty proměnné (hodnoty) nějak "držet", tak jsem měl na mysli vyloženě lokální proměnné v metodě. Ty se vytvářejí při každém vyvolání metody (takže se vlákna nemají o co prát) a existují jen po dobu provádění té metody (s tím, že .NET pohlídá, když tu hodnotu někam předáš, tak se neztratí, ale smaže se, až když se opravu nikde nepoužívá)

void Metoda()
{
    TcpClient client = ...;
    NetworkStream networkStream = ...;
    ...
}
gna
.NET › Internetová komunikace - pro…
21. 7. 2021   #388232

No, máš tam proměnné jako atributy třídy, takže mohlo dojít k souběhu a to jsi vyřešil tim mutexem.

Nevím, jak máš zbytek kódu, ale tenhle fragment vypadá, že ty proměnné nikde jinde nepotřebuješ, takže by taky šlo je mít jako lokální proměnné v té metodě a různá vlákna by se o ně neprala.

gna
.NET › Internetová komunikace - pro…
21. 7. 2021   #388230

Ještě je potřeba zajistit, aby se třeba při vyjímce ten zámek odemknul. To ta varianta s lock dělá automaticky (nepoužívám C# aktivně, tak nevím, co jsem v tom příkladu napsal špatně). Jinak to musíš udělat sám (try-finally)

Pak ještě bych zamykal jen to co je opravdu potřeba. Tj. tu serializaci dal mimo zamčenou sekci.

A pak hlavně, když pokaždé otevíráš nové spojení, tak není potřeba nic zamykat. Tu synchronizaci bys potřeboval, pokud máš jeden "přetrvávající" socket a může ti na něj sahat více vláken. Tj. něco jako toto: 

void Connect() {
    socketLock.WaitOne();
    try {
        if (networkStream != null)
            throw new AlreadyConnected();

        client = ...;
        networkStream = ...;
    } finally {
        socketLock.ReleaseMutex();
    }
}

void Disconnect() {
    socketLock.WaitOne();
    try {
        if (networkStream == null)
            throw new NotConnected();

        networkStream.Close();
        networkStream = null;
        client.Close();
        client = null;
    } finally {
        socketLock.ReleaseMutex();
    }
}

void Communicate() {
    SerializeRequest();

    socketLock.WaitOne();
    try {
        if (networkStream == null)
            throw new NotConnected();

        networkStream.Write();
        networkStream.Read();
    } finally {
        socketLock.ReleaseMutex();
    }

    UnserializeResponse();
}
gna
.NET › Internetová komunikace - pro…
21. 7. 2021   #388228

Tomu se říká synchronizace a je potřeba ji použít u všeho na co "saháš" z více vláken.

Základem je zámek (mutex), který jde zamknout jen jednou a další pokus o zamčení se "zasekne", dokud ho původní "držitel" neodemkne. A pak to může být ještě složitější, ale s tímhle si vystačíš hodně dlouho.

V .NETu je na to třída Mutex:

private Mutex socketLock = new Mutex();
...
public void Metoda()
{
    socketLock.WaitOne()
    // tady je zamčeno
    // ...
    socketLock.ReleaseMutex()
    // tady už ne
}

A nebo klíčové slovo lock, které pro tebe asi bude vhodnější a pracuje s libovolným objektem: 

private object socketLock = new object();
...
public void Metoda()
{
    lock (socketLock)
    {
        // tady je zamčeno
        // ...
    }
    // tady už ne
}

Takže kolem všeho, co potřebuješ synchronizovat, přidáš zamykání. (Respektive ideálně implementaci komunikace budeš mít někde centralizovanou a jen jedna metoda bude potřebovat zámek.)

A logicky z toho vyplývá, že by bylo dobré ten zámek držet jen chvilinku, což při práci se sockety úplně nejde, ale budiž.

gna
C / C++ › Netbeans - rozdilne vysledky
19. 7. 2021   #388213

#11 Keyzio
To, že se stdout flushne při čtení ze stdin je asi implementačně závislé chování a standard to nevyžaduje. Takže to není úplně, že něco je správně a něco špatně. Pokud chceš mít jistotu, že se neodřádkovaný výstup vypíše, tak musíš použít explitní fflush nebo bufferovaní vypnout, jak psal Kit.

gna
C / C++ › Netbeans - rozdilne vysledky
18. 7. 2021   #388199

A vypíše to správně ten znak, který jsi zadal?

Ty příkazy nemůžou proběhnout v jiném pořadí. Při tom problému s bufferováním může dojít k tomu, že ti program visí ve scanfu, ale terminál ještě nevypsal výstup prvního printfu (ačkoliv už ho načetl do bufferu) a vypíše ho později (až bude mít více dat, nebo znak konce řádku, nebo program skončí, nebo něco).

Nevím jak NetBeans, ale různá IDE často neposkytují "terminál", ale jen zobrazují výstup programu a neumožňují zadávat vstup. A podle toho jak to mají udělané pak program čte vstup bůhvi odkud a ty ho nemůžeš zadat a donekonečna to visí ve scanfu, anebo je standardní vstup programu zavřený a scanf nic nenačte a okamžitě skončí s chybou. To druhé vypadá na tvůj případ.

gna
C / C++ › Pole s ukazateli na různé pr…
13. 7. 2021   #388109

#45 rjulius
Vždyť to říkám, každý je tu génius s miliónem variant řešení, ale jednoduchý dotaz na pointery nevyřeší nikdo.

Pointer skutečně je jen adresa, to jsi věděl. A můžeš ho libovolně přetypovat, to ses dozvěděl hned na začátku. JerryM tak nějak ze zásady nikdy netuší o čem je řeč a můžeš ho ignorovat, ostatní komentáře mi připadají přínosné.

gna
Příkazový řádek › Jak uložit výsledek operace…
8. 7. 2021   #388065

Nevím, jak v novějších verzích, ale kdysi dávno byl příkaz FOR jediný způsob, jak v baťáku zpracovat výstup jiného příkazu. Na trochu slušnější programování byl použitelný JScript, ale nevím, jestli to na Windows ještě existuje.

Každopádně je na všech podporovaných verzích Windows nainstalovaný PowerShell a ten by takové věci snad měl umět.

gna
.NET › Vhodný prvek na návrh deskto…
7. 7. 2021   #388051

To jsem jen nepochopil, jakou událost jsi myslel.

No, jsem na políčku 3, hodím 8, jdu na políčko 11. To je nějakého typu, někomu patří, mám nějaké možnosti nebo povinnosti. Ten kód musíš prostě napsat.

gna
.NET › Vhodný prvek na návrh deskto…
7. 7. 2021   #388049

Hele, takhle, já jsem hrál Monopoly asi dvakrát v životě a nepamatuji si, jak se to hraje. Předpokládám, že posun figurek by dělal program podle toho kolik hodíš na kostkách a není potřeba nic vybírat. Takže nepotřebuješ vstupní události z té desky. Klidně mě oprav.

Na té desce jsou jen obdélníky, to nakreslíš v kdečem :-)

gna
.NET › Vhodný prvek na návrh deskto…
7. 7. 2021   #388047

No prostě to, jak jdou ty políčka za sebou, jakého jsou typu a kdo na ních stojí bude nějaké pole objektů nebo něco. Ta zobrazená hrací deska tě v podstatě nezajímá.

gna
.NET › Vhodný prvek na návrh deskto…
7. 7. 2021   #388045

To záleží, jak to chceš dělat, ale rozložení té desky tě asi zajímá jen kvůli umisťování figurek. A to můžeš prostě třeba v kódu mít natvrdo souřadnice prostředku jednotlivých políček.

gna
.NET › Vhodný prvek na návrh deskto…
7. 7. 2021   #388043

Tu herní plochu udělej jako zobrazení předkresleného externího obrázku. Komponenta na to je myslím PictureBox.

gna
.NET › Vhodný prvek na návrh deskto…
6. 7. 2021   #388041

I kdybys to kreslil celé od A do Z, tak bys to dělal formou komponent/tříd a nakonec by to u deskové hry nebylo tolik práce.

Ujasni si jestli chceš tvořit hru, nebo herní engine. Já bych tipl to první, tak si prostě najdi už hotový engine. Třeba pro Godot (nebo cokoliv jiného) je na YouTube spousta tutoriálů a rychle budeš mít něco funkčního bez patlání se z programováním vnitřností.

gna
JavaScript, AJAX, jQuery › Okamžité zobrazenie vkladaný…
5. 7. 2021   #388034

Akorát mám pocit, že ten AJAX nepotřebuješ. 

var hodnota = input.value;
document.getElementById('vysledek').innerText = '10 + ' + hodnota + ' = ' + (10 + hodnota);
gna
JavaScript, AJAX, jQuery › Okamžité zobrazenie vkladaný…
5. 7. 2021   #388032

V těch onXXX atributech můžeš zadat JavaScriptový kód, který se při dané události má provést. Podobně jako už teď máš onkeypress. AJAX je pak v JavaScriptu načtení dat ze serveru.

<script>
function zpracujPrispevek(input, idVysledek) {
    var hodnota = input.value;
    var request = new XMLHttpRequest();
    request.onreadystatechange = function() {
        if (this.readyState == 4) {
            document.getElementById(idVysledek).innerText = this.responseText;
        }
    }
    request.open("GET", "prispevek.php?hodnota=" + encodeURIComponent(hodnota));
    request.send();
}
</script>
<input oninput="zpracujPrispevek(this, 'vysledek')">
<div id="vysledek">---</div>

prispevek.php:

<?php
if (isset($_REQUEST['hodnota'])) {
    echo 'Zpracoval jsem prispevek: ' . $_REQUEST['hodnota'];
}
?>
gna
Python › Shutil.copy - nefunguje v exe
30. 6. 2021   #388028

Obecně shutil v pyinstalleru funguje a shutil.copy při chybě háže vyjímku.

Takže buď se to zkopírovalo jinam, nebo se to nezkopírovalo a měl bys vidět chybový výpis. (pokud nemáš vypnutou konzoli nebo ten kód volaný někde, kde se vyjímky chytají a ignorují)

gna
Python › Shutil.copy - nefunguje v exe
29. 6. 2021   #388024

Co znamená, že přestane fungovat? Jakou chybu to hodí?

Co je zač ta funkce _getutempdir a jakou hodnotu ti vrací? Já jsem stejně pojmenovanou funkci našel na stackoverflow a ta je úplná krávovina.

gna
Python › Tkinter rozanimování individ…
26. 6. 2021   #388014

canvas.create_... vrací ID vytvořeného objektu.

canvas.coords(ID, ...) umožňuje změnit souřadnice objektu.

.after(počet_milisekund, funkce, parametry) umožňuje naplánovat spuštění funkce.

import tkinter
import math


def calc_point(cx, cy, polomer, uhel):
    uhel = math.radians(uhel)
    x = cx + polomer * math.cos(uhel)
    y = cy + polomer * math.sin(uhel)
    return x, y


def calc_polygon_points(cx, cy, polomer, pocet, rotace=0):
    uhel_start = 270
    uhel_step = 360 / pocet
    points = []
    for i in range(pocet):
        uhel = uhel_start + rotace + i * uhel_step
        point = calc_point(cx, cy, polomer, uhel)
        points.extend(point)
    return points


def main():
    pocet_stran = 5
    pocet_polygonu = 50
    uhel_otocky = -3

    size_start = 10
    size_step = 7

    root = tkinter.Tk()
    canvas = tkinter.Canvas(root, width=400, height=400, bg="white")
    canvas.pack()

    polygons = []

    for i in range(pocet_polygonu):
        polysize = size_start + i * size_step
        polyrot = i * uhel_otocky
        points = calc_polygon_points(200, 200, polysize, pocet_stran, polyrot)
        polyid = canvas.create_polygon(points, fill="", outline="black")
        polygons.append((polyid, polysize, polyrot))

    def update(rotace=0):
        for polyid, polysize, polyrot in polygons:
            points = calc_polygon_points(200, 200, polysize, pocet_stran, polyrot + rotace)
            canvas.coords(polyid, points)
        root.after(100, update, (rotace + 5) % 360)

    root.after(100, update)
    root.mainloop()

if __name__ == "__main__":
    main()
gna
Python › Jak implementovat Z bufer
25. 6. 2021   #388008

Tak když řešíš z-buffer, tak už asi nějak kreslit umíš. Tak v tom putpixel můžeš ten pixel místo ukládání rovnou vykreslit, nebo až nakonec vykreslit celý colorbuf (to bude rychlejší).

Takže třeba v Tkinteru (jen proto, že je ve standardní knihovně. Samozřejmě to bude pomalé a pro velké plochy úplně nepoužitelné. Např. Pygame umí pěkně blitnout celou plochu) nějak takhle:

import tkinter as tk


class Buffer:
    def __init__(self, width, height):
        self.colorbuf = [[(0, 0, 0)] * width for _ in range(height)]
        self.depthbuf = [[-10000] * width for _ in range(height)]

    def putpixel(self, x, y, z, color):
        if self.depthbuf[y][x] < z:
            self.depthbuf[y][x] = z
            self.colorbuf[y][x] = color

    def toimage(self):
        imagedata = " ".join(
            "{" + " ".join("#%02x%02x%02x" % color for color in row) + "}"
            for row in self.colorbuf
        )
        return imagedata


def main():
    width, height = 400, 400

    buffer = Buffer(width, height)

    def drawrect(x1, y1, x2, y2, z, color):
        for y in range(y1, y2 + 1):
            for x in range(x1, x2 + 1):
                buffer.putpixel(x, y, z, color)

    drawrect(50, 100, 350, 150, -10, (255, 0, 0))  # cerveny, -10
    drawrect(50, 250, 350, 300, -30, (0, 255, 0))  # zeleny, -30
    drawrect(175, 50, 225, 350, -20, (0, 0, 255))  # modry, -20 => za cervenym, pred zelenym

    root = tk.Tk()
    canvas = tk.Canvas(root, width=width, height=height)
    canvas.pack()

    image = tk.PhotoImage()
    image.put(buffer.toimage())
    canvas.create_image((0, 0), anchor=tk.NW, image=image)

    root.mainloop()


if __name__ == "__main__":
    main()

Jestli chceš kreslit dynamickou scénu, tak Python výkonostně není dobrá volba na grafiku po pixelech.

gna
Python › Jak implementovat Z bufer
24. 6. 2021   #388006

Já znám jen Z-buffer z grafiky. To je prostě pole vzdáleností pixelů a používá se k tomu, aby se vzdálenějšími pixely nepřekreslovaly ty bližší. Na tom nic není, není mi jasné, na co se ptáš.

class Buffer:
    def __init__(self, width, height):
        self.colorbuf = [[(0, 0, 0)] * width for _ in range(height)]
        self.depthbuf = [[-10000] * width for _ in range(height)]

    def putpixel(self, x, y, z, color):
        if self.depthbuf[y][x] < z:
            self.depthbuf[y][x] = z
            self.colorbuf[y][x] = color
nv
Offtopic › Proč nemohu upravovat Word d…
9. 6. 2021   #387995

Zkus se podívat do vlasností toho souboru, jestli tam není poznámka, že je blokován, protože pochází z jiného počítače. Pokud ano, tak by tam mělo taky jít ho odblokovat.

nv
Java › Objasneni promennych v array
6. 6. 2021   #387992

Ani náhodou nevěřím tomu, že tam není nejdříve vysvětlení polí a cyklů. Nehledě na to, že to znáš už z Pythonu.

K položkám pole se přistupuje operátorem [].

Dvourozměrné pole je jako pole polí. 

int[][] myNumbers = {
    [0]=> {[0]=> 1, [1]=> 2, [2]=> 3, [3]=> 4},
    [1]=> {[0]=> 5, [1]=> 6, [2]=> 7}
};

For-i projde položky pole myNumbers, což jsou zase pole.

For-j projde položky toho vnořeného pole, což jsou inty.

nv
Java › Kalkulacka pujcky, oprava kodu
2. 6. 2021   #387988

   

int amount = scanner.nextInt();
//your code goes here
int splatka = amount * 10 / 100;
for (int i = 0; i < 3; i++) {
	amount -= splatka;
	System.out.println("zbyla castka " + amount);
}
nv
Visual Basic › Zařízení na COM PORTU
1. 6. 2021   #387978

V první řadě se vykašli na VB. Ten jazyk je prostě dementní a prakticky mrtvý a není k němu není dostatek informačních zdrojů, které v začátcích budeš potřebovat.

Pokud je to VB.NET, tak na to nejspíš v .NET bude nějaká hotová třída pro přístup k seznamu a vlastnostem zařízení. Nevím, hledej :-)

V C jsem na to používal funkce ze setupapi a měly by jít naimportovat i do VB/VB.NET, tak to můžeš zkusit. SetupDiGetClassDevs, SetupDiEnumDeviceInfo, SetupDiGetDeviceRegistryProperty, SetupDiDestroyDeviceInfoList

A jako úplná nouzovka to nejspíš půjde vydolovat i někde z windowsích registrů.

Ale jsou to informace o portech/ovladačích; co je tam fakticky připojeno z obecného ovladače nějakého převodníku samozřejmě nevyčteš.

nv
Inzerce › Textová hra v Javě (hledám p…
30. 5. 2021   #387975

Já bych na to mrknul. Pošlete termín a zadání na novelesco(na)centrum(tecka)cz.

gna
Java › Textová hra v Javě (hledám p…
28. 5. 2021   #387973

Tak to hoď do inzerce a rovnou tam uveď i výši odměny.

gna
PHP › Jak získat počet týdnů v roce
22. 5. 2021   #387965

Bežný rok má 365 dní, to je 52 týdnů a 1 den. Přestupný rok má 366 dní, to je 52 týdnů a 2 dny. Takže rok jako takový nikdy nemá právě 52 anebo 53 týdnů! A už teď by ti při sčítání jedniček a dvojek mělo něco docházet.

Ale při počítání kalendářních týdnů se samozřejmě počítají celé týdny a podle toho, jak ti vyjde týden na přelomu roku, tak se počítá jako první týden nového roku, nebo poslední týden předchozího roku. A tam se můžeš dostat na 52 nebo 53 týdnů. Přestupný rok s tím samořejmě hýbe, ale ne tak, že by každý přestupný rok měl 53 týdnů. Většina lidí umí počítat do sedmi už ve školce.

gna
PHP › Jak získat počet týdnů v roce
21. 5. 2021   #387963

Pokud jde o číslování kalendářních týdnů, tak když zjistíš číslo posledního týdne roku, tak zjistíš kolik týdnů je v tom roce.

Já si s radostí nechám vysvětlit, o co se snažíš. Zatím je každý tvůj příspěvek v téhle diskuzi naprostá krávovina.

gna
PHP › Jak získat počet týdnů v roce
21. 5. 2021   #387961

Jestli ti jde o číslování týdnů, tak 28.12. je vždycky v posledním týdnu. 

foreach ($years as $year) {
    echo $year . ' = ' . (new DateTime("28.12.$year"))->format('W') . '<br/>';
}
gna
PHP › Jak získat počet týdnů v roce
21. 5. 2021   #387959

Já teda vím jen o jednom přestupném dnu, takže podle mě rok má vždycky 365 nebo 366 dní.

365 dní je 52 týdnů a 1 den.
366 dní je 52 týdnů a 2 dny.

Vždycky.

gna
PHP › Jak získat počet týdnů v roce
21. 5. 2021   #387957

52 a kousek. Vždycky.

gna
.NET › Náhledy souborů
21. 5. 2021   #387954
gna
PHP › SESSION a HTTPS problém
19. 5. 2021   #387949

Já si myslím, že je problém v tom www (s nebo bez jsou rozdílné domény).

Můžeš to vyřešit v PHP -- session.cookie_domainsession_set_cookie_params.

Nebo zase redirectem, třeba ať ti to jde vždycky na www.

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
gna
.NET › Náhledy souborů
17. 5. 2021   #387938
gna
Assembler › Assembler x86 Intel Pentium
16. 5. 2021   #387930

#38 hlucheucho
A Jerry prasí vždycky.

gna
.NET › Formy a vlákna
14. 5. 2021   #387918

Myslím si, že Controly by mělo jít vytvořit v jiném vlákně a jen ten Add bude potřeba ve vlákně UI.

Když ta data mění form, tak bych je posílal postupně jednotlivě, bez fronty. Invoky se provádějí taky postupně, pokud nebudeš přistupovat ke sdíleným datům, tak to sám synchronizovat nemusíš.

Čekání na dokončení záleží na tom, co přesně potřebuješ dělat. Když pošleš X úloh, tak po X výsledcích je hotovo, asi není potřeba mít někde blokující čekání.

gna
Assembler › Assembler x86 Intel Pentium
12. 5. 2021   #387882

Já jsem nemyslel konkrétně volání funkce max, ale jen princip.

AND můžeš udělat zřetězením jednotlivých podmínek. V pseudokódu třeba nějak takhle:

        if not podminka1
                goto fail
        if not podminka2
                goto fail
        if not podminka3
                goto fail
good:
        // tady jsou vsechny 3 podminky splneny
fail:
        // ...
gna
Assembler › Assembler x86 Intel Pentium
12. 5. 2021   #387880

#3 Student53
Asi tak nějak, já bych to popsal takhle: 

a0 = max(x0 + r0, y0 + r0)
a1 = max(x1 + r1, y1 + r1)
a2 = max(x2 + r2, y2 + r2)

a = max(a0, a1, a2)
gna
Assembler › Assembler x86 Intel Pentium
11. 5. 2021   #387878

Hodnota a není uvedena, tak ji asi musíš dopočítat. Tj. zjistíš maxima pro střed kruhu + poloměr.

Náhodné číslo 0..1 vynásobíš hodnotou a a dostaneš náhodné číslo 0..a.

To použiješ na vygenerování souřadnic 10-tisíc bodů.

Pro každý bod a všechny tři kruhy otestuješ jestli je bod uvnitř kruhu. Tj. porovnáš vzdálenost bodu od středu kruhu (Pythagorova věta) s poloměrem kruhu.

Pokud hodnoty "je uvnitř" a "má být uvnitř" souhlasí, tak máš zásah.

Nakonec z počtu trefil/netrefil spočítáš tu plochu.

Instrukční sada x87 je třeba tady - x87 floating-point instructions.

To by mělo na odraz stačit. Na konkrétnější dotaz dostaneš konkrétnější odpověd.

gna
PHP › Předání proměnné z PHP do JS
23. 4. 2021   #387841

Ten JS se k těm datům musí nějak dostat. Můžeš to zkomplikovat, ale nemůžeš zabránit tomu, aby je uživatel nějak získal.

gna
C / C++ › Ako náhodne umiestniť objekt…
22. 4. 2021   #387832

Když máš třeba 10 waypointů, tak platné indexy jsou 0 až 9, ale do validNumbers vkládáš čísla 0 až 10. Takže ti GetRandomNumber může vrátit naplatný index (10). Víc z téhle trošky kódu nevyčtu.

gna
C / C++ › Ako náhodne umiestniť objekt…
21. 4. 2021   #387830

#3 juraj175
co jsi tim chtel rict?

gna
C / C++ › Ako náhodne umiestniť objekt…
21. 4. 2021   #387825

V Awake do _validNumbers vkládáš jedno číslo navíc (asi chceš < namísto <=), takže ti GetRandomNumber může vrátit neplatný index. Čekal bych, že to vyhodí vyjímku, která bude někde vidět.

gna
Pascal › Hokejová tabulka v Pascalu
19. 4. 2021   #387820

A s čím konkrétně máš problém?

gna
HTML / XHTML › Výpočet výšky SVG
19. 4. 2021   #387819

Navíc souřadnice Y je záporná.

X/Y se rozměrů netýká. Vezmi jen poměr W/H.

gna
.NET › Ošetření výjimky Index mimo…
16. 4. 2021   #387785

   

i < start + jednaStrana && i < seznamTemp.Count
gna
Assembler › Asembler i86 - kalkulačka
10. 4. 2021   #387762

A já se prostě nenaučím psát mě-mně :))

gna
Assembler › Asembler i86 - kalkulačka
10. 4. 2021   #387761

Mně moc nenapadá s čím bys měl mít problém. Možná s těmi čísly?

Z textové číslice dostaneš její hodnotu odečtením znaku '0'. A v osmičkovém čísle každá číslice zabírá 3 bity.

V Céčku by to bylo takhle (a napsat to v asm by neměl být problém): 

int value = 0;
value <<= 3; value |= getdigit() - '0';
value <<= 3; value |= getdigit() - '0';
value <<= 3; value |= getdigit() - '0';

// prvotní vynulování a první shl samozřejmě není nutný, jde o princip
// << je bitový posun doleva a | je bitový or (můžeš použít i přičítání)

gna
JavaScript, AJAX, jQuery › Jak vzít data z tabulky?
6. 4. 2021   #387735

Já ti nevím. Chápu to tak, že máš komplet data na klientu, filtrování i stránkování ti taky běží na klientu, tak nevidím v čem by měl být problém a co chceš řešit na serveru. Ale pokud to potřebuješ/chceš, tak holt vezmi obsah toho pole a pošli ho na server.

gna
JavaScript, AJAX, jQuery › Jak vzít data z tabulky?
6. 4. 2021   #387733

#9 fix
Mně nešlo konkrétně o ten příklad se selected: true, ale obecně o tu funkci, které těch voleb podporuje více, třeba search: 'applied'...

gna
JavaScript, AJAX, jQuery › Jak vzít data z tabulky?
1. 4. 2021   #387709
gna
Delphi › OTEVŘENÍ EXTERNÍHO PROGRAMU
1. 4. 2021   #387708

Pokud je nainstalovaný nějaký program asociovaný s RTF (a to asi vždycky je, přinejmenším wordpad), tak stačí hodit cestu k souboru do ShellExecute. 

uses ShellApi;
...
ShellExecute(0, 'open', PChar('cesta\ksouboru.rtf'), nil, nil, SW_SHOW);

A pak ještě přímo v Delphi je TRichEdit, který umí zobrazit RTF (nevím, jak na tom je teď, kdysi dávno nezvládal pokročilé formátovaní).

gna
C / C++ › C - struct vnořování
29. 3. 2021   #387682

Velikost členů jde určit v bitech a členy unionu se překrývají. Tak si to můžeš podle potřeby nějak nakombinovat. (Mimo toho, že to všechno můžeš kdykoliv explicitně přetypovávat.) Podle způsobu použití to může formálně být nedefinované, nebo implementačně závislé chování, ale funguje to prakticky všude. 

struct magic {
	union {
		uint16_t w;
		struct { uint8_t b1, b2; } b;
		struct { uint16_t n1:4, n2:4, n3:4, n4:4; } n;
	};
};

int main()
{
	struct magic m = { 0x1234 };
	printf("sz %zu\n", sizeof(m));
	printf("w %x\n", m.w);
	printf("b %x %x\n", m.b.b1, m.b.b2);
	printf("n %x %x %x %x\n", m.n.n1, m.n.n2, m.n.n3, m.n.n4);
}
/*
sz 2
w 1234
b 34 12
n 4 3 2 1
*/
gna
JavaScript, AJAX, jQuery › úkol od hovada
22. 3. 2021   #387655

Jasně, že vůbec nevíš jak. Školní úkoly bývají na věci, o kterých nemáte žádné ponětí.

Tak si rozmysli, co konkrétně nevíš, a pak se zeptej.

gna
C / C++ › Diskuze: Praca so strukturou…
19. 3. 2021   #387649

V každé iteraci toho foru čteš soubor až do konce.

Takže v první iteraci se načte celý soubor na index 0 a další nenačtou nic.

gna
C / C++ › posloupnost
10. 3. 2021   #387635

No problém je v tom středníku, ten break musí být v těle cyklu:

while (...) {
    ...
    break;
}

A konkrétně na toto break nepotřebuješ. 

int cislo;
// dokud se podařilo načíst číslo a není to záporné číslo
while (cin >> cislo && cislo >= 0) {
    // něco dělej
    cout << cislo << "\n";
}
gna
C / C++ › posloupnost
10. 3. 2021   #387631

Pokud je ten break mimo cyklus, tak je to syntaktická chyba.

gna
C / C++ › posloupnost
10. 3. 2021   #387629

 Máš za while středník.

while (true) // opakuj donekonečna
    ; // nic
// sem to nikdy nedojde
gna
C / C++ › prumer lichych cisel v inter…
9. 3. 2021   #387628

Udělej si proměnné pro součet a pro počet. V tom cycklu jim patřičně uprav hodnoty a nakonec vypiš průměr.

gna
Delphi › INFO
8. 3. 2021   #387620

   

MessageDlg('text', mtWarning, mbOK, 0);
gna
PHP › Laravel 8 generovanie PDF
7. 3. 2021   #387614

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý