Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mali Programcic u C Problemcic

[es] :: C/C++ programiranje :: Mali Programcic u C Problemcic

[ Pregleda: 3660 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

miros21k

Član broj: 22204
Poruke: 21
*.mdx.ac.uk



Profil

icon Mali Programcic u C Problemcic29.03.2004. u 16:39 - pre 244 meseci
E narode, ako neko moze da pomogne jako bi bio zahvalan.

Stvar je sledeca: radimo u skoli na nekim kompovima koji su povezani sa nekom LED tablom.

Na toj tabli ima 8 LEDs (lampica), i mi moramo da napravimo program koji ce brojati od 1 do 255 (pokazujuci brojeve u binarnom na lampicama) ako se stisne na tastaturi U, a ako se stisne D onda ce da broji u nazad.
Radimo u parovima i moj partner zna vise programianje nego ja i dosli smo do sledeceg koda.
Ovaj kod nam broji sve kako mi hocemo unapred i unazad ali moramo stalno stiskati U ili D da bi nastavio da broji unapred ili unazad (umesto da nastavlja sam).

Ovako kod izgleda, pa ako neko ima neke sugestije bilo bi super.

#include <conio.h>
#include <stdio.h>
#include <dos.h>
#define CONTROL 0x1B7
#define PORTA 0x1B4
#define PORTB 0x1B5
#define SETUP 0x82

int main(void)
{
outportb(CONTROL,SETUP);

while(!kbhit())
{
int a=0;
char key;
key=getch();

if (key=='d')
{
a--;
outportb(PORTA,a);
delay(1000);
}

if (key=='u')
{
a++;
outportb(PORTA,a);
delay(1000);
}
}

return(0);
}



Hvala !
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: Mali Programcic u C Problemcic29.03.2004. u 19:12 - pre 244 meseci
Problam je bio u getch(). Program jednostavno stane i ceka da nesto dodje sa tastature. Morate da to izbegnete. Nadam se da ce sledeci code resiti problem...

Code:

int main(void)
{
 int dir = 0; /* pravac -1 za dole 1 za gore*/
 int quit = 0; /* flag za kraj programa*/
 int pos=0;  /* trenutno stanje brojaca */

 outportb(CONTROL,SETUP);
 
 while(!quit)
 {
   if (kbhit())  /* Da se desio neki dogadjaj sa tastature? */
    {
     char key;
     key=getch(); /* Koji je taster pritisnut */

     if (key == 'd') dir = -1; /* promeni dir na -1*/
     else if (key == 'u') dir = 1; /* promeni dir na 1*/
     else if (key == 'q') quit = 1; /* signaliziraj kraj*/
    }

  outportb(PORTA,pos);
  pos += dir;
  if (pos > 255) pos = 0;
  if (pos < 0) pos = 255;
  delay(1000);
 }

return(0);

 
Odgovor na temu

miros21k

Član broj: 22204
Poruke: 21
*.dsl.pipex.com



Profil

icon Re: Mali Programcic u C Problemcic30.03.2004. u 02:03 - pre 244 meseci
Iako slabo se razumem u C, mislim da vidim sta si uradio.

Samo za brojanje 1..pa 2..pa 3..itd receno nam je da koristimo "increment"
a za unatrag 5..pa 4...pa 3 (naprimer) da koristimo "decrement", zato smo mi u kodu imali a++ i a--
(Da li bi se nekako moglo to staviti umesto onog tvog dir = 1 i dir = -1 ?)

Isto tako ne samo "q" taster da gasi program vec bilo koji sa tastature (osim naravno "d" i "u"). (Kako bi se to izvelo?)

Hvala ti puno.
P.S. Ovaj zadatak je "part 2" od jednog veceg pitanja i cim mi partner posalje "part 1" koji nam radi, postiracu ga ovde da vidis princip na kome radimo (jer ovaj part 2 je samo nadogradnja pd "part 1").
 
Odgovor na temu

DeepInBrain
Aleksandar Demkovic
Software developer, DMS Group
Novi Sad

Član broj: 7360
Poruke: 45
*.ftn.ns.ac.yu



Profil

icon Re: Mali Programcic u C Problemcic30.03.2004. u 14:05 - pre 244 meseci
evo da se i ja umesam :)

koliko vidim covek je koristio ono dir kao skracenicu od direction. Znaci da je to smer u kojem se tvoj brojac krece (nepred-nazad).
Ono pos += dir; sabira pos sa dir, tako da ti dir predstavlja ono ++ i --, jer je ili 1 ili -1. Ako bas zelis preko -- i ++, morao bi malo da zakomplikujes uvodjenjem uslova.
U stvari mozda i ne bi, probaj ovako:
//-------------------------------------------------------------------
while(!quit)
{
outportb(PORTA,pos); // PREMESTEN !!!

if (kbhit()) /* Da se desio neki dogadjaj sa tastature? */
{
char key;
key=getch(); /* Koji je taster pritisnut */

if (key == 'd') pos--;
else if (key == 'u') pos++;
else if (key == 'q') quit = 1; /* signaliziraj kraj*/
}

if (pos > 255) pos = 0;
if (pos < 0) pos = 255;
delay(1000);
}
//========================================================

Nisam ovo probao, tako da mozda ima sint. greski...
~ Demkovic ~
 
Odgovor na temu

miros21k

Član broj: 22204
Poruke: 21
*.dsl.pipex.com



Profil

icon Re: Mali Programcic u C Problemcic01.04.2004. u 00:15 - pre 244 meseci
Hvala svima.

Kao sto sam reko evo "part 1" pa vidite na njega samo treba da se nadogradi "part 2".

Part 1 je samo da se broji u binarnom od 1-255 na tih 8 LEDs i ovako smo uradili.

Code:

/* a program that counts up in binary on the eight LEDs*/

#include <conio.h>
#include <stdio.h>
#include <dos.h>

#define CONTROL 0x1B7
#define PORTA 0x1B4
#define PORTB 0x1B5
#define SETUP 0x82


int main (void)
{
int i=0;                        

outportb(CONTROL,SETUP);            

while (!kbhit())
    {
        outportb(PORTA,i++);
        delay (1000);
    }
    return (0);
}


Partnerka kaze da je uspela da sredi "part 2" za koji sam ja ovde potrazio pomoc, ali mi izgleda malo predugacak, pa ako neko moze ikako da proveri dal valja i dal moze da se skrati. bio bi jako jako zahvalan.

Part 2:
Code:

#include <conio.h>
#include <stdio.h>
#include <dos.h>

#define CONTROL 0x1B7
#define PORTA 0x1B4
#define PORTB 0x1B5
#define SETUP 0x82


int getCountUp();
int getCountDown();


int main (void)
{
    char Uletter;
    

    outportb(CONTROL,SETUP);


    Uletter = getchar();
    switch (Uletter)
    {
    case 'U':
            getCountUp();
            break;
    case 'u':
            getCountUp();
            delay (1000);
        break;

    case 'D':
            getCountDown();
            break;
    case 'd':
            getCountDown();
            delay (1000);
        break;
    
    }
    return (0);



int getCountUp ()
{
    int i = 0;
    while (!kbhit())

    {
        outportb(PORTA,i++);
        delay (1000);
    }
    return (0);
}

int getCountDown()
{
    int i=128;
    while (!kbhit())

    {
    outportb(PORTA,i--);
    delay (1000);
    }
    return (0);
}

 
Odgovor na temu

spaka-s
Crna Gora

Član broj: 23693
Poruke: 31
195.66.174.*



+1 Profil

icon Re: Mali Programcic u C Problemcic01.04.2004. u 15:40 - pre 244 meseci
Ma koliko sam ja vidio kod je OK, mada ga nisam probao.
To sto se tebi cini da je "velik" , nema veze.Koristila je klasicne f-je uz pomoc switch naredbe,odnosno ono njeno Uletter se dobija sa tastature /*gechar()*/ i samo ga prosledjuje doslovce prevedeno kao svic.Ako uneses taster ...uradi ovo, ako uneses...uradi ovo :) Ono osnovno za digitron :)
Poz!
Citav zivot je jedna velika aproksimacija ...
 
