Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
BulgaraCeha slovacaCroataEnglezaEstonaFinlandezaFranceza
GermanaItalianaLetonaLituanianaMaghiaraOlandezaPoloneza
SarbaSlovenaSpaniolaSuedezaTurcaUcraineana

BiologieBudovaChemieEkologieEkonomieElektřinaFinanceFyzikální
GramatikaHistorieHudbaJídloKnihyKomunikaceKosmetikaLékařství
LiteraturaManagementMarketingMatematikaObchodPočítačůPolitikaPrávo
PsychologieRůznéReceptySociologieSportSprávaTechnikaúčetní
VzděláníZemědělstvíZeměpisžurnalistika

PROGRAMOVÁNÍ V C – ZAČÍNÁME

počítačů



+ Font mai mare | - Font mai mic



DOCUMENTE SIMILARE

TERMENI importanti pentru acest document

PROGRAMOVÁNÍ V C – ZAČÍNÁME



OBSAH

Programování v C – Začínáme 

Programování v C – Deklarace proměnných

Simulace stisku klávesy v Assembleru

Program na zjištění IP adresy v C++

Programování v C – Začínáme

Je tu první povídání o programování v C, kde uvedu a rozeberu příklad. Také se dozvíte, které vývojové nástroje používat.

Vítám Vás u mého seriálu, který je zasvěcen programování v C (dále jen cečko). Ale ještě před tím než začneme, chtěl bych Vám představit jeden nástroj, který používám sám a ve kterém budou napsaný všechny příklady. Tímto nástrojem je Dev-C++, který slouží jako kompilátor a vývojové prostředí pro programovací jazyky C a C++. Prostředí se skládá z projektově orientovaného programátorského editoru, který je integrovaný s překladačem jazyka C/C++ (GCC) a nástroji pro ladění programů (GDB 5). Editor podporuje zobrazování syntaxe jazyka a editování „resource“ souborů. S programem je dodávána utilita pro tvorbu instalačního programu a velké množství různých knihoven. Když k tomuto nástroji dodáte runtime knihovnu MinGW nebo Cygnus, mužete vyvinout dokonalé prostředí pro programátora. Dev-C++ si mužete stáhnout z této adresy Bloodshed.net.

Jak se budemé učit? Ze začátku Vám napíši program, který pak postupně rozeberu a vysvětlím.

A teď přístoupíme k našemu prvnímu programu, bohužel to nebude všem známý program 'Hello, World', ale trochu složitější program. Bude totiž využívat jednoduchý vstup a výstup.

/* Tento program bude obsahovat

jednoduchý vstup a výstup */

#include <stdio.h>

int main()

Co dělá tenhle malý programek? Žádá Vás o zadaní čísel, které pak vynásobí a vypíše výsledek. A teď k podrobnějšímu popisu.

První dvě řadky obsahují komentař, který se uzavírá takto /* */ (na více řadků) nebo // (na jednu řadku). Další řádka je příkaz preprocesoru začleňující hlavičkový soubor #include <stdio.h>, který obsahuje všechny údaje potřebné pro správné použití funkcí printf() a scanf(). Pak nastupuje funkce main(), kde úvodní int určuje celočíselný typ návratové hodnoty. Tělo funkce je vymezeno složenými závorkami . Určili jsme typ proměnných int (=celočíselná) a float(=reálná). Na další řádce žádáme uživatele, aby zadal dvě čísla, která se pak uloží do dvou proměnnych pomocí příkazu scanf. Jelikož ukládáme nějaké hodnoty do proměnných p a d, je nutné před tyto proměnné napsat znak &, který vrací adresu proměnné. Tak funkce scanf() pracuje s adresami těchto proměnných. Pak tyto dvě čísla násobíme a výsledek ukládáme do proměnné vysledek, který pak vypisujeme příkazem printf na obrazovku. To samé provadíme na ostatních řádcích.

Na dnešek je to vše.

Programování v C – Deklarace proměnných

Ano, jak jsem mohl zapomenout na proměnné a konstanty, vždyť je to nejduležitější. Jak říkam: 'Všecko do jednoho nenacpeš'. Jak jste jistě pochopili řeč dneska bude o proměnných a jejích deklarací.

Ze začatku Vám napíšu pár indentifikátorů a povím k čemu slouží, pak si povíme něco o typu dat a něco málo o konstantách a ukazatelých.

Indentifikátory – jsou to nějaká jména, která například přiřazujeme proměnným a používáme je. Pozor. Céčko rozlišuje mála a velká písmena u indentifikátorů. Také existují vyjimky – jsou to slova klíčova, která nemužete použít jako indentifikátor. Tady je seznam:

auto
break
case
char
const
continue
default
do

double
else
enum
extern
float
for
goto
if

int
long
register
return
short
signed
sizeof
static

struct
switch
typedef
union
unsigned
void
volatile
while

Typy dat – v minulem članku jsme použili dva typy dat: celočíselny a racionální jsou základní typy.

Datový typ

int, unsigned int, signed int
float
char, unsigned char, signed char
short, unsigned short, signed short
long, unsigned long, signed long
double
long double
enum
pointer

Počet bitů

16 nebo 32
32
8
16
32
64
80
8 nebo 16 nebo 32
16 nebo 32

Význam

celé číslo
racionální číslo
znak
krátké celé číslo
dlouhé celé číslo


výčtový typ
Ukazatel

Co bych k tomu ještě dodal. To nevím, ale přejděme už na konstanty.

Konstanty – jsou několika druhů celočíselné, racionálni a znakové. Pozor: ke konstantam nelze přiřadit operátory přiřazení, inkrementace a dekrementace, funkční volání, operáto čárka. Jak definujeme konstanty? Odpoveď je prostá a jednoduchá. Definujeme je až po klíčovém slovu např.

