ButtonName.equals(word1)
ButtonName.equals(word1)
Matěje ignoruj.
Pravděpodobně máš v systému man, info a howtos. Já jsem tak začínal a na hooodně dlouho jsem měl co studovat. Pak samozřejmě TLDP.
Tu knihu od Jelínka mám - vyhozené peníze. Jestli si ji chceš přečíst, tak si ji jen někde půjč. Ke kernelu a lowlevel věcem vede poměrně dlouhá cesta.
null to normálně bere, ale nechápu proč bys ho tam cpal
if (plocha == null) {
plocha = new JLabel(new ImageIcon(obr)); // on by teda ten label asi uz mel davno existovat a byt nekde umisteny, ale budiz...
} else {
plocha.setIcon(new ImageIcon(obr));
}
Větší mapu poskládáš z menších kousků. Ta funkce zůstane tak, jak je.
Takže jsi chtěl získat a zakódovat obrazová data toho obrázku. Stačilo to napsat rovnou ;-)
Ve skriptu, ve kterém s tím obrázkem pracuješ, není důvod ten identifikátor kódovat. A ten identifikátor je platný jen po dobu běhu toho skriptu, jestli ho chceš předávat někam dál k pozdějšímu použití, tak je to k ničemu.
Můžeš zkusit imagettfbbox, nebo imagettftext. Jinak mě žádná funkce PHP nenapadá.
Možná budeš muset obsah toho fontu sám zkontrolovat. Není to až tak složité, zajímá tě asi jen tabulka cmap.
./upravit_stranku.php?stranka=<?php echo $idecko_stranky; ?>
$idecko_stranky = @$_GET["id"]
public class Neco {
public Neco() {
hrcprc();
}
public void hrcprc() {
//proc bys to psal dvakrat?
}
}
#define IDM_EXIT /* bez hodnoty? */
První je vždy tak jak je
int main()
Druhá používá Microsoftí rozšíření umožňující jedním kódem napsat zároveň Unicode a SBCS/MBCS verzi programu. Pro Unicode build bude výsledek
int wmain(int argc, wchar_t* argv[])
a jinak
int main(int argc, char* argv[])
Můžeš se podívat do hlavičkových souborů na definice. Myslím, že je to všechno v tchar.h.
Pokud to hlásí, že je zaneprázdněný, tak možná opravdu bude zaneprázdněný. Ukaž kód.
Zdrojáky FreeDOSu jsou dostupné - proč to disassembluješ?
Ty FS jsou zdokumentované - proč je studuješ z kódu?
A ještě teda asi -F a -x (nebo -w).
Pravděpodobně to půjde i jednodušeji, ale třeba takto:
grep ^[[:upper:]] slov.txt >velka
grep ^[[:lower:]] slov.txt >mala
grep -i -v -f mala velka
Tady je několik řešení
http://stackoverflow.com/questions/286727/java-keylistener-for-jframe-is-being-unresponsive
Podle initComponents() tipuju, že na tom frame máš nějaké komponenty a stisky kláves jdou některé z nich. Jinak mě nic nenapadá.
Nevím, jak je implementovaný ten objekt Lines, ale pokud není úplně dementní, tak zbytečné zpomalení navíc asi udělá hlavně překreslování toho Mema. To by snad mělo jít potlačit přidáním Lines.BeginUpdate a EndUpdate kolem toho cyklu.
A když se na ten php soubor podíváš v prohlížeči sám, tak vidíš co?
PHP kód se uzavírá mezi tagy <?php ... ?> a hlavičky se posílají před obsahem.
Nevím, proč to načítá mezeru, ale když ten soubor celý načítáš 2x, tak by asi bylo dobré se mezitím přesunout zase na začátek - funkce rewind.
Mimo to tam ten počet řádků zjišťovat nepotřebuješ, to i++ máš v hlavičcce i těle foru a ten test na konec řádku by asi měl být dokud není konec řádku ani konec souboru.
Cyklus se opakuje, pokud je podmínka splněna. Ty ho chceš opakovat dokud NEJSI na konci řetězce.
A samozřejmě bys to měl napsat tak, aby to správně fungovalo vždycky. I pro prázdný řetězec.
z nejakeho kouzlneho duvodu mi cyklus s podminkou na konci probehne pouze 1x i když podmínk nemuže splnit
do
{
}
while (text[n]=='\0');
Cyklus s podmínkou na konci proběhne vždy alespoň jednou, protože se ta podmínka testuje až na konci... A tu podmínku máš špatně. Celé to máš jaksi nešťastné.
Prostě to jen zobrazuje běh času mezi nějakým počátečním a koncovým časem. Není co nastavovat.
Někde jsi to našel a nerozumíš ani řádku, viď? Najdi si něco, co je přímo na upload.
Podobná věc se tady řešila nedávno. Kdyby něco nebylo jasné, tak se klidně zeptej znova.
Píše to, že byl očekáván ";" a místo toho byl nalezen "case".
Před tím case asi taky máš příkaz, který není ukončený středníkem.
A netvrď, že se ti to jen nespustí, když se to evidentně ani nezkompiluje.
SDL, BEZ DEBAT
char *neco = "aby sis nezvykl to prasit a jednou ti tam nevlezlo prekvapeni od uzivatele... %p%p%s%s%n\n";
printf(neco);
sprintf(buffer, neco);
Na WinAPI se nikdo neptal.
#1 Didika
Šetři čas a nervy a na C++/CLI se vykašli. Jestli chceš používat .NET, tak přejdi na C#.
char c = 'A';
label1->Text = gcnew String(c, 1);
label2->Text = Char::ToString(c);
label3->Text = String::Concat(label1->Text, label2->Text);
Myslím si, že je to backspace. A místo vkládání přímo toho znaku můžeš použít Chr(8) nebo vbKeyBack.
Kde to musíš podmínkovat?
Funkcí ioctlsocket můžeš na tom socketu zapnout neblokující režim a po connect (který se tedy neblokne a nebude čekat na výsledek) pak funkcí select otestovat výsledek pokusu o připojení. Můžeš si tak nastavit vlastní timeout, ale hlavně můžeš bez zdržování udělat několik connectů a pak jen čekat na výsledky.
A chybí ti tam zavření socketu a na zjištění délky řetezce je funkce strlen a v C++ je taková pěkná třídička string.
bool opakovat;
do
{
to_co_tam_mas;
opakovat = chcete_zadat_dalsi();
} while (opakovat);
Jasně...
To bylo tak rychle, že jsi ani nestihl ten příklad :)
DI spočívá jen v tom, že věci, na kterých je nějaký objekt závislý, se dodávají zvenku, aby je ten dotyčný objekt nemusel řešit a snadno se nahrazovaly.
Volba implementace a řešení složitějších závislostí apod. je přímo související, ale jiná věc.
for n in range(2,11):
x = math.cos(n) - math.cos(n-1)
print x
Nevím o tom, že by heredoc přidával uvozovky. Natož ještě, že by na každý konec přidával jinou. Co myslíš tím generováním a jak výsledný text prohlížíš?
Tak?
Regex.Replace(text, @"\[SMAZAT\].*\[/SMAZAT\]", "", RegexOptions.Singleline)
Není v tom varování i jeho kód a zmínka o _CRT_SECURE_NO_WARNINGS ?
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
Doporučil bych ten define a rovnou pro celý projekt. Ve vlastnostech projektu přidej do "Preprocessor / Preprocessor Definitions" hodnotu "_CRT_SECURE_NO_WARNINGS".
O tom přece mluvím. Ty máš pravděpodobně ze jména zjistit číslo a pro to číslo pak zjistit známky. A nespoléhat na to, že jméno a známky budou na stejném řádku, i kdyby byly.
Martin 1
David 2
Kent 3
1 123
2 445
3 555
Martin 1
David 2
Kent 3
1 123
3 555
Martin 1
Kent 3
David 2
1 123
2 445
3 555
Martin 1
Kent 3
David 2
2 445
3 555
1 123
Někde v tom chybovém výpisu nejspíš bude vidět i to, že se vůbec nepodařilo připojit.
http://hosting.wedos.com/cs/webhosting/mysql.html
databáze přístupná pouze z webhostingu, z bezpečnostních důvodů se k ní nelze připojovat zvenku (nelze ani individuálně, dočasně či za příplatek, nelze to ani z virtuálních či dedikovaných serverů u nás)
Na co tam pak je to číslo a proč ho testuješ? Obávám se, že po odevzdání a ohodnocení budeš nemile překvapený.
načteš jeden řádek ze seznamu a jeden ze známek a porovnáváš je. co když budou ty záznamy v jiném pořadí?
co když v seznamu bude méně záznamu? budeš porovnávat nenačtenou hodnotu.
co když v něm bude více záznamů? nikdy ten poslední nenačteš a zacyklí se ti to.
pokaždé vypisuješ, že jméno je nebo není v seznamu. jak to víš, když jsi ho ještě neprošel celý?
hovno ide :) kdyby byl problém jen v tom returnu, tak bych nic nepsal a čekal, že si to zkusíš spustit a všimneš si toho sám.
Vždyť ti to ani nefunguje. A zkus si představit (nebo přidat výpisy), jak ten program probíhá, máš tam nesmysly.
Jednoduše najdi to jméno a pak známky.
{
FILE *fzoznam, *fznamky;
char hladanemeno[100], meno[100], znamky[100];
int hladanecislo = -1, cislo, pocetznamok = 0, sucetznamok = 0;
printf("zadaj meno: ");
scanf("%s", hladanemeno);
fzoznam = fopen("zoznam.txt", "r");
while (fscanf(fzoznam, "%s %d", meno, &cislo) == 2)
{
if (strcmp(meno, hladanemeno) == 0)
{
hladanecislo = cislo;
break;
}
}
fclose(fzoznam);
if (hladanecislo == -1)
{
printf("meno {%s} nie je v zozname\n", hladanemeno);
return EXIT_FAILURE;
}
fznamky = fopen("znamky.txt", "r");
while (fscanf(fznamky, "%d %s", &cislo, znamky) == 2)
{
if (cislo == hladanecislo)
{
pocetznamok = strlen(znamky);
for (int i = 0; i < pocetznamok; i++)
{
char znamka[2] = { znamky[i], '\0' };
sucetznamok += atoi(znamka);
}
break;
}
}
fclose(fznamky);
if (pocetznamok == 0)
{
printf("pre meno {%s} nie je zadana zadna znamka\n", hladanemeno);
return EXIT_FAILURE;
}
printf("priemer znamok je %.2f\n", (double)sucetznamok / pocetznamok);
return EXIT_SUCCESS;
}
+ ošetření chyb
Pokud se ti nezobrazuje Java konzole, tak ji v Java Control Panelu (normálně v ovládacích panelech, nebo javacpl ve složce s JRE) zapni. Pravděpodobně v ní pak uvidíš výpis nějakých vyjímek.
V Inject alokuješ jen místo pro řetězec s cestou k dllce. Pak v cílovém procesu spustíš LoadLibrary a jako parametr dáš ten řetězec. Uvolněním paměti pro ten řetězec samozřejmě dllku neunloadneš. Na to zase musíš v cílovém procesu zavolat FreeLibrary s handlem té dllky. A není důvod, aby funkce Inject byla v samostatné dllce.
Takže máš dllku injectnutou v požadovaném procesu a v něm chceš nainstalovat hook. Přes SetWindowsHookEx ale instaluješ hook do všech procesů (a pravděpodobně se ve všech zase provede dll attach...).
Hook se spouští v tom hooknutém procesu (SetWindowsHookEx injectne tu dllku, takže samostatný Inject ani nepotřebuješ). Ve své aplikaci nezpracuješ nic (pokud jí teda ta data z hooku nebudeš sám nějak přeposílat, což bude kurevsky pomalé). Ten hook sice (snad ještě pořád) může být přímo v tom exáči (protože mezi dll a exe prakticky není rozdíl), ale i tak bude natažený do toho cílového procesu a v něm poběží.
Jinak nevím, proč se ti ten hook nespouští. Spíš si myslím, že jen nevidíš, že se spouští, nebo něco hodí chybu.
To nevím. Nemáš tam něco jinak? Třeba to >= 2 ?
A tykej...
Potřebuješ nějaký konkrétní způsob řešení, nebo stačí, když to bude fungovat?
String[] pole1 = { "slon", "kočka", "pes", "prase", "mamut" };
String[] pole2 = { "chodí", "žere", "prdí", "vylučuje" };
String[] pole3 = { "olovo", "trávu", "oves", "seno" };
for (String w1: pole1) {
for (String w2: pole2) {
for (String w3: pole3) {
System.out.println(w1 + " " + w2 + " " + w3);
}
}
}
for (token_b...
{
strcpy(working_buffer, buffer);
for (token_c...
{
if (!strcmp(token_b, token_c))
continue;
int shoda = 0;
for (int i = 2/*0*/; token_b[i] && token_c[i] && token_b[i] == token_c[i]; i++)
{
shoda = i;
}
if (shoda >= 2)
{
printf("{%s}{%s}{%d}\n", token_b, token_c, shoda + 1);
}
}
}
{A:bxc}{A:bxzd}{4}
{A:yc}{A:yzd}{3}
{A:bxzd}{A:bxc}{4}
{A:yzd}{A:yc}{3}
Já nevím, ty jsi psal o nějakém N
To "do N" bude další cyklus. Nevím, jestli to bude dělat přesně to, co chceš, ale zhruba takhle:
int N = ?;
for (token_b...
{
for (token_c...
{
int shoda = 0;
for (int i = 2/*0*/; i < N-1 && token_b[i] && token_c[i] && token_b[i] == token_c[i]; i++)
{
shoda = i;
}
if (shoda > 2)
{
printf("{%s}{%s}{%d}\n", token_b, token_c, shoda);
}
}
}
Když už ten text umazáváš, tak stačí hlídat, jestli jsi smazal všechno. A při tom přidávání si můžeš pamatovat poslední prvek a nemusíš procházet celý seznam.
function Ukol(A: String; B: Char): UkSeznam;
var
p: integer;
tok: string;
prvni, posledni, pom: UkSeznam;
begin
prvni := nil;
while length(a) > 0 do begin
p := pos(b, a);
if p = 0 then p := length(a) + 1;
tok := copy(a, 1, p - 1);
delete(a, 1, p);
new(pom);
pom^.data := tok;
pom^.dalsi := nil;
if prvni = nil then prvni := pom
else posledni^.dalsi := pom;
posledni := pom;
end;
Ukol := prvni;
end;
for (a;b;c) { d; } funguje jako a; while (b) { d; c; }. Výhoda je v tom, že to a,b,c máš pohromadě.
Ano, ukazatel jde indexovat jako pole. On vlastně mezi polem a ukazatelem není rozdíl (teda někdy je, a docela zásadní) a proto ti to kopírování funguje.
A ono je to vlastně celkem jedno, podmínky si můžeš upravit.
void fce (char *input)
{
int size = strlen(input)+1;
char *token, *next_token;
char working_input[size];
strcpy(working_input, input);
for (token = strtok_r(working_input, " ", &next_token); token; token = strtok_r(NULL, " ", &next_token))
{
if (islower(token[2]))
{
char *token_a, *next_token_a;
char current_input[size];
int counter = 0;
strcpy(current_input, input);
for (token_a = strtok_r(current_input, " ", &next_token_a); token_a && counter < 2; token_a = strtok_r(NULL, " ", &next_token_a))
{
if (token_a[2] == token[2])
counter++;
}
if (counter > 1)
printf("%s\n", token);
}
}
}
Můžeš to zadání upřesnit? Proč bude výsledek S:aS a S:a? Protože obě slova mají na třetí pozici a, někde ve slově mají a, začínají stejně, obsahují stejné znaky, ... ? Z popisu v kombinaci s tím kódem to nechápu.
i: integer;
c: char;
i := ord(c);
c := chr(i);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Image image = (Image)clipboard.getData(DataFlavor.imageFlavor);
On je slušnej. Ty konečně napiš s čím konkrétně si nevíš rady.
Mám zmatek v tom, jak to má fungovat, ale každopádně se mi nezdá, že bys chtěl testovat, jestli se čtverec srazil sám se sebou.
float pos_x = PocetNepratel[i].x; // <-- i
float pos_y = PocetNepratel[i].y;
if(( PocetNepratel[i].x > pos_x - 20) && // <-- i
No, ono to vlastně funguje správně. Problém by byl, kdyby to nebyly čtverce (u každé souřadnice počítáš s šířkou i výškou), nebo byly různě velké.
V každém průběhu nastavíš colision na nějakou hodnotu, takže nakonec tam máš tu poslední. Pravděpodobně chceš jen otestovat jestli vůbec k nějaké kolizi došlo (nastavovat jen true) a zároveň je ti jedno s čím (není potřeba testovat dál, break). Takže takhle:
colision = false;
for (...)
{
if (...)
{
colision = true;
break;
}
}
A samotný test kolize máš taky špatně, nakresli si ty čtverce na papír.
Jak se ti taková krávovina povedla, když jsem ti řešení už napsal?
char number = matrix[x_coordinate][y_coordinate];
char help[] = { number, 0 };
int i = atoi(help);
int j = number - '0';
Aha, to jsi tam asi měl a to házelo ten warning. Takže matrix je char[X][5].
Tak funkce bude takhle
void funct (char matrix[X][5], int a, int b);
void funct (char matrix[][5], int a, int b);
Podle předchozích dotazů předpokládám, že matrix je pole ukazatelů (resp. dvourozměrné pole v obou rozměrech dynamicky alokované, nebo jak to popsat). Pak to bude třeba takhle:
void funct (char *matrix[], int a, int b);
//void funct (char **matrix, int a, int b);
Musíš dodržet adresářovou strukturu a kompilovat to z místa (to asi není úplně nutné, ale je to jednodušší), kde je všechno viditelné.
c:\lukec\test1>dir /b /s *.java
c:\lukec\test1\beings\Animal.java
c:\lukec\test1\objects\Main.java
c:\lukec\test1>javac objects/Main.java
c:\lukec\test1>dir /b /s *.class
c:\lukec\test1\beings\Animal.class
c:\lukec\test1\objects\Main2.class
c:\lukec\test1>java objects/Main2
Ja jsem pes a delam haf haf
Ja jsem kocka a delam mnaaaauuu
Zbytečně si to komplikuješ, zkus nějaké IDE. V tom článku to vypadá, že používá NetBeans.
Mně se to takhle špatně čte, nevidím chybu. A nevím, co tam máš teď. Toto mi funguje (na linuxu)
void sprav(char *proglist[])
{
int i, j, pocet = 0;
for (i = 0; proglist[i]; i++)
pocet++;
if (pocet < 1)
error(1, 0, "pocet %d", pocet);
int pipecnt = pocet - 1;
int pipes[pipecnt * 2];
for (i = 0; i < pipecnt; i++) {
if (pipe(pipes + i * 2) < 0)
error(1, errno, "pipe #%d", i);
}
for (i = 0; i < pocet; i++) {
char *prog = proglist[i];
printf("starting prog #%d [%s]\n", i, prog);
pid_t pid = fork();
if (pid < 0) {
error(1, errno, "fork #%d", i);
} else if (pid == 0) {
int *currpip = &pipes[i * 2];
int *prevpip = currpip - 2;
if (i > 0) {
if (dup2(prevpip[0], 0) < 0)
error(1, errno, "dup2 0 #%d", i);
}
if (i < pocet-1) {
if (dup2(currpip[1], 1) < 0)
error(1, errno, "dup2 1 #%d", i);
}
for (j = 0; j < pipecnt * 2; j++) {
close(pipes[j]);
}
//execlp(prog, prog, NULL);
//error(1, errno, "prog #%d [%s]", i, prog);
exit(system(prog));
}
}
for (i = 0; i < pipecnt * 2; i++) {
close(pipes[i]);
}
for (i = 0; i < pocet; i++)
wait(NULL);
}
...
sprav((char*[]){ "ls -l", "grep rwx", NULL });
Přidej si tam nějaké výpisy stavu a hodnot ať vydíš, co se tam děje. Pak při kompilaci použij parametr -Wall a rozhodni se, jestli proces je char*, char**, nebo char*** a podle toho s ním pracuj.
Když na nic nepřijdeš, tak to zjednoduš a přeformátuj tak ať se v tom vyzná i někdo jiný než ty a vkládej kód pomocí funkce pro vložení zdrojového kódu (<?).
Máš snad na disku takové složky? Je v dokumentaci použitých funkcí napsáno, že nahrazují ty proměnné?
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Environment.ExpandEnvironmentVariables("%appdata%")
Pokud první cyklus načte všechny tokeny, tak ten druhý samozřejmě nemá, co by dál načítal.
int main()
{
FILE *fr;
fr = fopen("text.txt","r");
if(!fr)
puts("soubor nenalezen");
/*
* a nic vic?
*/
typedef struct slova {
int pocet;
char slovo[50];
} slova;
int counter = 0;
int pocet_slov = 0;
char c;
while((c = fgetc(fr)) != EOF){
counter ++;
if(c == ' ' || c == '\n')
pocet_slov ++;
}; // strednik na co?
rewind (fr);
/*
* to je na co?
*/
char *obsah;
obsah = (char *) malloc(counter + 1);
printf("hnuj\n"); // rozhodne ;)
int f = 0;
char q;
while((q = fgetc(fr)) != EOF){
obsah[f] = q;
f++;
}; // strednik na co?
slova seznam[30];
int p = 0;
/*
* to je na co?
*/
int znak = 0;
/*
* to je na co?
*/
seznam[p].slovo[0] = '\0';
char pole[20];
/*
* to je na co?
*/
pole[0] = '\0';
/*
* jsi na konci souboru
*/
while((fscanf(fr,"%s" , pole)) != EOF){
/*
* proc -1?
*/
for(int w = -1; w < p; w++)
if(strcmp(seznam[w].slovo,pole) == 0){
seznam[w].pocet++;
/*
* return ukoncuje funkci
*/
return 0;}
/*
* proc je tohle v cyklu?
*/
else{
strcpy(seznam[p].slovo,pole);
/*
* jakou hodnotu zvysujes?
*/
seznam[p].pocet++;
}
p++;
/*
* to jsi nikde nealokoval
*/
free(pole);
}; // strednik na co?
/*
* proc 20?
*/
for(int z = 0; z < 20; z++)
printf("%s\n",seznam[z].slovo);
return 0;
}
Nebo Sleep().
Jak odpočítalo? Jestli chceš program na tu dobu "pozastavit", tak můžeš použít funkci sleep().
V zadání máš uvedeno, co to má vypisovat. A Kent tě upozornil na to, že a taky může být menší než b.
Mně to jako dokončený program nepřipadá, když nesplňuje zadání.
Funkce strstr v řetezci hledá podřetězec ("R"). Na hledání znaku je strchr ('R').
No, chtěl jsi odstranit mezery. Pokud tam budou jen mezery, tak se tam nic "nevloží", to je přece žádoucí.
Pokud chceš jiný filtr, tak si tu podmínku nějak uprav.
if (isalpha(pole[i])) ...
if (isupper(pole[i])) ...
if (strchr("povoleneznaky", pole[i])) ...
Oddělovací znak tam přece máš. Můžeš použít treba String.split().
String radek = ...
String[] hodnoty = radek.split("\t");
xa je pole bytů. v xa[-2] je 2 a v xa[-1] je 1.
xb je dvoubytová proměnná na adrese xa[-2].
hodnota xb je 258 (0x0102).
Mělo by to fungovat, tak jak čekáš. V čem to spouštíš?
Nějak si musíš nadefinovat odkud se kam dá jít a kde jsi a podle toho se rozhodnout. A pravděpodobně toho bude více, než jen možnosti postupu. Můžeš to udělat nějak takhle (hodně zjednodušeno):
class Lokace {
//popis ...
//predmety ...
Map<String,Lokace> cesty = new HashMap<String,Lokace>();
}
...
Lokace namesti = new Lokace();
Lokace les = new Lokace();
Lokace bazina = new Lokace();
namesti.cesty.put("les", les);
les.cesty.put("namesti", namesti);
les.cesty.put("bazina", bazina);
bazina.cesty.put("les", les);
Lokace lokace = namesti;
System.out.println("Lokace: namesti");
while (!(vstup = in.readLine()).equals("konec")) {
String[] slova = vstup.split(" ");
if (slova[0].equals("jdi")) {
if (slova.length < 2) {
System.out.println("Kam?");
} else {
if (!lokace.cesty.containsKey(slova[1])) {
System.out.println("Tam se odtud neda jit.");
} else {
lokace = lokace.cesty.get(slova[1]);
System.out.println("Lokace: " + slova[1]);
//System.out.println(lokace.popis);
}
}
} else {
System.out.println("Neznamy prikaz.");
}
}
Standardní funkce na to není. Můžeš to udělat třeba nějak takhle, snad je to samovysvětlující.
int pocetprvku = neco, novypocetprvku = 0;
for (int i = 0; i < pocetprvku; i++)
{
if (pole[i] != ' ')
pole[novypocetprvku++] = pole[i];
}
To i máš o jednu pozici napřed. Přidej -1 i při vkládání \0. (nebo začni s i = 0 a nic neodečítej)
Neošidíš nic. Buď to na zásobníku nemáš, nebo máš a pak ho zase vyčerpáš.
Řešení je zvětšení zásobníku, nebo umístění mimo zásobník - statickou alokací(rezervací) použitím globálního pole nebo statického lokálního pole, nebo dynamickou alokací na haldě.
A pro zajištění teoretického rychlejšího přístupu v podmínkách, které stejně nenastanou, bys musel udělat víc, než jen vrazit 4MB na zásobník.
Není to dobře. Name se ti vždycky vytvoří a zruší (a key je nepoužitelný). A do toho na něm vytváříš a rušíš další string. Překvapuje mě, že to funguje. Neřve to už při překladu, že máš string v unionu?
V Boost je Variant a Any, ale to je tady asi zbytečné, prostě tam vraz ukazatel.
Tak jinak, buď do knihy vkládáš víc dat, nebo do seznamu vkládáš víc knih, než se tam vejde. Možná obojí. To ale takhle nepoznáme.
V Z-bufferu je vzdálenost jednotlivých pixelů (resp. odpovídajících bodů na povrchu objektů v prostoru). A jak postupně vykresluješ jednotlivé pixely objektů, tak skutečně vykreslíš jen ty, které jsou blíže, než to co tam bylo původně a aktualizuješ hodnotu v Z-bufferu (vzdálenost bodu).
Objekt máš definovaný trojúhelníky o třech vrcholech. Pro každý vrchol máš definován normálový vektor. Při vykreslování jednotlivých pixelů interpoluješ normály definujících vrcholů, získáváš normálu bodu/pixelu, podle které aplikuješ světlo na podkladovou barvu a dostaneš výslednou barvu pixelu.
S difůzním povrchem a kolmou projekcí celkem není co řešit. Netvrď, že při takovém úkolu za sebou nemáš dostatek teorie, abys měl představu, jak to řešit. S čím konkrétně si nevíš rady?
Celá cesta je stejná ať jde o soubor, který jen vypíšeš, nebo adresář, do kterého vstoupíš. Takže nepotřebuješ dva stringy a rozhodně nebudou mít úplně jiný obsah. A 100 znaků nemusí stačit, měl bys alokovat tolik, kolik opravdu potřebuješ.
A ten readdir můžeš dát rovnou do podmínky while, ať to uvnitř nemusíš hlídat (před tím continue a na konci bloku).
while ((polozka_adresara = readdir(adresar)) != NULL)
Ano, třeba scanf, pokud ti vyhovuje, nebo fgets, nebo něco.
To, co jsi napsal, je pole ukazatelů, vyhoď tu hvězdičku. A nemusíš to alokovat dynamicky.
char nazev[100];
printf("zadej nazev: ");
scanf("%99s", nazev);
f = fopen(nazev, "w");
Tak ho necháš zadat název a ten dáš do toho fopen.
Když se nepovede opendir, tak dál pracuješ s neplatným adr.
Položku z prvního readdir vůbec nezpracuješ, protože hned na začátku cyklu máš další readdir.
Místo vyhledávání podřetězce (strstr) "..", použij porovnání celého řetezce (strcmp). A to pro "." i "..".
Ten controll vůbec nepotřebuješ a tak jak máš ten if-else napsaný ti to vypíše chybu ať už selže stat, nebo není nastavený controll. To asi nechceš.
Řetězec, do kterého skládáš celou cestu, alokuješ jen podle d_name. Celá cesta se ti do něj nevejde. A chybí ti tam oddělovač.
Já tomu nějak nerozumím. Jednoduše by to šlo třeba takhle (bez kontrol chyb):
#define ASZ(x) (sizeof (x) / sizeof (x)[0])
void proc(char id, sem_t *waitsem[], sem_t *postsem[])
{
int i;
for (i = 0; waitsem[i]; i++) sem_wait(waitsem[i]);
for (i = 0; i < 5; i++) {
printf("%c", id); fflush(stdout);
sleep(1);
}
for (i = 0; postsem[i]; i++) sem_post(postsem[i]);
}
pid_t start(char id, char *wait, char *post)
{
pid_t pid;
if ((pid = fork()) == 0) {
int i;
char *tok, *saveptr;
sem_t *wsem[5] = {0}, *psem[5] = {0};
wait = strdup(wait); post = strdup(post);
for (i = 0, tok = strtok_r(wait, ",", &saveptr); tok; tok = strt
wsem[i] = sem_open(tok, 0);
for (i = 0, tok = strtok_r(post, ",", &saveptr); tok; tok = strt
psem[i] = sem_open(tok, 0);
proc(id, wsem, psem);
for (i = 0; wsem[i]; i++) sem_close(wsem[i]);
for (i = 0; psem[i]; i++) sem_close(psem[i]);
exit(0);
}
return pid;
}
int main(int argc, char *argv[])
{
struct { char *name; sem_t *sem; } semlist[] = {
{ "/xx01", NULL },
{ "/xx12", NULL },
{ "/xx23", NULL },
{ "/xx35", NULL },
{ "/xx14", NULL },
{ "/xx45", NULL }
};
struct { pid_t pid; char *wait, *post; } proclist[] = {
/*P1*/ { -1, "/xx01", "/xx12,/xx14" },
/*P2*/ { -1, "/xx12", "/xx23" },
/*P3*/ { -1, "/xx23", "/xx35" },
/*P4*/ { -1, "/xx14", "/xx45" },
/*P5*/ { -1, "/xx35,/xx45", ""}
};
int i;
for (i = 0; i < ASZ(semlist); i++)
semlist[i].sem = sem_open(semlist[i].name, O_CREAT|O_EXCL, 0777, 0);
for (i = 0; i < ASZ(proclist); i++)
proclist[i].pid = start('1'+i, proclist[i].wait, proclist[i].post);
sem_post(semlist[0].sem);
for (i = 0; i < ASZ(proclist); i++)
waitpid(proclist[i].pid, NULL, 0);
for (i = 0; i < ASZ(semlist); i++) {
sem_close(semlist[i].sem);
sem_unlink(semlist[i].name);
}
return 0;
}
Takže ty klienty spouštíš přes nějaký exec*() ? Tak třeba každému můžeš dát název semaforu/ů do argv
execl("./klient", "./klient", "mujsem1", NULL);
...
Jaké nic? Nepiš si o radu, když na to dlabeš a rovnou to dej do inzerce.
Tak třeba takhle, ať to nemáte moc podobné. Porovnávání s předchozím znakem.
char c, old = ' ';
while (!feof(soubor1))
{
fscanf(soubor1, "%c", &c);
if (!isspace(c))
{
fprintf(soubor2, "%c", c);
if (c == '.')
fprintf(soubor2, "\n");
}
else //isspace
{
if (old != '.' && !isspace(old))
fprintf(soubor2, " ");
}
old = c;
}
To počitadlo bych nuloval až ta řada whitespace skončí, v tom bloku !isspace.
Co se týče nahrazení, tak to můžeš udělat na začátku řady (isspace) - zapsat mezeru při whiteSpace == 1 a další ignorovat; nebo na konci řady (!isspace) - vypsat mezeru pokud je whiteSpace > 0.
Snad to dává smysl, už mi to moc nemyslí. Nakonec je jedno, kolik těch mezer bylo, ale s tím počitadlem to budeš mít originální. Tady jsme to řešili nedávno:
http://programujte.com/forum/vlakno/22771-formatovani-textu-ze-souboru-do-souboru/
To je vpořádku. ^Z funguje jako konec vstupu jen na začátku řádku, jinak je součástí vstupu.
Pokud to nutně chceš, tak to stačí přidat do toho testu důvodu přerušení načítání:
if (!feof(f) && fgetc(f) != 26/*^Z*/)
To true je druhý parametr pro PrintWriter, dej ho tomu FileWriter.
Tak předtím byl_whiteSpace měl pořád hodnotu 1, takže podmínka nebyla splněna nikdy. Teď má pořád hodnotu 0, takže je ta podmínka splněna vždy.
Musíš tam dodělat tu logiku, že z každé řady whitespace se první vypíše jako mezera a další v řadě se ignorují. Tzn. ten byl_whiteSpace podle potřeby přepínat. Nebo to řešit jinak.
Vypisuješ mezeru, když byl_whiteSpace==0, ale nikdy se nenastaví na 0.
getPredmet() vrací List<PredmetDTO> a getId() je metoda.
Takže místo
login.getPredmet().getId
by mohlo být třeba
login.getPredmet().get(0).getId()
Ale nevím, jestli to bude dělat to, co zamýšlíš.