Neznam ništa o programiranju, ići ću na FER pa me zanima koji programski jezik da počnem učit?
Ako imate preporuku za literaturu isto bi mi dobro došlo. Znam da se uči sve ispočetka, ali da ne dođem baš kao laik.
Neznam ništa o programiranju, ići ću na FER pa me zanima koji programski jezik da počnem učit?
Ako imate preporuku za literaturu isto bi mi dobro došlo. Znam da se uči sve ispočetka, ali da ne dođem baš kao laik.
Koliko se sjećam, na prve dvije godine se radi isključivo C jezik. Kasnije, ima i C++a, Jave itd..
Dakle trebao bih pomoć.
Using reader As StreamReader = New StreamReader("data.txt")
Do While (True)
Dim line As String = reader.ReadLine
If line Is Nothing Then
Exit Do
End If
Dim words As String() = line.Split(New Char() {" "c})
Dim word As String
For Each word In words
If word = TextBox1.Text Then
TextBox2.Text = words(+1)
End If
Next
Loop
End Using
ovakav je wordlist: http://puu.sh/40tKe.png
program mi izbacuje samo jednu riječ i tu dolazi do problema kad je u word listu više riječi, kad upišem "yes" izbaci mi "man" jer u wordlistu postoji riječ "yes man"...
dakle zanima me kako da stavim da ja upišem jednu riječ i izbaci mi sve riječi + prijevo koje postoje u wordlistu, u slučaju "yes" da izbaci "yes da, yes jest, yes potvrda, yes if da ako je, yes man ulizica"
ovako izgleda interace programa: http://puu.sh/40tUj.png
Početnik sam u programiranju pa radim male zadatke dok se ne ufuram :)
Neznam ništa o programiranju, ići ću na FER pa me zanima koji programski jezik da počnem učit?
Ako imate preporuku za literaturu isto bi mi dobro došlo. Znam da se uči sve ispočetka, ali da ne dođem baš kao laik.
Jedino sto ces uciti na faksu u redovnom programu jest C. Prvi semestar - Programiranje i programsko inzinjerstvo (PiPI), zvuci kul, ali u biti upoznavanje s C-om, tj. ucenje C-a. Drugi semestar - Algoritmi i strukture podataka (ASP), vec malo zanimljivije, kao sto samo ime kaze obraduju se razno-razni algoritmi, uglavnom sortiranja, pretrazivanja, hashevi i sl. Naravno, neizostavne su liste, redovi, stog (stack)...
I to je u biti to sto ces od programiranja uciti na FER-u (ako ne racunamo asembler). Jedino jos imas Cupicevu Javu kao vjestinu (znaci dodatni predmet, nije redovni program), Natjecateljsko programiranje (takoder dodatni predmet), od nedavno i Haskell (funkcijsko programiranje), ali to je u biti to. Za sve vise od toga si prepusten sam sebi. A vjeruj mi, na kasnijim godinama ti poznavanje nekog viseg jezika od C-a puno olaksa stvari. Tako da, morat ces i sam zapeti.
Dakle trebao bih pomoć.
...
program mi izbacuje samo jednu riječ i tu dolazi do problema kad je u word listu više riječi, kad upišem "yes" izbaci mi "man" jer u wordlistu postoji riječ "yes man"...dakle zanima me kako da stavim da ja upišem jednu riječ i izbaci mi sve riječi + prijevo koje postoje u wordlistu, u slučaju "yes" da izbaci "yes da, yes jest, yes potvrda, yes if da ako je, yes man ulizica"
ovako izgleda interace programa: http://puu.sh/40tUj.png
Početnik sam u programiranju pa radim male zadatke dok se ne ufuram :)
Ako je to Basic, a tako mi izgleda, mislim da si fulao temu. ;)
Basic je. I to VB.net
Da je qbasic ili nešto slično već bih se ja ubacio, ali o .net-u znam koliko i o neurokirurgiji...
Kako da učinim svoj program idiot-proof? Ne želim da mi u textbox gdje treba ići broj da unese string...
probao sam ovako:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
const char Delete = (char)8;
e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
}
i dalje se može unijet slovo...
probao sam i ovu metodu:
private bool nonNumberEntered = false;
ali isto...
Kako da učinim svoj program idiot-proof? Ne želim da mi u textbox gdje treba ići broj da unese string...
To nije C...
Koristi ES_NUMBER stil pri kreiranju edit kontrole, ili ga naknadno izmijeni sa SetWindowLong...
Recimo:
long style = GetWindowLong(hwndEdit, GWL_STYLE) | ES_NUMBER;
SetWindowLong(hwndEdit, GWL_STYLE, style);
SetWindowPos(hwndEdit,
NULL,
0, 0, 0, 0,
SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE);
Pod uvjetom da ti se handle od edit kontrole zove hwndEdit :D
Royal me pretekao, i to čini se sa boljim rješenjem :P
Royal me pretekao, i to čini se sa boljim rješenjem :P
Ni moje neće puštati recimo delete. Ali tražio samo brojeve. :)
Ako želiš da pustiš delete dodaj u if i !char.IsControl(e.KeyChar).
Propuštaje tipke po ASCII vrijednosti (48-57).
Unaprijed oprostite sto ce pitanje biti lose formulirano ali ne mogu si pomoci ;)
Dakle radi se o tablici mnozenja koja se treba napraviti pomocu dva jednodimenzionalna polja i jednog dvodimenzionalnog polja. Stigao sam do ovog dijele i dalje ne znam a trebao bi ove umnoske "podici" za tri reda bio bi zahvalan na pomoci.
#include <stdio.h>
#define R 5
#define S 3
#define RED 4
#define STUPAC 6
int main()
{
int n,m,redak[R], stupac[S],i=0,j=0,tablica[RED][STUPAC];
//printf ("N=");
scanf ("%d",&n);
//printf ("M=");
scanf ("%d",&m);
if (n>m || n<2 || n>100 || m<2 || m>100)
printf ("krivi unos");
while(i<R) {
//printf ("Redak %d ",i);
scanf("%d",&redak[i]);
if (redak[i] >= n && redak[i] <= m) {
tablica[0][i +1] = redak[i];
i++;
}
}
while (j<S) {
//printf ("Stupac %d ",j);
scanf ("%d", &stupac[j]);
if (stupac[j] >= 10 && stupac[j]<=50) {
tablica[j+1][0] = stupac[j];
j++;
}
}
printf ("Polje redak:");
for (i=0;i<R-1;i++){
printf (" %d,", redak[i]);
}
for (i;i==R-1;i++)
printf (" %d",redak[i]);
printf ("\nPolje stupac:");
for (j=0;j<S-1;j++){
printf (" %d,", stupac[j]);
}
for (j;j==S-1;j++)
printf (" %d",stupac[j]);
printf ("\n");
for(j = 1; j < STUPAC; j++) {
for(i = 1; i < RED; i++) {
tablica[i][j]=redak[j-1]*stupac[i-1];
}
}
printf ("Dvodimenzionalno polje:");
for (j=1;j<=3;j++){
for(i=1;i<= 5; i++){
if (j==3&&i==5)
printf (" %d ", tablica [j][i]);
else
printf (" %d,", tablica [j][i]);
}
}
printf ("\n\n");
printf ("Ispis tablice mnozenja:");
printf ("\n\n");
for (i=0;i<R;i++){
printf ("\t%d",redak[i]);
}
printf ("\n\n");
for (j=0;j<S;j++){
printf ("%d",stupac[j]);
printf ("\n\n");
}
for (j=1;j<RED;j++){
for (i=1;i<STUPAC;i++){
printf ("\t%d",tablica[j][i]);
}
printf("\n\n");
}
return 0;
}
Ajoj što si ga zakomplicirao.
Tri stvari:
1. Koristiti imena varijabli koja imaju neko značenje, 'n', 'm' i slično ne govore ništa. Takva imena prolaze samo u jednostavnim petljama kao brojači. Isto tako, makro konstante čije je ime jedno jedino slovo vrijeđaju oči onoga tko ih čita.
2. Što je ovo:
for (j = 1; j < STUPAC; j++)
{
for (i = 1; i < RED; i++)
{
tablica[i][j] = redak[j - 1] * stupac[i - 1];
}
}
Zašto brojače postavljaš na početnu vrijednost 1 samo da bi kasnije oduzimao tu istu jedinicu par linija niže? Nepotrebno komplicira kod.
3. Što je ovo:
for (i; i == R - 1; i++)
printf(" %d", redak[i]);
Mislim, vidim što to radi, ali znaš li ti što se tu događa? Vrlo vjerojatno ne, jer ne vidim smisao takvog konstrukta. Takva slična petlja se ponavlja na još jednom mjestu pa mi stvarno ništa nije jasno.
Pogledaj ovo za usporedbu:
#include <stdio.h>
int main()
{
int brojStupaca, brojRedaka;
printf("Unesi broj stupaca: ");
scanf("%d", &brojStupaca);
printf("Unesi broj redaka: ");
scanf("%d", &brojRedaka);
if (brojStupaca > 10 || brojRedaka > 10)
{
printf("Prevelik broj stupaca ili redaka!");
return 1;
}
int brojevi[brojStupaca], mnozitelji[brojRedaka];
int tablica[brojRedaka][brojStupaca];
printf("\n");
// unos svih brojeva
for (int n = 0; n < brojStupaca; n++)
{
printf("Unesi %d. broj: ", n + 1);
scanf("%d", &brojevi[n]);
}
printf("\n");
// unos svih mnozitelja
for (int n = 0; n < brojRedaka; n++)
{
printf("Unesi %d. mnozitelj: ", n + 1);
scanf("%d", &mnozitelji[n]);
}
// upis umnozaka u tablicu
for (int redak = 0; redak < brojRedaka; redak++)
{
for (int stupac = 0; stupac < brojStupaca; stupac++)
{
tablica[redak][stupac] = brojevi[stupac] * mnozitelji[redak];
}
}
printf("\n\t");
// ispis brojeva
for (int n = 0; n < brojStupaca; n++)
printf("%d\t", brojevi[n]);
printf("\n");
// ispis mnozitelja i tablice
for (int redak = 0; redak < brojRedaka; redak++)
{
printf("%d\t", mnozitelji[redak]);
for (int stupac = 0; stupac < brojStupaca; stupac++)
{
printf("%d\t", tablica[redak][stupac]);
}
printf("\n");
}
return 0;
}
Kako ti se čini? Komentari? Pitanja?
Da ti i odgovorim na pitanje, trebaš samo prije nego što kreneš ispisivati svaki redak ispisati mnozitelj za taj redak.
1.u zadatku je zadano M i N pa eto zato i ja koristim znam da ja mogu upisati sta hocu ali eto
2. Nemam pojma zasto sam to radio a isto vrijedi i za 3
Pitanja nemam, trebao sam samo neke ispravke napraviti jer se u zadatku trazi da uvijek ima 5 brojeva i 3 mnozitelja ali ostalo je super.
Puno hvala
Poz jel ima netko neku stranicu sa zadatcima u C-u za vježbu znam za mojwebdizajn može biti i na engleskom važno da imaju rješenja, početnički zadatci. Hvala
ImašHONI i Infokup na hrvatskom, tu su ti zadaci i rješenja u PDF. Probaj i spoj.pl, imaš dosta zadataka od samih početaka pa sve do komplikovanih algoritama. Možeš probati čitati neke knjige o algoritmima i strukturama podataka, a i knjige koje su namjenjene pripremanju za natjecanja, poput Napredno Programiranje u C++.
Sretno.
Evo mene opet :), ovaj put je laksi zadatak sa laksim problemom ali mi ne ide. Program treba ispisivati koliko se puta koja znamenka pojavila i to za sve znamenke bez obzira da li se ona pojavila ili ne, a meni ispisuje od prve unesene.
#include <stdio.h>
int main()
{
int broj, i, pom;
int brojac[10] = { 0 };
scanf("%d", &broj);
for (i=0;i<10;i++){
while(broj){
i=broj%10;
broj=broj/10;
brojac[i]++;
}
printf ("broj %d se pojavljuje %d puta\n",i,brojac[i]);
}
return 0;
}
To ti se događa zato što unutar while petlje modificiraš varijablu 'i' koja ti služi kao brojač u vanjskoj for petlji.
I kad smo već kod toga, posve je nepotrebno da ti while petlja stoji unutar for petlje. Izvadi ju van i neka se izvrši prije for petlje.
Nisam dugo kodirao u C-u, pa sam neke stvari i zaboravio.
Ako otvorim datoteku s fopen i onda u nekoj drugoj funkciji ponovno stvorim FILE pointer i otvorim istu datoteku s fopen, krajnji rezultat (tj. ono sto ce se dogoditi) ovisi o implementacijskim detaljima.
Konkretno, iz C standarda:
1) "The address of the FILE object used to control a stream may be significant; a copy of a FILE object need not serve in place of the original."
i
2) "Functions that open additional (nontemporary) files require afile name, which is a string. The rules for composing valid file names are implementation-defined. Whether the same file can be simultaneously open multiple times is also implementation-defined."
Ok, dakle sto se boldanoga iz 2) tice, funkciji predajem vec koristeni FILE pointer. No, s obzirom na 1), nije mi sad bas jasno da li mogu napraviti ovo:
funkcija(FILE* datoteka)
{
FILE* f = datoteka;
fseek(f, bla bla);
// bla bla
}
Zna netko?
U praksi varijabla 'f' je nepotrebna, mozes koristit 'datoteka' direktno.
No i ako uzmemo primjer cisto radi ilustracije, radit ce, jer 1) tu nije primjenjivo: u 'FILE* f = datoteka;' nema kopiranja objekta, vec incijaliziras jedan pointer vrijednoscu drugoga, a i dalje je samo jedan objekt u igri.
U praksi varijabla 'f' je nepotrebna, mozes koristit 'datoteka' direktno.
No i ako uzmemo primjer cisto radi ilustracije, radit ce, jer 1) tu nije primjenjivo: u 'FILE* f = datoteka;' nema kopiranja objekta, vec incijaliziras jedan pointer vrijednoscu drugoga, a i dalje je samo jedan objekt u igri.
Znam da nije potrebna, ali volim da mi svaka funkcija ima "svoje" varijable s kojima unutar nje radim.
Ok, hvala.
Znam da nije potrebna, ali volim da mi svaka funkcija ima "svoje" varijable s kojima unutar nje radim.
Ok, hvala.
'datoteka' i jest varijabla te funkcije.
'datoteka' i jest varijabla te funkcije.
Zato navodnici. :D
Eto, tako pisem kod.
funkcija(int broj)
{
nekiBroj = broj;
// dalje radim s nekiBroj
}Da li je to dobro ili nije, ne znam, toga se uvijek drzim kad pisem svoj kod, kompajler to ionako optimizira.
Nepotrebno zauzimaš novu memoriju... ;)
htio bih napraviti nesto slicno kao u dosu kad se poziva program sa argumentima samo sta ovo se iz programa poziva funkcija i uz nju argument , znaci htio bih upisat u liniju
ime_funkcije argument_char
moze pomoc kako da to ostvarim
e tako nesto, ja bih to probao ka preko nacina kao sto su argc i argv za main ali neznan kako
e tako nesto, ja bih to probao ka preko nacina kao sto su argc i argv za main ali neznan kako
Pa argc je nista drugo nego broj stringova na koje pokazuje argv, a argv je polje pointera na stringove.
e tako nesto, ja bih to probao ka preko nacina kao sto su argc i argv za main ali neznan kako
To samo po sebi ne mora biti nešto komplicirano, ali može biti komplicirano. Ovisno o tome koliko daleko želiš ići s time.
Prvo i osnovno što moraš napraviti je razbiti liniju teksta na niz nekakvih tokena. Za to možeš koristiti strtok ili, budući da je ta funkcija prilično trivijalna, iskemijati nekakvo svoje rješenje koje ti možda više odgovara.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char *command; // pokazivač na komandu
int nArgs; // broj argumenata u polju
char *args[20]; // polje od 20 pokazivača na po jedan argument
} CMD, *PCMD;
void GetCmdArgs(PCMD command, char *line);
int main()
{
int quit = 0;
char commandLine[255];
CMD cmd = {0};
while (!quit)
{
memset(&cmd, 0, sizeof(CMD));
printf(">");
fgets(commandLine, 255, stdin);
GetCmdArgs(&cmd, commandLine);
if (cmd.command[0] == 0)
{
printf("blank line!\n\n");
continue;
}
printf("command: %s\n", cmd.command);
for (int n = 0; n < cmd.nArgs; n++)
printf(" arg[%d]: %s\n", n, cmd.args[n]);
if (strcmp(cmd.command, "exit") == 0)
quit = 1;
printf("\n");
}
return 0;
}
int SkipWhitespace(char *line, int offset)
{
for ( ; line[offset] < 33 && line[offset] > 0; offset++) {};
return offset;
}
int SkipLetters(char *line, int offset)
{
for ( ; line[offset] > 32; offset++) {};
return offset;
}
void GetCmdArgs(PCMD command, char *line)
{
int offset = 0;
// preskoči moguće razmake na početku
offset = SkipWhitespace(line, offset);
// spremi pokazivač na komandu
command->command = line + offset;
offset = SkipLetters(line, offset);
// jesmo li na kraju stringa?
if (line[offset] == 0 || line[offset] == '\n')
{
// terminiraj komandu
line[offset] = 0;
return;
}
else
{
// terminiraj komandu
line[offset] = 0;
offset++;
}
// preskoči sve razmake između komande i argumenta
offset = SkipWhitespace(line, offset);
// dohvati sve argumente
do
{
// spremi pokazivač na argument
command->args[command->nArgs] = line + offset;
offset = SkipLetters(line, offset);
command->nArgs++;
// ako još nismo došli do kraja stringa
if (line[offset] != 0 || line[offset] == '\n')
{
// terminiraj argument
line[offset] = 0;
offset++;
}
// preskoči sve razmake koji dolaze nakon argumenta
offset = SkipWhitespace(line, offset);
}
while (line[offset] && command->nArgs < 20);
}
Eto nešto što si možeš analizirati. Moguće je da sam napravio neku glupost, kasno je, ali mislim da prenosi opću ideju kako bi to otprilike mogao napraviti.
Dobiješ bonus bodove ako skužiš da ti varijabla 'offset' zapravo i ne treba i da (uz sitne preinake) možeš umjesto korištenja te varijable jednostavno direktno inkrementirati pokazivač na liniju teksta.
Zdravo kolege programeri,
radim zadacu iz predmeta Windows programiranje, cilj je napraviti nesto slicno paintu. Uz dodatni prozor za odabir boje, debljine olovke i slicno.
Sve sam to rijesio ali imam jedan problem, u tekstu zadatka stoji da klikom odgovaracujom tipkom misa (recimo desnim klikom) na odgovarajucu boju (koja je button)
odaberemo tu boju za iscrtavanje tim klikom misa.
Znaci desni klik na button crvena-> boja olovke za crtanje desnim klikom crvena.
Jel neko od vas mozda zna na koji to nacin rijesiti? JA sam dosta guglao ali nisam naletio na prave stvari.
Za lijevu tipku misa naravno nije problem.
@Codebreaker:
Postoje i drugi načini da dohvatiš desni klik na button, ali "the right way" bi ti bio subclassirati (ili čak superclassirati) button kontrolu. Na hrvatskom: moraš ubaciti vlastiti window procedure u instancu button kontrole. To je mehanizam kojim win32 api simulira nasljeđivanje i polimorfizam.
Trenutno stanje je:
Poruka -> ButtonWindowProcedure -> DefWindowProcedure
A ti želiš postići:
Poruka -> CustomWindowProcedure -> ButtonWindowProcedure -> DefWindowProcedure
I onda u svojoj window proceduri moraš obraditi WM_RBUTTONDOWN i WM_RBUTTONUP poruke i o tome izvijestiti prozor roditelj. No problem, pushbutton ne reagira na desni klik, pa iako ćeš samim tim slanjem poruka roditelju postići željeni učinak i dalje nećeš dobivati vizualni feedback da si zapravo i pritisnuo gumb. To se može riješiti fejkanjem WM_LBUTTONDOWN i WM_LBUTTONUP poruka slijedećoj proceduri u nizu ali to još više komplicira stvari.
Mogao bih ti sada napisati nekakav primjer, ali neću. Ovo doista moraš shvatiti sâm kako treba da ne bi bilo dafuq situacija kasnije. Evo ti linkovi, prouči ih, i ako ti nakon toga i dalje nije jasno ja ću nakucati nešto koda i potruditi se što je moguće bolje objasniti:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773183%28v=vs.85%29.aspx
http://cboard.cprogramming.com/windows-programming/148771-subclassing-edit-box.html
http://winapi.foosyerdoos.org.uk/info/sub_superclass.php
P.S.
Mogao bi i razmisliti o pisanju vlastite kontrole za tu svrhu, kada već ionako trebaš toliko invazivno djelovati na button (koji ni od početka nije bio posve idealan izbor, jesam li u pravu?) praktički ti količina posla izađe na isto a manje je "prljavo".