const int promena=25;
const float racionalni=6.25;

a tak dal. O proměnnych nic říkat nebudu, jelikož jsme je používali v našem předchozím příkladu. Jsou to ty, co jsme definovali jako int a float.

A je to vše, co dneska povíme. V následujícím članku čekejte další příklad neb lehčí se učit na příkladech, než na povídani, které mi už leze krkem. Jaký bude příklad? Budeme počítat slova, řádky a písmena, které napíšeme.

Simulace stisku klávesy v Assembleru

Tento program simuluje stisk klávesy (při stisku klávesy jiné)

Příkazová řádka: 'nasm.exe simul4.asm -o simul4.com -O2'

Ukázka demonstruje závádění rezidentního programu, odchytávání kláves a simulaci stisku kláves.
Program nejprve skočí na zavaděč, který okopíruje rezidentní část, přičemž přepíše nevyužitou část PSP. Poté přesměruje vektor INT9 (IRQ1 - klávesnice) a rezidentní ponechá pouze obslužnou část. Ta při detekci Shift-Tab simuluje F2.


Pokusím se přiblížit pomocí příkladu kódu:

GoTo Init
Init:
move_to_top(Obsluha)
save_handler OLD_HANDLER, INT9
replace_handler Obsluha, INT9
keep Obsluha

end

Obsluha:
if last_key = Shift-Tab then
remove_last_key
add_key(F2)
end if
GoTo far OLD_HANDLER


A tady uz je zdrojak:

org 100h

_zac_  equ 0x49 ;místo, kam budeme Obsluha přenášet (PSP:0x49)

INIT:
;přesun
cld
mov  si,OBSLUHA
mov  di,_zac_
mov  cx,KONEC-OBSLUHA
rep  movsb

;uložení obsluhy
;počítáme relativně k PSP:_zac_
push  byte 0
pop  ds

mov  eax,[0x24]
mov  [cs:OBSLUHA.prepis-OBSLUHA+1+_zac_],eax

;přepis obsluhy
cli
mov  word [0x24],_zac_
mov  [0x26],cs
sti

;make TSR
;dx = použitá část PSP + kód
mov  dx,KONEC+1-OBSLUHA+_zac_
int  0x27


OBSLUHA:
pusha

;původní obsluha - simulování INT
;(musíme volat před naší obsluhou, aby BIOS
;přeložit kód z klávesnice na kód klávesy)
pushf
.prepis
call  1234:1234

;test, jestli byla stisknutá klávesa
;(zabrání opakování při vícebytových kódech)
mov  ah,0x11
int  0x16
jz  .konec

;test na Shift-Tab
cmp  ax,0xf00
jne  .konec

;vymazání Shift-Tab z bufferu
xor  ax,ax
int  0x16

;vložení F2 do bufferu
mov  ah,0x5
mov  cx,0x3c00
int  0x16

.konec

popa
iret

KONEC:

Program na zjištění IP adresy v C++

V našem časopise se nedávno objevil program na zjištění IP adresy na vzdáleném počítači napsaný v Delphi. Byl jsem požádán o podobný příklad ale v C++. V článku najdete zdrojový kód a krátký popis programu.

Zdrojový kód, jak vidíte níže, je velmi jednoduchý. Skládá se pouze z funkce main() konzolové aplikace vytvořené ve VC++ nebo i jiném vývojovém prostředí.

#include <windows.h>
#include <iostream.h>

void main(int argc, char *argv[])


  if (WSAStartup(MAKEWORD(1, 1), &wsadata))
  

   cout << 'Getting IP address of host: ' << argv[1] << endl;

   hostent = gethostbyname(argv[1]);
   if (hostent)
   else
     cout << 'Unable to get IP address.n';

  WSACleanup();
}

Nyní si probereme jednotlivé kroky:

  1. V první podmínce testujeme zda-li je počet parametrů rovný alespoň dvěma. V praxi to znamená, že uživatel musí zadat jméno počítače, u kterého chce získat IP adresu. Pokud nenapíšete žádný parametr, 'do' funkce main() vstupuje pouze jméno programu například IP.EXE a hodnota proměnné argc je 1. V tomto případě program vypíše hlášku 'No host name entered.' a program ukončí.
  2. Pokud tedy uživatel zadal jméno počítače na síti, můžeme přistoupit k inicializaci knihovny WS2_32.DLL, ve které jsou potřebné funkce Windows Socket. Inicializaci provedeme funkcí WSAStartup(), která má dva parametry. První z nich je požadovaná verze Windows Socketu jako WORD, kde horních 8 bitů představuje minoritní číslo verze a dolních 8 bitů majoritní číslo verze. To snadno provedeme makrem MAKEWORD. Druhý parametr je ukazatel na strukturu WSAData, ve které obdržíte informace o získaném WSocketu. Pro náš příklad ji ale nevyužijeme.
  3. Pokud volání proběhne správně, je čas k získání IP adresy. K tomu slouží funkce gethostbyname(), která přijímá jeden parametr a to přímo jméno počítače, čili obsah vstupní proměnné. Funkce vrací strukturu HOSTENT, která obsahuje informace o vzdáleném PC.
  4. Jak dále vidíte využíváme atributu h_name, ve kterém je uloženo oficiální jméno počítače na síti. Dále chceme IP adresu. Ta je uložena v atributu h_addr, který samozřejmě není v tečkovém formátě, na který jsme zvyklí. K tomuto převodu slouží funkce inet_ntoa(), která převede strukturu in_addr na řetězec obsahující IP adresu v tečkovém formátu (např. 192.168.200.3).
  5. Nakonec zavoláme čistící fukci WSACleanup(), která uklidí Windows Socket.

To je vše. Program a zdrojový kód si můžete stáhnout zde.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 749
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved