C++ zadaci,resenja,pitanja,tutoriali

Програм који решава игру Мој број из ТВ квиза "Слагалица".
Дакле није у питању само апликација већ и код. Код може бити и много ефикаснији, сигурно, али ћу га дотерати другом приликом. Код је написан у програмском језику C.

Алгоритам:
Сваки израз се посматра као бинарно стабло, што значи да сваки оператор (операција) има искључиво два операнда (броја). Нпр. израз

(a+b+c)*(d-e)/f​
посматрамо као
(((a+b)+c)*(d-e))/f​
Програм користи методу Brute force, што значи да испробава све могућности.
Прво се провери да ли је неки од понуђених бројева решење.
Ако није, онда се претпостави да решење има два операнда. Направи се матрица која памти све пермутације операнада, и матрица која памти све пермутације оператора.
Потом се направи једно стабло за дати број операнада. У то стабло се упише једна пермутација оператора и за њу провере све пермутације операнада. Тако док се не провере све пермутације оператора и операнада. Затим се прави наредно стабло за дати број операнада.
Потом се претпостави да решење има три операнда и све се понавља док се не одраде провере и за свих шест операнада.
Уколико је у неком тренутку пронађено решење, претрага се прекида.
Програм проналази приближно решење, ако нема тачног.
Алгоритам за креирање стабала користи низове 0 и 1. 1 значи да дати чвор има лево, или десно подстабло и да је ту знак операције, а 0 да нема лево, или десно подстабло и да ту иде број. Сигурно постоји и ефикаснји начин за прављење стабала, или бар памћење трагова, али о том-потом.
У најгорем случају, дакле када не постоји решење и обиђу се све пермутације и сва стабла, програму треба 12,7 секунди да се изврши за 6 операнада. За 5 операнада у најгорем случају треба му 0,25 секунди.
С обзиром да су бројеви у игри "Мој број" такви да решење скоро увек постоји и да се често може израчунати и са мање од 6 бројева, програм се углавном извршава за мање од 1 секунде.
На овом линку су апликација, конзолна апликација и код за обе апликације. Апликација прихвата само бројеве који се могу јавити у игри, док код конзолне апликације не постоје ова ограничења, могу се унети било који природни бројеви.
http://www.*************/download/qdop9rrf.../Moj+broj+2.zip

Исписаћу пар "tagova" ако неког некада буде интересовао и сам код и начин решавања задатка:
moj broj algoritam program kod resenje source programski jezik C slagalica
 
Ovo nije samo programiranje već i matematika s kojom sam imao nažalost problema u srednjoj, ali mislim da bih skontao ceo algoritam kad bih seo da analiziram ceo program. Ovaj C++ primer si radio od nule koristeći Windows API ili neka gotova rešenja?
Кренуо сам са овим кодом, који је основа за креирање Windows апликација:
Kod:
#include <windows.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
Онда сам додавао поља за унос, дугмиће и текст. Још учим.
Остатак програма, онај конзолни део, сам сам писао.
 
Игра Мој број (апликација и код): http://www.*************/download/bcqnil7eq5vl8l9/Moj+broj+3.zip

update кода, исправљена константа а у генератору псеудослучајних бројева: http://www.*************/download/uvaz4mp2e8km6d2/Moj+broj+3.1.zip
Вероватноће појављивања бројева би сада требале да буду приближније, али мислим да се разлика неће приметити, због тога што за сваки број постоји нови seed.
Уколико приметите неку разлику, јавите. :D

едит: Заправо генерисани бројеви ни не зависе од генератора, баш зато што се сваки пут узима нови seed. Тај број се само обради на одређени, увек исти начин. Следећи број зависи само од seed-а, па нема разлике у томе које вредности имају константе генератора и како се број генерише.
Пробао сам и верзију где се први број генерише на основу seed-a, а остале онда генерише генератор. Расподела је добра.
LK генератор је добар јер за правилно одабране коефицијенте сваки број из одређеног интервала се појављује једном. Нпр. бројеви из интервала 0 до 9 ће се појавити одређеним редоследом, који може да се предвиди, али ће се појавити сваки број и сваки по један пут док се не стигне до почетног броја, seed-a.
 
Poslednja izmena:
Програм који решава игру Мој број из ТВ квиза "Слагалица".
Дакле није у питању само апликација већ и код. Код може бити и много ефикаснији, сигурно, али ћу га дотерати другом приликом. Код је написан у програмском језику C.

Алгоритам:
Сваки израз се посматра као бинарно стабло, што значи да сваки оператор (операција) има искључиво два операнда (броја). Нпр. израз

