Moji projekti

Teme koje se tiču programiranja

Moderator: Urednik

Post Reply

Poznata ličnost
Poznata ličnost
offline
User avatar

Posts: 81
Joined: 03 Apr 2012, 19:18

Post Napisano: 16 Sep 2012, 11:01


Ovaj post sam pokrenuo iz dva razloga. Prvi razlog je taj da mi programeri ne bi lutali i pisali sve i svašta, nego da se fokusiramo na konkretne probleme koji se dešavaju u praksi i da ih rešavmo. Drugi razlog je taj što i kada nešto napišemo uvek se pojavi neka grupica ljudi koji imaju nameru da kritikuju ono što je napisano i da se prepucavaju sa ostatkom fruma. To nam ne treba. Cilj ovog posta je prvo da se okupe na jednom mestu svi programeri i korisnici računara, gde će da korisnici računara daju konkretne stvari koje su problem, a da programeri sa duge strane sednu i reše programski taj problem. Drugo da programeri kada reše određeni problem mogu da pored objavljivanja izvornog koda, objave i dokumentaciju kojoj će da piše šta taj program konkretno radi. Treće mogu u svojoj bigrafiji za posao da napišu da su rešli programski problem i da je to što je napisao podržano od korisnia ovog foruma.

Naravno treba da se i programeri medjusobno pomažu time što će neki programer napisati neku odredjenu strkturu, fnkciju, klasu, biblioteku ili već šta je potrebno tom nekom programeru. Kako to izgleda u praksi. Primer 1. javi se korisnik x koji kaže da mu ne radai asunder. Radi šta mu se ćefne. Onda ja sa interneta uzmem tu verziju asundera sednem napišem skriptu koja će kada se instalira da ispravi sve greške kod te verzije asundera i to objavim ovde na forumu. Primer 2. javi se korisnik y koji kaže da bi hteo da sa slackware-om pronalazi šifre za zaključane nečije wireless mreže, onda programer Pera seden i napiše sve skripte koji su potrebni kako bi se razbile sve vrste zaštita i došlo do šifre koja bi se prikazala u nekom text box-u.

P.S. Zahvaljujem se Bcketu što mi je dao linkove za libeoffice.



Administrator
Administrator
offline
User avatar

Posts: 4590
Joined: 04 Feb 2011, 20:32
Location: Beograd
Contact:

Post Napisano: 16 Sep 2012, 11:11


Marjan je postavio temu u dogovoru sa mnom. Koliko sam shvatio želi da utvrdi i praktično potkova svoje znanje i programersko umeće na konkretnim problemima.

Samo mala napomena: ovo sa razbijanjem šifara je u suprotnosti sa pravilnikom. Takve stvari nećemo moći da dopustimo.



Administrator
Administrator
offline
User avatar

Posts: 877
Joined: 25 May 2008, 10:44
Location: Valjevo, Srbija

Post Napisano: 16 Sep 2012, 11:40


Samo mala sugestija. Marjane, potrudite se da sve što radite u ovom delu foruma bude u skladu sa važećim zakonskim normama i da se ne može podvesti pod bilo koji oblik cyber kriminala. Razbijanje šifara na tuđim wi-fi mrežama upravo predstavlja klasičan primer nečega što administracija ovog foruma (i trenutno zakonodavstvo države u kojoj živimo) ne smatra legalnim i strogo zabranjuje. Takođe, ono što si izneo ne smatra se programiranjem u pravom smislu, više je u pitanju pravljenje/izmena skripti za rešavanje određenog problema.
nije važno samo raditi ono što voliš...važnije je voleti ono što radiš



Administrator
Administrator
offline
User avatar

Posts: 4590
Joined: 04 Feb 2011, 20:32
Location: Beograd
Contact:

Post Napisano: 16 Sep 2012, 12:06


Juče nisu pominjani primeri. :) Ja sam nekako stekao utisak da se radi o malim projektima u C-u na kome bi čovek naučio osnove Unix/POSiX programiranja kroz praktične probleme.