Odgovor na temu

miros21k

Član broj: 22204
Poruke: 21
*.dsl.pipex.com



Profil

icon Re: Mali Programcic u C Problemcic20.04.2004. u 09:45 - pre 243 meseci
Svaka cast svima sto su pomogli sa svojim odgovorima, ali juce tek sam bio na ocenjivanju tog programa i prvi program sto je YOOYO napisao je radio, ovi ostali su izbacivali neke error koje ja nisam IMO POJMA kako da resim.

Thanx jos jednom. POZ !
 
Odgovor na temu

slavkot

Član broj: 18657
Poruke: 166
*.teol.net



Profil

icon Re: Mali Programcic u C Problemcic22.04.2004. u 19:12 - pre 243 meseci
Pozdrav,da ne zapocinjem novu temu,zasto gore navedeni program ne radi
u dev-cpp,javlja se sledeca greska:
[Linker error] undefined reference to "outportb"
[Linker error] undefined reference to "outportb"
[Linker error] undefined reference to "delay"
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: Mali Programcic u C Problemcic22.04.2004. u 19:25 - pre 243 meseci
Tvoj program moze da radi samo pod DOS-om i da se prevede sa kompajlerima koji mogu da generisu .EXE za DOS. Funkcija outportb upisuje na neki port neku vrednost. To pod Windowsima ili Linuxom nije dozvoljeno. Pristut portovima je u potpunosti drugaciji u Windowsima i u Linuxu u odnosu na DOS.
Dev-cpp je kompajler za Linux (nisam siguran za Linux ) ili Windows i nije u stanju da prevede tvoj program jer ne postoje odgovarajuci headeri i biblioteke koje sadrze doticnu funkciju.

