Pomůže někdo s pascalem?



Potřebovala bych pomoci s naprogramováním těchto programů, jsem zoufalá a nevím jak na to.1) Program načte neprázdnou posloupnost celých nenulových čísel ukončenou číslem nula a zjistí, zda je tato posloupnost klesající (další číslo vždy menší než předchozí).2) Je dano 20 cisel. Sestavte program, podle ktereho se vytisknou dana cisla jednak v zadanem poradi a pak v opacnem poradi, vzdy po 5 cislech na jednom radku. Nakonec vytisknete vsechna ta cisla, ktera jsou mensi nez cislo A, ktere se precte jako prvni.3)SESTAVTE PROCEDURU PRO NALEZENI NEJVETSIHO CISLA V DANEM POLI O N CISLECH  A URCENI JEHO INDEXU. POUZIJTE TETO PROCEDURY PRO RESENI TETO ULOHY: JE DANO N CISEL (N<=100). VYTISKNETE JE V PORADI OD NEJVETSIHO DO NEJMENSIHO TAK ZE NEJPRVE NAJDETE NEJVETSI CISLO, ZE ZBYTKU OPET NEJVETSI, ATD. AZ DO POSLEDNIHO. PROVEDTE PRO TYTO SKUPINY:    -1,7,-8,9,-3,0,4;  0,2,5,-1,-3,-6,7,9,-2. Za jakoukoli pomoc předem děkuji. Zuzana Hanáková
No a s cim mas problem?
<p>pro nezáporná celá čísla můžete použít<em> remainder </em>operator <code>%</code>. přesný příklad:</p><pre><code>if ((a % 2) == 0) { iseven = true; } else { iseven = false; } </code></pre><p>to lze zjednodušit na jednu linii:</p><pre><code>iseven = (a % 2) == 0; </code></pre> <p>zjistil jsem, že david eppstein má <a href="http://www.ics.uci.edu/~eppstein/numth/frap.c">racionální aproximaci k danému reálnému číslu</a> c kód, který je přesně to, o co žádáte. jeho základem je teorie pokračujících zlomků a velmi rychlá a poměrně kompaktní.</p><p>použil jsem verze tohoto přizpůsobené pro konkrétní limity čitatele a jmenovatele.</p><pre><code>/* ** find rational approximation to given real number ** david eppstein / uc irvine / 8 aug 1993 ** ** with corrections from arno formella, may 2008 ** ** usage: a.out r d ** r is real number to approx ** d is the maximum denominator allowed ** ** based on the theory of continued fractions ** if x = a1 + 1/(a2 + 1/(a3 + 1/(a4 + ...))) ** then best approximation is found by truncating this series ** (with some adjustments in the last term). ** ** note the fraction can be recovered as the first column of the matrix ** ( a1 1 ) ( a2 1 ) ( a3 1 ) ... ** ( 1 0 ) ( 1 0 ) ( 1 0 ) ** instead of keeping the sequence of continued fraction terms, ** we just keep the last partial product of these matrices. */ #include &lt;stdio.h&gt; main(ac, av) int ac; char ** av; { double atof(); int atoi(); void exit(); long m[2][2]; double x, startx; long maxden; long ai; /* read command line arguments */ if (ac != 3) { fprintf(stderr, "usage: %s r d\n",av[0]); // af: argument missing exit(1); } startx = x = atof(av[1]); maxden = atoi(av[2]); /* initialize matrix */ m[0][0] = m[1][1] = 1; m[0][1] = m[1][0] = 0; /* loop finding terms until denom gets too big */ while (m[1][0] * ( ai = (long)x ) + m[1][1] &lt;= maxden) { long t; t = m[0][0] * ai + m[0][1]; m[0][1] = m[0][0]; m[0][0] = t; t = m[1][0] * ai + m[1][1]; m[1][1] = m[1][0]; m[1][0] = t; if(x==(double)ai) break; // af: division by zero x = 1/(x - (double) ai); if(x&gt;(double)0x7fffffff) break; // af: representation failure } /* now remaining x is between 0 and 1/ai */ /* approx as either 0 or 1/m where m is max that will fit in maxden */ /* first try zero */ printf("%ld/%ld, error = %e\n", m[0][0], m[1][0], startx - ((double) m[0][0] / (double) m[1][0])); /* now try other possibility */ ai = (maxden - m[1][1]) / m[1][0]; m[0][0] = m[0][0] * ai + m[0][1]; m[1][0] = m[1][0] * ai + m[1][1]; printf("%ld/%ld, error = %e\n", m[0][0], m[1][0], startx - ((double) m[0][0] / (double) m[1][0])); } </code></pre> <p>přiznávám, že jsem to nikdy předtím neudělal, takže došlo k trochu poškrábání hlavy. jednoduchá ukázková tabulka, která demonstruje:</p><pre><code>if exists (select * from sys.objects where object\_id = object\_id(n'[dbo].[mytable]') and type in (n'u')) drop table [dbo].[mytable] go create table dbo.mytable ( col1 int , col2 char(1) ) go insert dbo.mytable (col1, col2) values (1, 'a') insert dbo.mytable (col1, col2) values (1, 'b') insert dbo.mytable (col1, col2) values (1, 'c') insert dbo.mytable (col1, col2) values (2, 'a') insert dbo.mytable (col1, col2) values (2, 'b') insert dbo.mytable (col1, col2) values (2, 'c') insert dbo.mytable (col1, col2) values (3, 'a') insert dbo.mytable (col1, col2) values (3, 'b') insert dbo.mytable (col1, col2) values (3, 'c') </code></pre><p>pomocí parametru @sortstyle k rozlišení objednávek řazení se @sortstyle = 1 třídí podle <code>col1 asc, col2 desc</code> a @ sortstyle = 2 seřadit podle <code>col2 desc, col1 asc</code>.</p><pre><code>declare @sortstyle int set @sortstyle = 1 select col1 , col2 from dbo.mytable order by case when @sortstyle = 1 then col1 end asc, case when @sortstyle = 1 then col2 end desc, case when @sortstyle = 2 then col2 end desc, case when @sortstyle = 2 then col1 end asc set @sortstyle = 2 select col1 , col2 from dbo.mytable order by case when @sortstyle = 1 then col1 end asc, case when @sortstyle = 1 then col2 end desc, case when @sortstyle = 2 then col2 end desc, case when @sortstyle = 2 then col1 end asc </code></pre><p> <a href="https://dba.stackexchange.com/questions/4104/how-do-you-order-by-a-parameter/4111#4111">jak se objednáváte parametrem</a> pokrývá jednodušší případ třídění podle 1 sloupce.</p> <p>jedním ze způsobů je použití <code>cut</code>:</p><pre><code> command | cut -c1-8 </code></pre><p>tím získáte prvních 8 znaků z každého řádku výstupu. protože <code>cut</code> je součástí posixu, bude pravděpodobně na většině unices.</p> <p>chcete-li zkontrolovat nestandardní řazení ve sloupcích, můžete použít následující dotaz:</p><pre><code>select table\_schema, table\_name, column\_name, collation\_name from information\_schema.columns where collation\_name is not null order by table\_schema, table\_name, ordinal\_position; </code></pre><p>chcete-li najít řazení databáze, je třeba zadat dotaz <code>pg\_database</code>:</p><pre><code>select datname, datcollate from pg\_database; </code></pre><p>zde jsou relevantní stránky příručky postgresql:</p><ul> <li> <a href="http://www.postgresql.org/docs/current/static/infoschema-columns.html">http://www.postgresql.org/docs/current/static/infoschema-columns.html</a> </li> <li> <a href="http://www.postgresql.org/docs/current/static/infoschema-collations.html">http://www.postgresql.org/docs/current/static/infoschema-collations.html</a> </li> <li> <a href="http://www.postgresql.org/docs/current/static/catalog-pg-database.html">http://www.postgresql.org/docs/current/static/catalog-pg-database.html</a> </li> </ul> <p>tradičně je "seřadit podle" označeno pomocí šipek nahoru/dolů, které představují třídění vzestupně nebo sestupně. názvy sloupců by měly mít vyšší úroveň kontrastu než hodnoty, například odvážnější text nebo stínované pozadí.</p><p>osobně při obarvení střídavých řádků obvykle přecházím na světlejší než na tmavší, protože efekt se zvyšuje tím výrazněji, čím déle vaši uživatelé interagují s tabulkou.</p><p>zde je několik skvělých příkladů možností rozvržení tabulky: <a href="http://patterntap.com/tap/collection/tables">http://patterntap.com/tap/collection/tables</a> </p> Říkáte, že máte dostatek potíže jednu kostku, aby zobrazoval ... takže jsem si jistý, jestli máte jeden pro zobrazení nebo ne.