(a+b+c)*(d-e)/f​
посматрамо као
(((a+b)+c)*(d-e))/f​
Програм користи методу Brute force, што значи да испробава све могућности.
Прво се провери да ли је неки од понуђених бројева решење.
Ако није, онда се претпостави да решење има два операнда. Направи се матрица која памти све пермутације операнада, и матрица која памти све пермутације оператора.
Потом се направи једно стабло за дати број операнада. У то стабло се упише једна пермутација оператора и за њу провере све пермутације операнада. Тако док се не провере све пермутације оператора и операнада. Затим се прави наредно стабло за дати број операнада.
Потом се претпостави да решење има три операнда и све се понавља док се не одраде провере и за свих шест операнада.
Уколико је у неком тренутку пронађено решење, претрага се прекида.
Програм проналази приближно решење, ако нема тачног.
Алгоритам за креирање стабала користи низове 0 и 1. 1 значи да дати чвор има лево, или десно подстабло и да је ту знак операције, а 0 да нема лево, или десно подстабло и да ту иде број. Сигурно постоји и ефикаснји начин за прављење стабала, или бар памћење трагова, али о том-потом.
У најгорем случају, дакле када не постоји решење и обиђу се све пермутације и сва стабла, програму треба 12,7 секунди да се изврши за 6 операнада. За 5 операнада у најгорем случају треба му 0,25 секунди.
С обзиром да су бројеви у игри "Мој број" такви да решење скоро увек постоји и да се често може израчунати и са мање од 6 бројева, програм се углавном извршава за мање од 1 секунде.
На овом линку су апликација, конзолна апликација и код за обе апликације. Апликација прихвата само бројеве који се могу јавити у игри, док код конзолне апликације не постоје ова ограничења, могу се унети било који природни бројеви.
http://www.*************/download/qdop9rrf.../Moj+broj+2.zip

Исписаћу пар "tagova" ако неког некада буде интересовао и сам код и начин решавања задатка:
moj broj algoritam program kod resenje source programski jezik C slagalica

sta imas ti od pc kad ti treba za izvrsavanje 12 sec
 
hvala za code posto sam pocetnik u programiranju , dosta ce znaciti
Нема на чему. Питај све што те занима, зато сам и ставио код, да виде људи како може да се реши овај проблем. Решење дефинитивно није најбоље, али је ипак решење. Чак сам успео и да уведем касније неке оптимизације, али их нисам поставио.
 
sta imas ti od pc kad ti treba za izvrsavanje 12 sec
Имам лаптоп стар девет година. Процесор је Интелов, Целерон, 1,73 GHz. На рачунару од 3,3 GHz се извршава за 3 секунде. То није само до брзине процесора, већ и до броја језгара, кеш меморије и још тога.
То време извршавања је само у случају да нема тачног решења. У највећем броју случајева је на мом рачунару у просеку потребно мање од једне секунде да се реши, с обзиром да решење скоро увек постоји и да се често може наћи са мање од шест бројева.
Програм користи методу brute force, што значи да проверава све могуће комбинације. И замисли сада да не постоји тачно решење. Све је у реду док имаш мање од шест бројева. Када почнеш да рачунаш све изразе са шест бројева (не заборави уз то све четири рачунске операције и заграде) настаје проблем и треба му времена да обави сва рачунања.

едит: Мислио сам да ће се ова порука надовезати на претходну, отуда две поруке за редом. :)
 
Poslednja izmena:
Нема на чему. Питај све што те занима, зато сам и ставио код, да виде људи како може да се реши овај проблем. Решење дефинитивно није најбоље, али је ипак решење. Чак сам успео и да уведем касније неке оптимизације, али их нисам поставио.

za mene je kod je jos uvek dosta nejasan . Jer tek 10-ak dana otkako sam zainteresovan za programiranje . U srednjoj sam imao stabilnu dvojku. Nije me zanimalo ama bas nista . Naucio sam hallo world i to je to . tek sam sad poceo pokazivace,cak nemam pojma cemu sluze , a koliko sam video ti koristis pokazivac na pokazivac u okviru strukture. Za jedno 5 dana cu da postavim pitanje dok postignem taj nivo da mogu da razumem bar vecinu koda. Ali hvala u svakom slucaju
 
ne znam je l za ovu temu ali eto da napišem. pišem neke programe u c++ (ništa veliko ali nije ni malo, onako zapravo pravim nešto i vežbam, codeblocks, mingw 64bitni g++) i to se lepo kompajliralo i pokretalo (najviše radim sa openCV-jem ali počinjem tek) do pre neki dan. lepo se programčić (nešto malo i bez veze ali trebalo bi da radi) iskompajlira ali kad ga klikneš da radi, bilo iz komandnog moda, bilo iz codeblocksa ili windowsa krene onaj kružić da se vrti i ni makac dalje. nije se baš blokirao komp ali recimo taj pokrenuti fajl nije hteo da se izbriše, ni iz task managera (da se ugasi proces). probam na drugom kompu, radi. i ajde na kraju isključim AVAST i hoće!!! prorade ti programi (doduše one iz task managera nije hteo da ukloni i dalje). inače kad sam te .exe svoje programe skenirala avastom javljao je da su OK
neki ti moji programi sa starijim datumom su radili, ali kad im promenim direktorijum zaglavljivali su se.
sad ću da ih pitam da li da se isključe neke opcije možda u avastu
eto možda me niste ni ispratili ali nikad se ne zna : ) mene je ovo dva dana nerviralo :confused:
 
