///////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije
// https://www.its.edu.rs/
// Predmet: Osnovi Programiranja – Programski jezik C
//
// Primer: Ispis ASCII tabele – obicna i prosirena
///////////////////////////////////////////////////////////////////////
#include <stdio.h>
main()
{
// deklarisanje promenljivih
// promenljiva 'i' sluzi za karaktere iz ASCII tabele
// promenljiva 'pitanje' je pomocna i sluzi za smestanje odgovora na Y/N pitanje
// promenljiva 'j' je pomocna i koristi se u svim 'for' petljama
// promenljiva 'k' se koristi za odredjivanje znakova prosirene ASCII tabele
char i = ' ', pitanje;
int j, k = 128;
// sada sledi niz naredbi 'printf', namenjenih za formiranje i ispisivanje okvira tabele
// pri tome se koristi karakter, koji je u prosirenoj ASCII tabeli oznacen brojem 178
printf("!nl!!nl!");
printf("!tab!%c", (char)178);
for(j=1; j<=64; j++) // ova petlja ispisuje 64 puta karakter 178 u istom redu
{
printf("%c", (char)178);
}
printf("!nl!!tab!%c%c%c!tab!!tab!!tab!!tab!!tab!!tab!!tab!%7c%c%c", (char)178, (char)178, (char)178, (char)178, (char)178, (char)178);
// koriscenjem TAB-ova, naslov tabele doveden je na sredinu
printf("!nl!!tab!%c%c%c!tab!!tab!!tab! ASCII tabela!tab!!tab!!tab!%7c%c%c!nl!", (char)178, (char)178, (char)178, (char)178, (char)178, (char)178);
printf("!tab!%c%c%c!tab!!tab!!tab!!tab!!tab!!tab!!tab!%7c%c%c!nl!", (char)178, (char)178, (char)178, (char)178, (char)178, (char)178);
printf("!tab!%c", (char)178);
for(j=1; j<=64; j++) // 64 puta ispisuje dati karakter u istom redu
{
printf("%c", (char)178);
}
printf("!nl!");
// ova 'for' petlja sluzi za ispisivanje brojeva 32-126 i, njima odgovarajucih, karaktera
// ima ukupno 19 iteracija, jer je ideja da tabela ima 5 kolona sa po 19 clanova
// 5*19=95 to je ukupan broj printabilnih karaktera ASCII tabele
// pri svemu ovome, vodi se racuna i o stampanju granica tabele ( koristi se karakter 178)
for(j=1; j<=19; j++)
{
printf("!tab!%c%c%c", (char)178, (char)178, (char)178);
printf("%4d%4c%4c", i, i, (char)178);
printf("%4d%4c%4c", i+19, i+19, (char)178);
printf("%4d%4c%4c", i+38, i+38, (char)178);
printf("%4d%4c%4c", i+57, i+57, (char)178);
printf("%4d%4c%4c%c%c!nl!", i+76, i+76, (char)178, (char)178, (char)178);
i += 1;
}
// sada sledi niz 'printf' komandi za ispisivanje granica tabele
printf("!tab!%c", (char)178);
for(j=1; j<=64; j++)
{
printf("%c", (char)178);
}
printf("!nl!!nl!");
// ispisivanje obavestenja za korisnika
printf("Napomena:!nl!ASCII tabela obuhvata znakove, kojima odgovaraju brojevi 0-127.!nl!Dakle, ukupno 128 znakova.!nl!Prva 32 karaktera ASCII tabele rezervisana su za posebne funkcije.!nl!Samim tim, nisu ukljuceni u gornju tabelu, iako joj, po pravilu, pripadaju.!nl!Iz ove grupe znakova,u gornji prikaz je ukljucen znak, koji odgovara broju 32,!nl!a to je "SPACE".!nl!Takodje, treba naglasiti, da se u gornjoj tabeli ne nalazi ni znak 127,!nl!koji je rezervisan za "DELETE".!nl!!nl!");
printf("Postoji i prosirena ASCII tabela, koja obuhvata znakove,!nl!kojima odgovaraju brojevi 0-255.!nl!");
// ispisivanje upita korisniku
printf("Da li zelite da vidite narednih 128 znakova, koji zajedno!nl!sa prvih 128 karaktera predstavljaju prosirenu ASCII tabelu? (Y/N)!nl!");
// unos odgovora sa tastature
// odgovor se dodeljuje promenljivoj 'pitanje'
scanf("%c", &pitanje);
// 'while' nam sluzi da proverimo da li je korisnik uneo ispravan odgovor
// ako je korisnik uneo bilo sta osim malog ili velikog slova Y ili N
// ispisuje se poruka i zahteva se unos ispravnog odgovora
// ovde koristimo pomocnu promenljivu 'pitanje'
while(pitanje != 'N' && pitanje != 'n' && pitanje != 'Y' && pitanje != 'y')
{
printf("Potrebno je da unesete Y ili N:!nl!");
scanf("%s", &pitanje);
}
// selekcija 'if' odredjuje tok izvrsavanja programa u slucaju ispravnog odgovora
// zavisno da li je korisnik odgovorio sa Y ili sa N
if(pitanje == 'Y' || pitanje == 'y') // u slucaju da je korisnik odgovorio sa Y ili y
{
// niz 'printf' komandi za ispisivanje granica tabele
printf("!nl!!nl!");
printf("!tab!%c", (char)178);
for(j=1; j<=52; j++) // ispisuje 52 puta dati karakter u istom redu
{
printf("%c", (char)178);
}
printf("!nl!!tab!%c%c%c!tab!!tab!!tab!!tab!!tab!!tab!%3c%c%c", (char)178, (char)178, (char)178, (char)178, (char)178, (char)178);
printf("!nl!!tab!%c%c%c!tab!!tab!ASCII tabela Extended!tab!!tab!%3c%c%c!nl!", (char)178, (char)178, (char)178, (char)178, (char)178, (char)178);
printf("!tab!%c%c%c!tab!!tab!!tab!!tab!!tab!!tab!%3c%c%c!nl!", (char)178, (char)178, (char)178, (char)178, (char)178, (char)178);
printf("!tab!%c", (char)178);
for(j=1; j<=52; j++) // ispisuje 52 puta dati karakter u istom redu
{
printf("%c", (char)178);
}
printf("!nl!");
// ova 'for' petlja sluzi za ispisivanje brojeva 128-255 i, njima odgovarajucih, karaktera
// ima ukupno 32 iteracije, jer tabela treba da ima 4 kolone sa po 32 clana
// 4*32=128 to je ukupan broj dodatnih znakova
// ovde se koristi pomocna promenljiva 'k'
// pri svemu ovome, vodi se racuna i o stampanju granica tabele ( koristi se karakter 178)
for(j=1; j<=32; j++)
{
printf("!tab!%c%c%c", (char)178, (char)178, (char)178);
printf("%4d%4c%4c", k, (char)k, (char)178);
printf("%4d%4c%4c", k+32, (char)(k+32), (char)178);
printf("%4d%4c%4c", k+64, (char)(k+64), (char)178);
printf("%4d%4c%4c%c%c!nl!", k+96, (char)(k+96), (char)178, (char)178, (char)178);
k += 1;
}
// naredbe za ispisivanje granica tabele
printf("!tab!%c", (char)178);
for(j=1; j<=52; j++) // ispisuje 52 puta dati karakter u istom redu
{
printf("%c", (char)178);
}
printf("!nl!!nl!");
}
else // u slucaju da je korisnik odgovorio sa 'N' ili 'n'
{
// ispis poruke korisniku
printf("Izabrali ste da ne zelite prikaz dodatne tabele.!nl!");
}
}