V podstatě ... dát svůj kód pro psaní kostku v jedné funkci, pak už jen volání funkce 100krát.



```
void DrawCube()
{
    //code to draw the cube
}

void DisplayCubes()
{
    for(int i = 0; i < 10; ++i)
    {   
         for(int j = 0; j < 10; ++j)
         {
             glPushMatrix();
             //alter these values depending on the size of your cubes.
             //This call makes sure that your cubes aren't drawn overtop of each other
             glTranslatef(i*5.0, j*5.0, 0);
             DrawCube();
             glPopMatrix();
         }
    }              
}

```

To je základní přehled o tom, jak byste mohli jít o to udělat. Pokud se chcete něco účinnější nahlédnout do display listy někdy Jakmile budete mít základy přišel :) Poradím ti - spočítej to. Pak to budeš vědět ty, i to tu budou moct vyhledat příští generace :-)


Já akorát vím, že když projdeš všechny lekce a nic neopakuješ, tak se dostaneš na lvl 11 <p>příkaz <code>merge</code> má složitou syntaxi a ještě složitější implementaci, ale v zásadě jde o spojení dvou tabulek, filtrování dolů na řádky, které je třeba změnit (vložit, aktualizovat nebo smazat), a poté provést požadované změny. vzhledem k těmto vzorovým údajům:</p><pre><code>declare @categoryitem as table ( categoryid integer not null, itemid integer not null, primary key (categoryid, itemid), unique (itemid, categoryid) ); declare @datasource as table ( categoryid integer not null, itemid integer not null primary key (categoryid, itemid) ); insert @categoryitem (categoryid, itemid) values (1, 1), (1, 2), (1, 3), (2, 1), (2, 3), (3, 5), (3, 6), (4, 5); insert @datasource (categoryid, itemid) values (2, 2); </code></pre><p><strong> cíl </strong></p><pre><code>╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 1 ║ 1 ║ ║ 2 ║ 1 ║ ║ 1 ║ 2 ║ ║ 1 ║ 3 ║ ║ 2 ║ 3 ║ ║ 3 ║ 5 ║ ║ 4 ║ 5 ║ ║ 3 ║ 6 ║ ╚════════════╩════════╝ </code></pre><p><strong> zdroj </strong></p><pre><code>╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 2 ║ 2 ║ ╚════════════╩════════╝ </code></pre><p>požadovaným výsledkem je nahrazení dat v cíli daty ze zdroje, ale pouze pro <code>categoryid = 2</code>. po výše uvedeném popisu <code>merge</code> bychom měli napsat dotaz, který spojuje zdroj a cíl pouze na klíče, a filtrovat řádky pouze v klauzulích <code>when</code>:</p><pre><code>merge into @categoryitem as target using @datasource as source on source.itemid = target.itemid and source.categoryid = target.categoryid when not matched by source and target.categoryid = 2 then delete when not matched by target and source.categoryid = 2 then insert (categoryid, itemid) values (categoryid, itemid) output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>to dává následující výsledky:</p><pre><code>╔═════════╦════════════╦════════╗ ║ $action ║ categoryid ║ itemid ║ ╠═════════╬════════════╬════════╣ ║ delete ║ 2 ║ 1 ║ ║ insert ║ 2 ║ 2 ║ ║ delete ║ 2 ║ 3 ║ ╚═════════╩════════════╩════════╝ ╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 1 ║ 1 ║ ║ 1 ║ 2 ║ ║ 1 ║ 3 ║ ║ 2 ║ 2 ║ ║ 3 ║ 5 ║ ║ 3 ║ 6 ║ ║ 4 ║ 5 ║ ╚════════════╩════════╝ </code></pre><p>realizační plán je: <img src="https://i.stack.imgur.com/fovhu.jpg" alt="merge plan"></p><p>všimněte si, že jsou obě tabulky plně naskenovány. můžeme to považovat za neefektivní, protože pouze řádky, kde <code>categoryid = 2</code> bude ovlivněno v cílové tabulce. zde přicházejí varování v books online. jeden chybný pokus o optimalizaci, aby se dotkl pouze nezbytných řádků v cíli, je:</p><pre><code>merge into @categoryitem as target using ( select categoryid, itemid from @datasource as ds where categoryid = 2 ) as source on source.itemid = target.itemid and target.categoryid = 2 when not matched by target then insert (categoryid, itemid) values (categoryid, itemid) when not matched by source then delete output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>logika v klauzuli <code>on</code> je použita jako součást spojení. v tomto případě je spojení úplným vnějším spojením (viz <a href="http://technet.microsoft.com/en-us/library/bb522522%28v=sql.105%29.aspx">tento záznam books online</a> proč). použití kontroly kategorie 2 na cílových řádcích jako součásti vnějšího spojení nakonec povede k odstranění řádků s jinou hodnotou (protože neodpovídají zdroji):</p><pre><code>╔═════════╦════════════╦════════╗ ║ $action ║ categoryid ║ itemid ║ ╠═════════╬════════════╬════════╣ ║ delete ║ 1 ║ 1 ║ ║ delete ║ 1 ║ 2 ║ ║ delete ║ 1 ║ 3 ║ ║ delete ║ 2 ║ 1 ║ ║ insert ║ 2 ║ 2 ║ ║ delete ║ 2 ║ 3 ║ ║ delete ║ 3 ║ 5 ║ ║ delete ║ 3 ║ 6 ║ ║ delete ║ 4 ║ 5 ║ ╚═════════╩════════════╩════════╝ ╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 2 ║ 2 ║ ╚════════════╩════════╝ </code></pre><p>kořenová příčina je ze stejného důvodu, proč se predikáty chovají v klauzuli vnější spojení <code>on</code> odlišně, než když jsou specifikovány v klauzuli <code>where</code>. syntaxe <code>merge</code> (a implementace spojení v závislosti na zadaných klauzulích) jen ztěžují vidět, že tomu tak je.</p><p> <a href="http://technet.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx">navádění v books online</a> (rozšířeno v položce <a href="http://technet.microsoft.com/en-us/library/cc879317%28v=sql.105%29.aspx">optimizing performance</a> ) nabízí navádění, které zajistí, že správná sémantika je vyjádřena pomocí syntaxe <code>merge</code>, aniž by uživatel nutně musel muset pochopit všechny podrobnosti implementace nebo zohlednit způsoby, kterými by optimalizátor mohl legitimně přeskupit věci z důvodů efektivnosti provádění.</p><p>dokumentace nabízí tři možné způsoby implementace časného filtrování:</p><p><strong> zadání podmínky filtrování v klauzuli <code>when</code> </strong> zaručuje správné výsledky, ale může znamenat, že více řádků je čteno a zpracováno ze zdroje a cíle tabulky, než je nezbytně nutné (viz první příklad).</p><p><strong> aktualizace prostřednictvím zobrazení </strong>, která obsahuje podmínku filtrování, také zaručuje správné výsledky (protože změněné řádky musí být přístupné pro aktualizaci prostřednictvím zobrazení), ale vyžaduje to vyhrazené zobrazení, které splňuje liché podmínky pro aktualizaci zobrazení.</p><p><strong> použití společného výrazu tabulky </strong> přináší podobné riziko při přidávání predikátů k klauzuli <code>on</code>, ale z poněkud odlišných důvodů. v mnoha případech to bude bezpečné, ale vyžaduje to odbornou analýzu prováděcího plánu, aby se to potvrdilo (a rozsáhlé praktické testování). například:</p><pre><code>with target as ( select * from @categoryitem where categoryid = 2 ) merge into target using ( select categoryid, itemid from @datasource where categoryid = 2 ) as source on source.itemid = target.itemid and source.categoryid = target.categoryid when not matched by target then insert (categoryid, itemid) values (categoryid, itemid) when not matched by source then delete output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>výsledkem jsou správné výsledky (neopakované) s optimálnějším plánem:</p><p><img src="https://i.stack.imgur.com/tazmk.jpg" alt="merge plan 2"></p><p>plán čte pouze řádky pro kategorii 2 z cílové tabulky. to může být důležitým hlediskem výkonu, pokud je cílová tabulka velká, ale je příliš snadné tuto chybu získat pomocí syntaxe <code>merge</code>.</p><p>někdy je snazší zapsat <code>merge</code> jako samostatné operace dml. tento přístup může dokonce <strong> vést lépe </strong> než jediný <code>merge</code>, což je skutečnost, která lidi často překvapuje.</p><pre><code>delete ci from @categoryitem as ci where ci.categoryid = 2 and not exists ( select 1 from @datasource as ds where ds.itemid = ci.itemid and ds.categoryid = ci.categoryid ); insert @categoryitem select ds.categoryid, ds.itemid from @datasource as ds where ds.categoryid = 2; </code></pre> <pre><code>import sys sys.exit() </code></pre><p>podrobnosti z dokumentace <a href="https://docs.python.org/2/library/constants.html#exit"><code>sys</code> module</a> :</p><blockquote> <p><code>sys.<strong>exit</strong>([<em>arg</em>])</code></p> <blockquote> <p>ukončete program python. to je realizováno zvýšením <a href="https://docs.python.org/2/library/exceptions.html#systemexit"><code>systemexit</code></a> výjimka, takže jsou vyčištěny akce čištění specifikované konečnými klauzulemi <a href="https://docs.python.org/2/reference/compound\_stmts.html#try"><code>try</code></a> příkazů a je možné zachytit pokus o odchod na vnější úrovni.</p> <p>volitelný argument<em> arg </em>může být celé číslo udávající stav výstupu (výchozí hodnota je nula) nebo jiný typ objektu. pokud se jedná o celé číslo, nula se považuje za „úspěšné ukončení&ldquo; a jakákoliv nenulová hodnota se pokládá za „abnormální ukončení&ldquo; skořápkami a podobně. většina systémů vyžaduje, aby se nacházela v rozsahu 0-127, a jinak nevytváří výsledky. některé systémy mají konvenci pro přiřazení specifických významů specifickým výstupním kódům, ale ty jsou obecně nedostatečně rozvinuté; unix programy obecně používají 2 pro chyby syntaxe příkazového řádku a 1 pro všechny ostatní druhy chyb. pokud je předán jiný typ objektu, žádný je ekvivalentní předávání nuly a jakýkoli jiný objekt je vytištěn do <a href="https://docs.python.org/2/library/sys.html#sys.stderr"><code>stderr</code></a> a výsledkem je výstupní kód 1. zejména <code>sys.exit("some error message")</code> je rychlý způsob ukončení programu, když je dojde k chybě.</p> <p>vzhledem k tomu, že <a href="https://docs.python.org/2/library/constants.html#exit"><code>exit()</code></a> nakonec „pouze&ldquo; vyvolá výjimku, bude proces ukončen pouze tehdy, když bude zavolán z hlavního vlákna a výjimka nebude zachycena.</p> </blockquote> </blockquote><p>všimněte si, že toto je cesta „nice&ldquo;. @ <a href="https://stackoverflow.com/questions/73663/terminating-a-python-script#76374">glyphtwistedmatrix</a> níže ukazuje, že pokud chcete 'hard exit', můžete použít os.\_exit (<em> errorcode </em>). například kód chyby pod okny), a to je určitě méně přátelské, protože neumožňuje tlumočníkovi provést žádné čištění před tím, než proces zemře.</p>