ne znam je l za ovu temu ali eto da napišem. pišem neke programe u c++ (ništa veliko ali nije ni malo, onako zapravo pravim nešto i vežbam, codeblocks, mingw 64bitni g++) i to se lepo kompajliralo i pokretalo (najviše radim sa openCV-jem ali počinjem tek) do pre neki dan. lepo se programčić (nešto malo i bez veze ali trebalo bi da radi) iskompajlira ali kad ga klikneš da radi, bilo iz komandnog moda, bilo iz codeblocksa ili windowsa krene onaj kružić da se vrti i ni makac dalje. nije se baš blokirao komp ali recimo taj pokrenuti fajl nije hteo da se izbriše, ni iz task managera (da se ugasi proces). probam na drugom kompu, radi. i ajde na kraju isključim AVAST i hoće!!! prorade ti programi (doduše one iz task managera nije hteo da ukloni i dalje). inače kad sam te .exe svoje programe skenirala avastom javljao je da su OK
neki ti moji programi sa starijim datumom su radili, ali kad im promenim direktorijum zaglavljivali su se.
sad ću da ih pitam da li da se isključe neke opcije možda u avastu
eto možda me niste ni ispratili ali nikad se ne zna : ) mene je ovo dva dana nerviralo :confused:
Аха, па значи сада ради, а није хтело због АВАСТ-а. Да ли сам добро разумео? Или неће и даље да ради? Проблем је када .exe фајлове преместиш у неку другу датотеку?
Прво што ми је пало на памет када си рекла да закочи, је да имаш неку бесконачну петљу. Међутим, колико сам разумео, АВАСТ га блокира. Сада сам се сетио да сам и ја тако правио неку игрицу у Game Editor-у и када је покренем, активира се Авира и блокира игрицу, или када снимим игру на одређено место опет је блокира. Проверио сам и није било вируса у рачунару, нити је игру репознавало као вирус. Чудно.
 
da, prvo je radilo i kad je AVAST ukljucen, pa se valjda u medjuvremenu AVAST obnovio, pa je bilo kad pokrenem svoje .exe fajlove da nece da rade (cak su tad stariji fajlovi radili, a novi nisu, ili ako stari prekopiram na drugo mesto nece). a kad iskljucim avast onda svi rade, i nije prijavljivao viruse. koristim kombinaciju win7-codeblocks(gcc kompajler) pa mozda to nije standardno ili tako nesto, pisala sam avastu ali mi nisu nista odgovorili za sad.
 
Poslednja izmena:
a šta mi se danas desilo :D znači nikad nisam radila za pare ali eto imam neko iskustvo s programiranjem. i danas pišem program (radim sa openCV bibliotekama, ali ništa baš mnogo hevi ali opet). i nešto neće neće, zaključim da sam jako pametna i da bi trebalo da im javim da imaju bug :D :D i pogledam a ono neka njihova f-ja vraća samo klasu a ne klasu& : ))) nekako shvatim na kraju
tako nekako
 
Pozdrav ljudi!

Ovo mi je prvo postovanje na forumu, i odmah trazim pomoc, malo mi je glupo ali pritislo.
Treba mi pomoc oko rada sa datotekama, ovako zadatak glasi:

Korisnik programa obično ne može znati broj zapisa o zaposlenom kog traži. Napisati program koji pita korisnika za ime zaposlenog, pronalazi zapis sa tim imenom i prikazuje ga. Tada bi program trebalo da prikaže sledeće opcije korisniku:

Promeni platu ovom korisniku
Pregled sledećeg zapisa
Pronađi sledećeg zaposlenog
Izlaz


Nadovezuje se na jednu datoteku koju cu poslati na mail onome ko bude voljan da mi pomogne.
Hvala vam unapred z:lol:z:poz:
 
Pozdrav svima

Dobio sam zadatak iz C++ na faksu koji sam i uradio. Samo što treba da ispišem algoritam za to. Tu je i problem.

Kod:

Kod:
#include <iostream>
using namespace std;

int main() 
{
    int x,y,s1,s2;
cout<<"Unesi x i y "<<endl;
cin>>x;
cin>>y;
int br1=x;
int br2=y;

while ( br1 > 0 ) 
{
s1= s1+(br1%10);
br1=br1/10;
}

while ( br2 > 0 ) 
{
s2= s2+(br2%10);
br2=br2/10;
}

if(s2>s1)
    cout<<s2;
if(s1>s2)
    cout<<s1;
    return 0;
}

//Skontao sam da trebaju 2 while petlje, jedna if/else i print. Može pomoć?
 

Back
Top