Autor |
Správa |
Skočiť do kategórie Skočiť do témy |
marmik |
Napísal: 10 Jan 2012, 22:53
|
|
|
Tak chlapi, jsem to nakonec vyřešil i se zadáním 5ti místného jména protivníka. Vše pokus omyl,jen jsem protřeboval na netu najít flush,aby byla prázdná mezipamět'.Díky nakopnutí od libco jsem pochopil zadávání rovnic,tímto mu dík. Program ted' stojí za to. :mrgreen:
Už opraveno a protentokrát jsem si uvědomil,že nepočítá desetinné číslo.Byl jsem tak rád že to něco spočetlo,že jsem to ani nekontroloval jestli počítá správně. http://www.ulozisko.sk/obrazky/477730/vcielka1.jpg |
|
 |
Skočiť do kategórie Skočiť do témy |
libcosenior |
Napísal: 20 Okt 2012, 15:44
|
|
|
Bol som stanovený predsedom inventarizačnej komisie na hnuteľný majetok. V majetku je vyše 2 000 položiek a väčšina z nich má po viac kusoch. Navyše sú položky rôzne rozčlenené zhruba do 148-ich súčastí. Teraz to vysvetlím ľudsky. :D Napríklad: Ja som jedna súčasť, moja kancelária je druhá súčasť. Ja mám na karte (položka) - PC, (položka) - tlačiareň, (položka) - scaner. V mojej kancelárii je (položka) - písací stôl, (položka) - stôl pod PC, (položka) - skriňa atd.
Potreboval som v Exceli 2007 vytvoriť súbor, v ktorom by som mal prehľad o tom, aké položky máme na stave, aké sú súčasti, čo majú na stave jednotlivé súčasti, kontrola či sa skutočnosť rovná tomu čo je na stave a všetko to musí spolupracovať aj po zadaní akejkoľvek zmeny.
Za pomoci jednoduchého makra som vytvoril 148 nových listov očíslovaných od 1 do 148. (komentáre tu začínajú apostrofom ') Sub VytvorListy()
Dim i As Integer ' deklarácia premennej typu int
For i = 1 To 148 ' cyklus 1 až 148 Worksheets.Add After:=Worksheets(Worksheets.Count) ' vytvor nový pracovný hárok Worksheets(Worksheets.Count).Name = i ' s názvom i, teda 1 až 148 Next i
End Sub
Takto sa vytvára makro: excel1a.JPG Napíšeš názov a dáš vytvoriť. excel2.JPG Obsah tela makra treba dopísať. excel3.JPG Takto sa spustí: excel4.JPG
Ďalší list som nazval "celkom", vytvoril som v ňom tabuľku s údajmi o položkách (vyše 2000), toto bolo najpracnejšie, pretože som ich tam musel nahádzať jednotlivo po riadkoch so všetkými potrebnými údajmi.
Ukážka: excel.JPG
Potom som vytvoril makro, ktoré do listov 1 až 148 vložilo tabuľku z listu "vzor" (upravená tabuľka !celkom") s pridaným stĺpcom na zadanie skutočného množstva položiek u súčastí (všade je tlačitko pre skok na list "obsah"). Sub VlozDatabazuNovu() ' ' VlozDatabazu Makro '
' ' definovanie celočíselnej premennej i Dim i As Integer ' pracuje na pozadí Application.ScreenUpdating = False ' aktivácia listu vzor Sheets("vzor").Select ' vybranie stĺpcov Columns("A:H").Select ' skopírovanie vybratých stĺpcov do pamäti Selection.Copy ' vytvorenie slučky 1 až 148 For i = 1 To 148 ' aktivácia i-teho listu v poradí (nie názvu) Sheets(i).Select ' aktivácia bunky A1 Range("A1").Select ' vloženie skopírovaného ActiveSheet.Paste ' zápis do bunky E2 i-té číslo Cells(2, 5) = i ' aktivácia bunky A1 Range("A1").Select ' ukončenie slučky Next i ' aktivácia listu vzor Sheets("vzor").Select ' zrušenie označenia kopírovanej oblasti Application.CutCopyMode = False ' aktivácia bunky A1 Range("A1").Select ' koniec práce na pozadí Application.ScreenUpdating = True End Sub Ďalej som vytvoril 148 makier - skok na list č. 1 - 148.
Ukážka: Sub tlac1() Sheets("1").Select End Sub Sub tlac2() Sheets("2").Select End Sub Sub tlac3() Sheets("3").Select End Sub Sub tlac4() Sheets("4").Select End Sub Sub tlac5() Sheets("5").Select End Sub Sub tlac6() Sheets("6").Select End Sub Sub tlac7() Sheets("7").Select End Sub ... Nasledujúci list som nazval "obsah" a v ňom som vytvoril 148 tlačítok na 148 súčastí a priradil som im makrá skok na list č.1 - 148 (zmazal som názvy súčastí, to vás nemusí zaujímať :D ) excel1.JPG
Ďalšie makro je aktualizácia databázy, to sa použije vždy, keď sa niečo zmení v liste "celkom", aby sa zmeny premietli do listov 1 - 148. Sub AutualizujDatabazu()
Dim i As Integer ' pracuje na pozadí Application.ScreenUpdating = False ' aktivácia listu číslo celkom Sheets("celkom").Select ' vybranie oblasti buniek Range("A4:E1600").Select ' skopírovanie vybratých stĺpcov do pamäti Selection.Copy ' vytvorenie slučky 1 až 148 For i = 1 To 148 ' aktivácia i-teho listu v poradí (nie názvu) Sheets(i).Select ' aktivácia bunky A1 Range("A4").Select ' vloženie skopírovaného ActiveSheet.Paste ' zápis do bunky E2 i-té číslo ' Cells(2, 5) = i ' aktivácia bunky A1 Range("A1").Select ' ukončenie slučky Next i ' aktivácia listu číslo celkom Sheets("celkom").Select ' zrušenie označenia kopírovanej oblasti Application.CutCopyMode = False ' aktivácia bunky A1 Range("A1").Select ' koniec práce na pozadí Application.ScreenUpdating = True End Sub Na toto všetko mi stačili stránky o visual basic excel 2007 a základy céčka.
Teraz som však potreboval aby sa mi do jednej bunky v liste "celkom" automaticky spočítavali obsahy bunky (napr.) E7 z každého listu (1 - 148). Minulý rok som to robil tak, že som klikol na liste "celkom" na príslušnú bunku, kde sa to malo spočítavať, potom na "suma" a pomaly som prechádzal list po liste, všade označil bunku E7 a stlačil +. Trvalo to hrozne dlho, bolo to deprimujúce a mohol som sa pomýliť, niečo vynechať, niečo zapísať viackrát.
Tohto roku som to vyriešil veľmi jednoducho. Jednoduchý programík v céčku vytvoril potrebný (poriadne dlhý) reťazec, ten som z výstupu programu skopíroval, vložil do word súboru (bolo treba odstrániť znaky '\n', ktoré pri výpise príkazový riadok automaticky vytvorí) na malú úpravu, odtiaľ do konkrétnej bunky listu "celkom" a bolo vystarané.
#include <stdio.h> #include <string.h>
int main (void) { int i; char slovo[2000], pom[10];
slovo[0] = '\0'; for ( i = 1; i <= 190; i++) { sprintf(pom,"'%d'!F4+", i); strcat(slovo, pom); } printf("%s\n", slovo); return 0; } Výpis vytvoreného reťazca: '1'!F4+'2'!F4+'3'!F4+'4'!F4+'5'!F4+'6'!F4+'7'!F4+'8'!F4+'9'!F4+'10'!F4+'11'!F4+'12'!F4+'13'!F4+'14'!F4+'15'!F4+'16'!F4+'17'!F4+'18'!F4+'19'!F4+'20'!F4+'21'!F4+'22'!F4+'23'!F4+'24'!F4+'25'!F4+'26'!F4+'27'!F4+'28'!F4+'29'!F4+'30'!F4+'31'!F4+'32'!F4+'33'!F4+'34'!F4+'35'!F4+'36'!F4+'37'!F4+'38'!F4+'39'!F4+'40'!F4+'41'!F4+'42'!F4+'43'!F4+'44'!F4+'45'!F4+'46'!F4+'47'!F4+'48'!F4+'49'!F4+'50'!F4+'51'!F4+'52'!F4+'53'!F4+'54'!F4+'55'!F4+'56'!F4+'57'!F4+'58'!F4+'59'!F4+'60'!F4+'61'!F4+'62'!F4+'63'!F4+'64'!F4+'65'!F4+'66'!F4+'67'!F4+'68'!F4+'69'!F4+'70'!F4+'71'!F4+'72'!F4+'73'!F4+'74'!F4+'75'!F4+'76'!F4+'77'!F4+'78'!F4+'79'!F4+'80'!F4+'81'!F4+'82'!F4+'83'!F4+'84'!F4+'85'!F4+'86'!F4+'87'!F4+'88'!F4+'89'!F4+'90'!F4+'91'!F4+'92'!F4+'93'!F4+'94'!F4+'95'!F4+'96'!F4+'97'!F4+'98'!F4+'99'!F4+'100'!F4+'101'!F4+'102'!F4+'103'!F4+'104'!F4+'105'!F4+'106'!F4+'107'!F4+'108'!F4+'109'!F4+'110'!F4+'111'!F4+'112'!F4+'113'!F4+'114'!F4+'115'!F4+'116'!F4+'117'!F4+'118'!F4+'119'!F4+'120'!F4+'121'!F4+'122'!F4+'123'!F4+'124'!F4+'125'!F4+'126'!F4+'127'!F4+'128'!F4+'129'!F4+'130'!F4+'131'!F4+'132'!F4+'133'!F4+'134'!F4+'135'!F4+'136'!F4+'137'!F4+'138'!F4+'139'!F4+'140'!F4+'141'!F4+'142'!F4+'143'!F4+'144'!F4+'145'!F4+'146'!F4+'147'!F4+'148'!F4 |
|
 |
Skočiť do kategórie Skočiť do témy |
ostmaster |
Napísal: 18 Jún 2013, 11:02
|
|
|
ulohy zo siedmej lekcie
 Obidve úlohy sú OK. libcosenior |
|
 |
Skočiť do kategórie Skočiť do témy |
libcosenior |
Napísal: 15 Feb 2015, 11:40
|
|
|
Vyčistenie konzoly win/linux
Zabezpečí prenositeľnosť medzi OS. #ifdef _WIN32 #define CLEAR "cls" #else //In any other OS #define CLEAR "clear" #endif Zmena velkosti okna konzoly a ďalšie triky: http://www.programming-techniques.com/2011/09/how-to-resize-console-window-using-c.html |
|
 |
Skočiť do kategórie Skočiť do témy |
ostmaster |
Napísal: 17 Feb 2015, 18:35
|
|
|
zdravim, opat som tu ;) mam hotove vsetky ulohy, hadam ze dobre, mozno som ale na nieco zabudol.
5. ulohu mam trocha inac, pouzil som len jedno pole a to som zoradil, prekopirovat do pola y by nemal byt ziadny problem, vlastne x akoby bolo y-staci to tam nakopirovat :D , mal som to rozmyslene takto ;) je tam kopa veci navyse, pretoze som si to chcel pozret ako to vyzera v subore. je tam aj merac za kolko prebehne funkcia zorad(), este by som sa s nou rad pohral nech je rychlejsia. |
|
 |
Skočiť do kategórie Skočiť do témy |
alim97 |
Napísal: 06 Mar 2015, 10:42
|
|
|
Po tom, ako som si rozobral kód kúsok po kúsku, tak som prišiel na to kde je chyba. Code: zad_cisloint = (int)zad_cislor; V tomto bode som to premenil na základný typ int, ktorý také veľké čísla nepodporuje. Zmena na Code: zad_cisloint = (uint64_t)zad_cislor; to vyriešila |
|
 |
Skočiť do kategórie Skočiť do témy |
alim97 |
Napísal: 23 Mar 2015, 14:49
|
|
|
Samozrejme je tento tvoj kód oveľa prehľadnejší. Ja si k svojmu píšem komentáre, aby som aj v budúcnosti vedel čo a ako som myslel pri písaní kódu, ale nezachádzal som moc do podrobností a pri kóde som sa snažil len aby fungoval keď ho odovzdám.
C-éčko ma celkom chytilo a baví ma v ňom programovať, takže veľká vďaka za tento web, ktorý ma k nemu priviedol :) No stále viac a viac zisťujem, že je v ňom ešte hrozne veľa na učenie a že veľa vecí ešte vôbec neviem. Zatiaľ som si sám spravil iba jeden taký väčší projekt, keď som skúšal spraviť nejakú jednoduchú kalkulačku aspoň na základné derivácie, inak si robievam podobné zadania,aké som našiel na liahen.ksp.sk alebo teraz aj súťaž KSP. |
|
 |