Pitao me je da li postoji neki konkretan problem koji je potrebno rešiti. E sad. Na ovakav način objašnjeno (ako se izuzme nezakoniti primer), to je više neka vrsta tech supporta, nego stvarno programiranje.

Recimo, ja sam to zamislio malo drugačije. Napr: jedan od dobrih projekata/vežbi po meni bi bilo napisati svoj shell.



Administrator
Administrator
offline
User avatar

Posts: 4590
Joined: 04 Feb 2011, 20:32
Location: Beograd
Contact:

Post Napisano: 17 Sep 2012, 07:01


Evo ti jedna malo jednostavnija ideja za projekat.

Napiši program koji invertuje veličinu slova naziva svih datoteka u trenutnom direktorijumu, sa mogućnošću da preimenuje sve datoteke u nazive sa svim malim slovima, odnosno svim velikim slovima. Takođe bi bilo dobro da ima mogućnost da promeni naziv tako da je samo prvo slovo veliko.

Ulaz:
Datoteka

Izlaz
dATOTEKA

Ulaz
Datoteka

Izlaz
DATOTEKA

Ulaz
Datoteka

Izlaz
datoteka

Ulaz
DATOTEKA

Izlaz
Datoteka



Poznata ličnost
Poznata ličnost
offline
User avatar

Posts: 81
Joined: 03 Apr 2012, 19:18

Post Napisano: 18 Sep 2012, 13:08


Hvala momci. Biće mi zadovoljstv da rešim problem. Hteo bih da se i još neko priključi i rešave neki odredjeni problem.



Poznata ličnost
Poznata ličnost
offline
User avatar

Posts: 81
Joined: 03 Apr 2012, 19:18

Post Napisano: 21 Sep 2012, 12:44


evo rešenja problema

Code: Select all

#include<stdio.h>
int main ()
{
    char c;
    int b, d, i;
    fprintf(stdout,"Unesite datoteku:");
    fscanf(stdout, "%c", &c);
    printf("Unesite broj (1-samo mala slova, 2-samo velika slova, 3-prvo veliko sve ostalo malo, 4-prvo malo sva ostalo veliko):");
    scanf("%d", &b);
    d=strlen(s);
    swich(b)
    {
        case b==1:
        if(s!='' && s!='_' && s!='-' && s!=',' && s!='.')
        {
            for(i=0; i<=d; i++)
            {
                if(s<=97 && s<=122)
                s=s-32;
                else
                if(s<=65 && s<=90)
                s=s
            }
        }
        break;

        case b==2:
        if(s!='' && s!='_' && s!='-' && s!=',' && s!='.')
        {
            for(i=0; i<=d; i++)
            {
                if(s<=65 && s<=90)
                s=s+32;
                else
                if(s<=65 && s<=90)
                s=s
            }
        }
        break;

        case b==3:
       if(s!='' && s!='_' && s!='-' && s!=',' && s!='.')
        {
            for(i=0; i<=d; i++)
            {
                if(i==0)
                {
                  if(s<=65 && s<=90)
                  s=s+65;
                }
                else
                s=s;
                if(s<=97 && s<=122)
                s=s-32;
                else
                if(s<=65 && s<=90)
                s=s
            }
        }
        break;

        case b==4:
        if(s!='' && s!='_' && s!='-' && s!=',' && s!='.')
        {
            for(i=0; i<=d; i++)
            {
                if(i==0)
                {
                  if(s<=97 && s<=122)
                  s=s-32;
                }
                else
                s=s;
                if(s<=97 && s<=122)
                s=s;
                else
                if(s<=65 && s<=90)
                s=s+32;
            }
        }
        break;
    }
}



Administrator
Administrator
offline
User avatar

Posts: 4590
Joined: 04 Feb 2011, 20:32
Location: Beograd
Contact:

Post Napisano: 11 Oct 2012, 23:02


Tek sad sam stigao da bacim pogled na ovo što si postavio. Marjane, ovaj kod sadrži nekoliko upozorenja i grešaka.

Upozorenja
1. marjan.c:10:7: warning: incompatible implicit declaration of built-in function ‘strlen’ [enabled by default]

Strlen se nalazi u string.h, tako da je potrebno uključiti i njega.