yooyo


 
Odgovor na temu

slavkot

Član broj: 18657
Poruke: 166
*.teol.net



Profil

icon Re: Mali Programcic u C Problemcic22.04.2004. u 19:49 - pre 243 meseci
Jel to znaci da pomocu njega ne mogu nikako ostvariti komunikaciju sa portovima?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Mali Programcic u C Problemcic22.04.2004. u 20:18 - pre 243 meseci
Ovo smo objašnjavali već x puta. Koristi malo opciju "pretraga" na C/C++ forumu i naći ćeš dosta dobre odgovore na ovo pitanje.
 
Odgovor na temu

slavkot

Član broj: 18657
Poruke: 166
*.teol.net



Profil

icon Re: Mali Programcic u C Problemcic23.04.2004. u 17:20 - pre 243 meseci
Opet ja,sad sam uzeo kompajler Turbo c++ i iskompajlirao gore navedeni kod,
nema gresaka ni upozorenja,pokrenem ga,ali opet nemam nikakvog signala na portu,
da ne treba tu dodati neki drajver ili nesto slicno ili na valja XP ?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Mali Programcic u C Problemcic23.04.2004. u 18:54 - pre 243 meseci
Jesi li ti uopšte pogledao teme koje sam pomenuo malopre? Uradi potragu za reč "port" i naći ćeš gomilu tema koje lepo objašnjavaju zašto se to dešava.
 
Odgovor na temu

slavkot

Član broj: 18657
Poruke: 166
*.teol.net



Profil

icon Re: Mali Programcic u C Problemcic23.04.2004. u 19:17 - pre 243 meseci
Pa trazio sam vec 15 puta,ali nema nista konkretno, sta se ljutis
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: Mali Programcic u C Problemcic23.04.2004. u 19:35 - pre 243 meseci
Program ce ti raditi samo pod DOS-om. Ako je XP u pozadini on ce spreciti bilo kakav pristup portu. Znaci... potrazi diskete sa DOS-om, napravi particiju, instaliraj DOS i testiraj program...

yooyo
 
Odgovor na temu

slavkot

Član broj: 18657
Poruke: 166
*.teol.net



Profil

icon Re: Mali Programcic u C Problemcic23.04.2004. u 19:44 - pre 243 meseci
Tako objasni da se zna sta i kako , hvala na odgovoru
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Mali Programcic u C Problemcic23.04.2004. u 20:18 - pre 243 meseci
Citat:
slavkot:
Pa trazio sam vec 15 puta,ali nema nista konkretno, sta se ljutis


Ima:
http://www.elitesecurity.org/tema/27954

Ne ljutim se, samo ne volim da se forum zatrpava ponavljanjem starih pitanja.
 
Odgovor na temu

slavkot

Član broj: 18657
Poruke: 166
*.teol.net



Profil

icon Re: Mali Programcic u C Problemcic24.04.2004. u 01:00 - pre 243 meseci
U pravu si,moja greska,sorry
 
Odgovor na temu

[es] :: C/C++ programiranje :: Mali Programcic u C Problemcic

[ Pregleda: 3660 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.