Skočiť do kategórie Skočiť do témy |
libcosenior |
Napísal: 29 Mar 2015, 21:43
|
|
|
Zapojil som sa do súťaže na itnetwork.cz a napísal som aplikáciu apríl. Ak by to niekoho zaujímalo, tak do prílohy dávam zip súbor. (windows)
Attachment: april.zip |
|
 |
Skočiť do kategórie Skočiť do témy |
alim97 |
Napísal: 10 Apr 2015, 21:08
|
|
|
Zdravím, napísal som jednoduchú hru v C-éčku, niečo na štýl stolných hier a hádzania kockami. Na hracom poli sú otáznikmi ('?') znázornené políčka RISK/ZISK, kde sú zadávané úlohy. Je to môj prvý pokus o vytvorenie nejakej hry Prípájam ZIP súbor s kódmi |
|
 |
Skočiť do kategórie Skočiť do témy |
libcosenior |
Napísal: 15 Apr 2015, 09:36
|
|
|
Na itnetwork.cz jeden člen potreboval pomoc s touto hrou, tak som ju nakódil. ;) Samozrejme, že je to project zložený z niekoľkých header a source súborov:
grafika.h #ifndef GRAFIKA_H_INCLUDED #define GRAFIKA_H_INCLUDED
#include "cas.h" #include <windows.h>
/** definicie vykreslenia kociek s hodnotou 1 az 6 */ #define JEDEN printf("\ ***********\n\ * *\n\ * *\n\ * O *\n\ * *\n\ * *\n\ ***********\n\n")
#define DVA printf("\ ***********\n\ * *\n\ * O *\n\ * *\n\ * O *\n\ * *\n\ ***********\n\n")
#define TRI printf("\ ***********\n\ * *\n\ * O *\n\ * O *\n\ * O *\n\ * *\n\ ***********\n\n")
#define STYRI printf("\ ***********\n\ * *\n\ * O O *\n\ * *\n\ * O O *\n\ * *\n\ ***********\n\n")
#define PAT printf("\ ***********\n\ * *\n\ * O O *\n\ * O *\n\ * O O *\n\ * *\n\ ***********\n\n")
#define SEST printf("\ ***********\n\ * *\n\ * O O O *\n\ * *\n\ * O O O *\n\ * *\n\ ***********\n\n")
HANDLE wHnd; // Riadit pisanie do konzoly HANDLE rHnd; // Riadit citanie z konzoly
/** Nastavi sirku, vysku a nazov konzoly * @param int sirka * @param int vyska * @param retazec nazov konzoly * @return void */ void konzola(const int sirka, const int vyska, char *nazov_okna);
/** Nahodne vyberie kocku, tu vykresli a vrati jej hodnotu * @param void * @return void */ int kocka(void);
/** Hadze tromi kockami, vykresluje 9 hodou v intervale 100 milisekund * 10. hod necha viditelny * @param pointer na int prva kocka * @param pointer na int druha kocka * @param pointer na int tretia kocka * @return void */ void hod_kockou(int *p_x, int *p_y, int *p_z);
#endif // GRAFIKA_H_INCLUDED grafika.c #include "grafika.h"
void konzola(const int sirka, const int vyska, char *nazov_okna) { // Nastavi riadenie na citanie a zapis wHnd = GetStdHandle(STD_OUTPUT_HANDLE); rHnd = GetStdHandle(STD_INPUT_HANDLE); // Nastavenie nazvu okna SetConsoleTitle(nazov_okna); // Nastavenie velkosti okna: SMALL_RECT windowSize = {0, 0, sirka, vyska}; SetConsoleWindowInfo(wHnd, 1, &windowSize); }
int kocka(void) { int i;
i = rand() % 6 + 1; // nahodne cislo v rozsahu 1 - 6 switch (i) { case 1: // vykresli kocku s hodnotou 1 JEDEN; break; case 2: DVA; break; case 3: TRI; break; case 4: STYRI; break; case 5: PAT; break; case 6: SEST; break; }
return i; }
void hod_kockou(int *p_x, int *p_y, int *p_z) { int i;
for (i = 0; i < 10; i++) { // 10 krat cyklus system("cls"); *p_x = kocka(); // vykresli nahodnu kocku a do pointera ulozi hodnotu *p_y = kocka(); // -"- *p_z = kocka(); // -"- sleep(100); // zastavenie na 100 ms } // posledne kocky ostanu vykreslene } hra.h #ifndef HRA_H_INCLUDED #define HRA_H_INCLUDED
#include "grafika.h" #include <math.h> // pouzitie funkcie abs() absolutna hodnota cisla
/** Vyhodnoti ci su po hode aspon dve kocky zhodne, ak su zhodne, ci je zadany * medzernik v stanovenom case a vrati hodnotu vyhodnotenia * @param int x, y, z su premenne ktorych adresy (&x, &y, &z) sa zadaju ako parametre * do funkcie hod_kockou() * @param char znak - medzernik alebo iny znak * @param int prednastaveny cas ne hadanie po hode v milisekundach * @param float cas trvania, kym hrac stlacil klavesu * @return int poradove cislo vyhodnotenia */ int vyhodnotenie(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned char znak, const int nastaveny_cas, const float trvanie);
/** Samotny priebeh hry so zaverecnym vyhodnotenim * @param void * @return void */ void hrame(void);
#endif // HRA_H_INCLUDED hra.c #include "hra.h"
int vyhodnotenie(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned char znak, const int nastaveny_cas, const float trvanie) { int vysledok;
vysledok = ((x == y || x == z || y == z) && znak == ' ' && trvanie <= (float)(nastaveny_cas / 1000.0)) ? 1 : // 1-OK v termine ((x == y || x == z || y == z) && znak == ' ' && trvanie > (float)(nastaveny_cas / 1000.0)) ? 2 : // 2-OK po termine ((x == y || x == z || y == z) && znak != ' ' && trvanie <= (float)(nastaveny_cas / 1000.0)) ? 3 : // 3-zhoda a znak nie je medzera v termine ((x == y || x == z || y == z) && znak != ' ' && trvanie > (float)(nastaveny_cas / 1000.0)) ? 4 : // 4-zhoda a znak nie je medzera po termine (!(x == y || x == z || y == z) && znak == ' ' && trvanie <= (float)(nastaveny_cas / 1000.0)) ? 5 : // 5-nezhoda a znak je medzera v termine (!(x == y || x == z || y == z) && znak == ' ' && trvanie > (float)(nastaveny_cas / 1000.0)) ? 6 : // 6-nezhoda a znak je medzera po termine (!(x == y || x == z || y == z) && znak != ' ' && trvanie <= (float)(nastaveny_cas / 1000.0)) ? 7 : // 7-nezhoda a znak nie je medzera v termine 0; // 0-nezhoda a znak nie je medzera po termine -> posledna moznost
return vysledok; }
void hrame(void) { int i = 0, n = 15, a, b, c, nastaveny_cas, body_spolu = 0, vysledok, znamka = 5, chyba = 0; float trvanie; char typ;
srand(time(0)); // potrebne pre generator nahodnych cisiel konzola(79, 40, "HRA KOCKY"); // nastavenie konzoly /** Uvodne informacie a zahajenie hry */ printf("\n\n\t* * * VITAJTE V HRE: HADAJ ROVNAKE KOCKY * * *\n\n"); printf("Ulohou hraca je po hode tromi kockami v stanovenom limite uhadnut, ci boli\n" "aspon dve kocky rovnake. " "Ak su rovnake, stlaci medzernik, ak nie stlaci klavesu ENTER.\n" "Na konci sa spocitaju chybne typy hraca, porovnaju sa\n" "so skutocnostou a hrac bude " "ohodnoteny znamkou 5 - 0. (za kazdu chybu sa znamka znizuje o jedna.\n\n" "Celkom bude %d hodov kockami.\n\n", n); printf("Za kolko milisekund uhadnete zhodne kocky (1 s = 1000 ms - [odporucane 1500]):\n"); scanf("%d", &nastaveny_cas); // nastavenie casu za ktory sa ma stlacit spravna klavesa for (i = 0; i < n; i++) { // cyklus n krat hod_kockou(&a, &b, &c); // vykreslenie hodu kociek s hodnotami ulozenymi do pointerov clock_t start = clock(); // zaciatok merania casu do stlacenia klavesy fflush(stdin); // vyprazdnenie bufferu typ = getch(); // stlacenie medzernika alebo inej klavesy clock_t finish = clock(); // koniec merania trvanie = (float)((int)finish - (int)start) / CLOCKS_PER_SEC; // vypocet casu tvania do stlacenia klavesy vysledok = vyhodnotenie(a, b, c, typ, nastaveny_cas, trvanie); // vyhodnotenie hodu a vratenie hodnoty switch (vysledok) { // podla hodnoty sa body celkom a body hraca pripocitavaju case 1: //printf("1-OK v termine, cas: %.2f\n", trvanie); // test printf("OK\n"); body_spolu++; break; case 2: //printf("2-OK po termine, cas: %.2f\n", trvanie); // test printf("Chyba! cas je po termine: %.3f sek.\n", trvanie); chyba++; body_spolu++; break; case 3: //printf("3-zhoda a znak nie je medzera v termine, cas: %.2f\n", trvanie); // test printf("Chyba! mala byt medzera!\n"); chyba++; body_spolu++; break; case 4: //printf("4-zhoda a znak nie je medzera po termine, cas: %.2f\n", trvanie); // test printf("Chyba! mala byt medzera a cas je po termine: %.3f sek.\n", trvanie); chyba++; body_spolu++; break; case 5: //printf("5-nezhoda a znak je medzera v termine, cas: %.2f\n", trvanie); // test printf("Chyba! nemala byt medzera!\n"); chyba++; break; case 6: //printf("6-nezhoda a znak je medzera po termine, cas: %.2f\n", trvanie); // test printf("Chyba! mala byt medzera a cas je po termine: %.3f sek.\n", trvanie); chyba++; break; case 7: //printf("7-nezhoda a znak nie je medzera v termine, cas: %.2f\n", trvanie); // test printf("OK\n"); break; default: //printf("0-nezhoda a znak nie je medzera po termine, cas: %.2f\n", trvanie); // test printf("Chyba! cas je po termine: %.3f sek.\n", trvanie); chyba++; break; } sleep(3000); //getch(); // test } sleep(2000); system("cls"); if (chyba > 5) chyba = 5; /** Vypis vysledkov hry */ printf("\n\t* * * VYHODNOTENIE * * *\n\n" "Celkom bolo v hre %d zhodnych hodov.\n" "Pocet chyb hraca: %d.\n\n" "Vysledna znamka je %d.\n\n", body_spolu, chyba, znamka - chyba); system("pause"); } main.c #include "hra.h"
int main(void) { hrame();
return 0; } Prikladám aj zazipovaný exe súbor na vyskúšanie pre tých, ktorým sa nechce (alebo nevedia) prekopírovať kód do nejakého IDE a skompilovať si ho. ;)
PS. Trochu som to opravil. :D kocky.zip |
|
 |
Skočiť do kategórie Skočiť do témy |
libcosenior |
Napísal: 18 Okt 2015, 09:41
|
|
|
|
 |
|