Greške
1. marjan.c:10:14: error: ‘s’ undeclared (first use in this function)

Promenljiva s nije definisana.

2. marjan.c:12:5: error: expected ‘;’ before ‘{’ token

Ovo je vrlo verovatno vezano za neispravno napisanu komandu switch (fali ti "t").

3. Ostale greške su vezane za grešku broj 1.

Dodatne napomene

1. Ne vršiš proveru unosa. Da li je unesen broj, specijalni karakter ili slovo?

2. Možda ne bi bilo loše da program bude neinteraktivan.

napr:

Code: Select all

program -v *
Ovde postoje dve novosti: obrada komandnih opcija i ekspanzija izraza (*). I jedno i drugo je moguće postići sa funkcijama koji su deo GNU C biblioteke. Za jedno bi bilo potrebno da baciš pogled na getopt funkciju, a za drugo glob funkciju.

Na Sleku su dostupne i man strane za ove dve funkcije:

Code: Select all

man 3 glob
man 3 getopt



Administrator
Administrator
offline
User avatar

Posts: 4590
Joined: 04 Feb 2011, 20:32
Location: Beograd
Contact:

Post Napisano: 16 Oct 2012, 09:45


Igrao sam se malo s ovim i nije preterano komplikovano. Možeš jedino da izbaciš glob (ekspanzija izraza), pošto ovo ipak malo komplikuje kod. Recimo:

Code: Select all

program -m filename1
Ideja sa oduzimanjem ASCII kodova nije baš najbolja ideja. Možda je bolje umesto toga koristi tolower i toupper. Na ovaj način otvaraš mogućnost da u budućnost prebaciš kod da koristi wide char varijante: towupper i towlower kako bi program radio i za imena datoteka koje ne koriste ASCII (latin2 latinica, ćirilica). tolower i toupper se nalaze u ctype.h. towlower i towupper se nalaze u wctype.h.



Administrator
Administrator
offline
User avatar

Posts: 4590
Joined: 04 Feb 2011, 20:32
Location: Beograd
Contact:

Post Napisano: 16 Nov 2012, 13:27


Evo ti i primer cele implementacije. Ovo ne podržava unicode i napisano je jedne hladne oktobarske noći. Daleko da smatram kod savršenim, ali mislim da je dobar primer.
chcase-0.1.0.tar.gz

Ovde je i spisak svih datoteka u arhivi:

Code: Select all

-rw-r--r-- 1 bocke users   115 Oct 16 14:57 AUTHORS
-rw-r--r-- 1 bocke users 18093 Oct 16 14:53 COPYING
-rw-r--r-- 1 bocke users   186 Oct 16 14:56 INSTALL
-rw-r--r-- 1 bocke users   464 Nov 16 13:18 Makefile
-rw-r--r-- 1 bocke users   544 Oct 16 14:54 README
-rw-r--r-- 1 bocke users  1400 Nov 16 13:05 case.c
-rw-r--r-- 1 bocke users   346 Oct 16 03:30 case.h
-rw-r--r-- 1 bocke users   727 Oct 16 13:06 main.c
drwxr-xr-x 2 bocke users  4096 Nov 16 13:15 man
-rw-r--r-- 1 bocke users   666 Oct 16 13:11 misc.c
-rw-r--r-- 1 bocke users   174 Oct 16 14:58 misc.h
drwxr-xr-x 2 bocke users  4096 Nov 16 13:18 slackware

man:
-rw-r--r-- 1 bocke users 706 Nov 16 13:15 chcase.1

slackware:
-rw-r--r-- 1 bocke users   83 Oct 16 17:32 README
-rw-r--r-- 1 bocke users 2716 Nov 16 13:18 chcase.SlackBuild
-rw-r--r-- 1 bocke users  220 Oct 16 17:27 slack-desc
Edit Sad sam setio da nisam stavio GPL zaglavlje u komentar .c i .h datoteka. Ako se budem još nekad igrao s ovim (recimo dodavanje multibyte/wide funkcija), ispraviću to.


Post Reply

Who is online

Users browsing this forum: No registered users and 12 guests