#1 Vlad
Docela dobrej nápad, to ukradnu.
Příspěvky odeslané z IP adresy 195.113.207.–
#1 Row
Pokud používáš verzi 8.4 a vyšší, můžeš použít funkci array_agg.
SELECT
sloupec1,
array_agg(sloupec2),
sloupec3
FROM
tabulka
GROUP BY
sloupec3;
Od verze 9.0 je další možností funkce string_agg, která ti dokonce dává možnost vložit znak, pomocí nichž budeš hodnoty rozdělovat...
string_agg(<název_sloupce>, <znak_pro_určení_hodnot>)
#1 evam88
C++ řešení.
#include <vector>
#include <iostream>
#include <algorithm>
int main(int argc, char* argv[])
{
std::vector<int> numbers;
int number;
int count = 0;
int sum = 0;
do {
std::cout << "Insert a number: ";
std::cin >> number;
if (number == 0) {
break;
}
numbers.push_back(number);
sum += number;
++count;
} while (true);
if (count == 0) {
std::cout << "The values could not be calculated. No input." << std::endl;
return -1;
}
auto minMax = std::minmax_element(std::begin(numbers), std::end(numbers));
std::cout << "Min: " << *minMax.first << std::endl;
std::cout << "Max: " << *minMax.second << std::endl;
std::cout << "Median: " << static_cast<double>(sum) / count << std::endl;
}
#10 vesi
Pod čím kompiluješ? Ve VS2013 mi to s tímto zápisem C2664 vůbec nehází. (Oddělej referenci u funkce log se třemi parametry.)
#ifndef ABSTRACT_LOGGER_H
#define ABSTRACT_LOGGER_H
#include <string>
namespace Palo {
namespace SpreadsheetFuncs {
class AbstractLogger {
public:
enum Type {
LOG_ERROR, LOG_WARNING, LOG_INFO
};
virtual void log(Type t, const std::string& msg) throw () = 0;
};
}
}
#endif
////////////////////////////////////
#ifndef XLL_CELL_LOGGER_H
#define XLL_CELL_LOGGER_H
#include <fstream>
//includuji to jinak, to si u sebe změň
#include "AbstractLogger.h"
namespace Palo {
namespace XLL {
class XLLCellLogger : public Palo::SpreadsheetFuncs::AbstractLogger {
public:
XLLCellLogger();
~XLLCellLogger();
static XLLCellLogger& getInstance() {
static XLLCellLogger pl;
return pl;
}
void log(Type t, std::string msg, bool force_logging) throw();
virtual void log(Type t, const std::string& msg) throw() {
log(t, msg, false);
};
private:
std::ofstream m_log;
};
}
}
#endif
Nicméně to řve kvůli volání smazaného copy konstruktoru třídy std::ofstream (jak jsem již psal ve 2. příspěvku). Použij na logování něco jiného.
#3 vesi
Jde o to, že když definuješ virtual / pure virtual metodu z rodiče, tak je třeba, aby ta tvá definice měla stejný přepis (stejnou deklaraci) jako funkce rodičovská.
Původní metoda používala předávání stringu hodnotou, a na to jsi měl tu svou funkci log, oni to změnili na předávání stringu pomocí konstantní reference a kvůli tomu musíš upravit tu svou funkci v XLLCellLogger, aby ten přepis souhlasil...
Takže prostě zkopíruješ deklaraci dané metody, kterou implementuješ. Zmeň si v té své třídě XLLCellLogger metodu na
void log( Type t, std::string& msg ) throw()
To je jako když v C# děláš
public override bool Equals(object o)
Ačkoliv toto většinou implementuješ pro konkrétní objekt a chceš proovnávat jen dva objekty stejného typu, tak musíš mít v deklaraci jako parametr object a ne třídu, pro niž danou metodu děláš, a přetypování object si udělat až uvnitř té funkce, protože rodičovská metoda Equals má v parametru právě ten object, a to musí souhlasit.
#3 Rodgers23
Jak píše lukas, bude to tím ORem namísto ANDu.
Pro upřesnění, logické operátory fungují následovně:
OR: Pokud platí alespoň jedna z podmínek nebo více podmínek dohromady, pak se příkaz provede. V tvém případě vybíráš psy ze Zlína, jedna podmínka je pes, druhá je Zlín. Když se v databázi najde pes, už jedna podmínka platí a vypíšou se ti proto všechny řádky, které obsahují psa.
Opačně, když se v tabulce nachází řádek, obsahující položku Zlín, tak je jedna podmínka také splněná a vypíšou se ti všechna zvířata nacházející se ve Zlíně.
A do třetice, pokud budou splněny obě podmínky, tj. zvíře bude pes a ze Zlína, podmínka bude splněná rovněž a dojde k vypsání řádku taktéž.
AND: Pokud platí obě podmínky zároveň, teprve tehdy dojde ke splnění podmínky a může dojít k vypsání konkrétního řádku. Na stejném příkladě, hledáš psy a hledáš Zlín, pokud se najde řádek, který obsahuje psa, splní se jedna podmínka, ale pokud daný řádek nebude obsahovat Zlín, tak se celá podmínka zneguje (protože aby byl AND platný, je potřeba, aby byly platné všechny podmínky. A vice versa, najde se řádek, kde je sice Zlín, ale není tam pes, tak se také podmínka vyhodnotí jako neplatná, protože nejsou splněny všechny její části.
Naopak pokud se najde řádek, kde je druh pes a město Zlín, tak se obě části splní, podmínka se vyhodnotí jako splněná a řádek se vypíše.
#7 oxidián
Tak v tom případě tomu normálně předej ten pointer, namísto &t1 jenom t1. Když tomu předáváš &t1, tak vlastně předáváš adresu na ukazatel, což překladač interpretuje jako ukazatel na ukazatel.
Za modifikací přístupových operátorů k atributům daných struktur si stojím.
#1 xxx7691
S polem charů se blbě pracuje při porovnání. Udělal bych si ještě ješte jednu strukturu, třeba ip adresa, obsahující 4 short inty (IPv4 má čtyři části), reprezentující jednotlivé sekce dané IP adresy a porovnávání pak prováděl na těchto čtyřech short integerech.
#1 Toom
Vytvořit si int pole o velikosti 'z' - 'a' a inicializovat ho na nulu. Projet celý řetězec for/while loopem, na každém indexu se podívat, co to je za char a na základě daného charu inkrementovat konkrétní index o jedna.
Ve finále projet původní int pole for loopem, podívat se na počet na daném indexu a když tam bude počet větší než jedna, daný index vypsat s tím, jaké písmeno se tam nachází.
#3 evryl
Vždycky to můžeš hodit do tabulky a tabulku na střed vycentrovat.
A další z možností je nedávat Username a Password jako samotné elementy, ale tyto hodnoty nastavit jako placeholder u inputů. Tak jsem to udělal na jednom webu třeba já:
#8 oxidián
Pokud chceš integer, pak modifikovaná funkce může vypadat takhle:
int ipow2(int base, int exp)
{
double result = 1;
int n = 0;
if (!exp) // exponent nula -> výsledek 1
{
return 1;
}
else if (exp < 0) // pro int nejde, vrací se nula
{
return 0;
}
else
{
for (; n < exp; n++)
{
result *= base;
}
return result;
}
}
#3 oxidián
Je taky možný celou funkci prostě předělat, aby fungovala. (Navíc jsem změnil návratový typ na double, aby šly vyjádřit i záporné mocniny.)
double ipow2(int base, int exp)
{
double result = 1;
int n = 0;
if (!exp) // exponent nula -> výsledek 1
{
return result;
}
else if (exp < 0) // exponent záporný
{
exp *= -1;
for (; n < exp; n++)
{
result *= base;
}
return (1 / result);
}
else
{
for (; n < exp; n++)
{
result *= base;
}
return result;
}
}
EDIT: Pochopitelně nevím, jak je na tom takhle funkce s výkonem, jediná optimalizace, která mě napadá, je hodit to do switche, namísto použití if-else formy. Netuším ovšem, zda se bitovými operátory něco šetří, neumím s nimi.
#1 oxidián
Podívej se, co jednotlivé bitové operátory dělají, třeba tady. To by ti mělo pomoct k porozumění funkce a proč ti to padá :).
#3 Jana
Corel do rastrových formátů vyexportuje to, co tam dodal uživatel, ne to, co tam dodá program sám. Pokud máš kreslící plochu třeba 30x40 cm a umístíš do ní elementy tak, že nesahají úplně k okrajům, ale chceš, ale výsledný rastrový soubor, třeba tebou zmíněný .jpg, měl velikost 30x40 cm, je třeba do dokumentu úplně dolů pod všechny vrstvy vložit vrstvu novou, obdélník s barvou pozadí, kterou chceš jako pozadí mít (u papíru asi pozadí bílé) a s rozměry celé kreslící plochy, tj. 30x40 cm.
Nicméně vzhledem k tomu, že máš dokument o tebou zmíněné velikosti A3, předpokládám, že ho budeš chtít tisknout, pak doporučuji spíš ukládat třeba do .pdf než do formátu rastrové grafiky.
Jak jsi změnila barvu na černou, tak to změnilo pouze podkladovou barvu programově, třeba se někomu tak lépe pracuje, v noci černá tolik nezatěžuje oči, nicméně to stále není něco, co tam dodal uživatel a proto Corel daný prvek při exportu ignoruje.
#1 Kenvelo
Hledáš ten tabulátorový posun, nebo takovou tu čáru, co ti zvýrazní scope?
Pokud řešíš tabulátorový posun, pak zde, pokud řešíš zobrazování čáry pro zvýraznění scopu, pak třeba tento doplněk.
#1 Anonym
Softwarový inženýr je člověk, který je zodpovědný za analýzu potřeb cílového zákazníka a návrh řešení, který by zákazníkovi vyhovoval, tj. potřeby splňoval. I když jsou softwaroví inženýři lidé, kteří většinou umějí programovat, nejsou oni těmi, kteří píšou kód, ale jsou zaměření na vývoj daného softwaru ze širší perspektivy, aby vyvíjený software dělal přesně to, co dělat má.
Ale především, je to člověk, který má inženýrský titul v daném odvětví a zkušenosti s vývojem softwaru dle (vhodných) inženýrských principů.
Programátoři jsou oproti tomu lidé, kteří jsou většinou zodpovědní pouze za samotné kódování. Pokud se pracuje na větším projektu, softwarový inženýři a architekti zpracují, co se bude dělat, a pak jednotlivých vývojářům nebo programátorům zadají konkrétní úlohy.
Vývojář je kategorie, která spadá mezi dvě kategorie výše zmíněné. Bývají to zpravidla lidé, kteří již programují delší dobu, znají proto nejen programování, nýbrž také (základní) principy procesu softwarového vývoje.
Pokud bys měl tedy porovnat lidi, kteří již v praxi něco zažili, pak SW inženýr bude lepší než vývojář a ten bude lepší než programátor. Softwarovým inženýrem se ale staneš teprve poté, co absolvuješ vysokou školu s daným zaměřením, oproti zbylým dvěma kategoriím, pro něž ti postačí tvé pouhé vědomosti.
#3 Test556586
Pokud máš proměnnou uvnitř třídy, tak se k ní dá v Javě samozřejmě přistoupit, ale buď ji nastavíš jako public a potom bys k ní přistupoval
tvojeTrida.promenna = 10;
anebo budeš mít proměnnou nastavenou jako private a pak si musíš k takové proměnné vytvořit getter a setter, jak už psal NotBeginner. To, co ty chceš udělat, je nesmysl, ale pokud bys měl danou proměnnou nastavenou jako public, pak by část tvého kódu mohla vypadat třeba následovně:
public void run()
{
Vlakno1 noveVlakno = new Vlakno1();
noveVlakno.premenna = noveVlakno.premenna + 5;
}
Pokud bys nechtěl ve funkci run vytvářet nové vlákno, můžeš ho dané funkci předávat jako parametr a pak danou funkci volat s tím parametrem.
Nicméně ti doporučím naučit se základy objektového programování, máš tam docela mezery.
#1 Ondra
Budeš mít dva objekty, film a herec, jak píšeš. Skoro všechny proměnné jsou normální typy, akorát ID_herců v objektu film bude asi nejjednodušší implementovat jako vector ukazatelů na objekty herec (je lepší to udělat jako ukazatel, protože pak když jeden herec bude hrát ve více filmech můžeš změnit pouze parametry daného objektu herec a aktualizuje se ti to ve všech filmech).
A je opravdu nutný to otáčet? Není lepší si přes sizeof zjistit velikost pole, tu následně použít při druhém tisku akorát tisknout od nejvyššího prvku po nejmenší, tedy
int posl = sizeof(pole) / sizeof(char)
for(int i = posl-1; posl >=0; posl--)
cout << pole[i] << "; ";
? Ušetříš tím operaci.
Nemam, jak ho mam prilinkovat?
#15 Doomista
Allegro není engine ale grafická knihovna a nevím o tom, že by ta knihovna měla problémy se stabilitou. Leda, že bys měl nejnovější betu, která je určená k testování novinek do novýho releasu.
#12 III
Jinak s ostatním bych asi souhlasil, záleží kolik máš zkušeností. Pokud moc ne tak bych asi spíš šáhl po Unity, pokud si na tom dobře tak můžeš zkusit i něco "těžšího". Konec konců Tech 4 engine už je taky uvolněnej tak můžeš zkusit třeba i ten. :)
scanf má jako návratovou hodnotu počet ÚSPĚŠNĚ přečtených údajů. V když načítáš např. tři takhle:
scanf("%d %d %d", &a, &b, &c);
Tak ti scanf může vrátit číslo 0 - 3 podle toho kolik si jich přečetl. Podle toho se pak můžeš zařídit...
Používá se tohle:
exit(cislo);
Pomoct myslíš jako ti to vypracovat nebo pomoct jako že řekneš kde si uvízl a my tě popošoupneme dál?
To yaqwsx : Přesně jak napsal Tom. Dodal bych jen, může zkusit oboje ale neřekl bych, že se mu něco z toho podaří. Každopádně držím palce. Třeba ho to přejde jako většinu z nás. :-D
To delphak : Teda prvně sem se až tak nepobavil ale těma 3GB si mě definitivně dostal do kolen. :-D Má to vypadat jako windows 3 a myslíš si že to bude 3GB po instalaci??? Fakt ti tu ty lidi radí dobře. Sou to lidi který programování rozumí a opravdu už napsali hodně řádků kódu. I když to bude trochu sebe chvála tak taky lecos umím a díky tomu sem pochopil že psát si OS jen proto abych nějakej napsal je prostě k ničemu. A jak vidím tak v tvým případě kdy jak sám říkáš nemáš ani pořádný základy je to až moc velkej projekt. Páč to co ty představuješ jako driver co řekne procesoru co chceš sem identifikoval snad správně jako boot loader. Když už bys teda nějak udělal ten, tak musíš pokračovat s nějakým jádrem OS (kernel) a pak ovladače a pak už se dostaneš na svoje tlačítka... Ale začít s interfacem když nic nemáš prostě nejde nebo teda de ale rozhodně nikdy OS nenapíšeš.
To "a" a "b" si inicializuj před tím než počítáč pole3. Protože takhle si někde mimo pole "a" i "b".
Tj.
a = pole1; b = pole2;
printf ("\nMatice C je: \n");
for (k = 0; k < o; k++)
{
*c += (*a++) * (*b+sloupec_b);
c++;
printf ("%d ", *(pole3+k));
}
To zeminem.cz@seznam.cz : Možná to vyzní tvrdě ale co vlastně umíš ty? Nechci tě urazit nebo se tě dotnout ale příde mi jako že scháníš lidi, kteří za tebe všechno udělají a ty to pak budeš jen spravovat a případně pokud to bude hodně kvalitní tak se snažit na tom i něco trhnout.
<> - alt + <>
[ ] - alt + F/G
{ } - alt + B/N
Zdravím,
v C jsem vcelku začátečník a mám následující problém s ukazateli. Jak mám zajistit aby když přiřadím do proměné "a" hodnotu 12 abych s ní mohl pracovat i ve funkci main? vím že tam mám něco blbě ale nevím co.
void test(int *a)
{
a = (int*)malloc(sizeof(int));
a = 12;
}
int main()
{
int *a;
test(&a);
printf("%d", a);
return 0;
}
Nahradit by se to dalo třeba takhle:
int i(int u)
{
int L=0;
do {
u = u / 10;
L++;
}while (u !=0);
return L;
}
Jak už psal KIIV fce vrací počet cifer čísla v daný soustavě.
Tohle je psaný pro desítkovou tj. pro číslo 123 to vrátí číslo 3.
SELECT sloupec_typu_timestamp::date,
sloupec_typu_timestamp::time
FROM foo;