Ulaz (input)
Kao što nam je važno kako ćemo prikazivati podatke, podjednako je važno kako ćemo unositi podatke u naš program. Teško je zamisliti da bi neki imalo složeniji program mogao da radi a da mu nije potrebno unošenje nekih podataka. Teorijski, u programu se mogu uvesti neki podaci, kao:
int a;
a= 5;
...
tj. moguće je sve podatke upisati direktno u kodu (što se ponekad naziva hard coding). U tom slučaju, kad je potrebno izvršavanje programa sa drugačijim podacima samo se izmene podaci u programu, iskompajlira se i pusti da se ponovo izvrši.
Ovaj način nije baš zgodno rešenje. Mnogo je bolje da se preuzmu podaci od korisnika, prebace u program, i zatim iskoriste za izračunavanje. Na koji način može program napisan u programskom jeziku "C" preuzeti bilo kakve podatke od korisnika i smestiti ih u neku promenljivu? U većini slučajeva, ako je potrebno vršiti neka komplikovanija izračunavanja, trebalo bi prvo potražiti da li već postoji funkcija koja radi to isto, i samo ako već ne postoji takva funkcija, samo tada se treba latiti zadatka pisanja novog programa.
U ovom slučaju - funkcija koja se koristi za unos podataka već postoji.Funkcija se zove scanf (scan formatted) i dosta liči na printf.
scanf("d",&MaxBrojOvaca);
Ovde se vidi sličnost sa funkcijom printf. Prvi parametar je i ovom slučaju format koji funkciji govori koji podaci će biti ubačeni u program i u kom obliku će ti podaci biti. Kao i ranije, koliko se specifikatora navede u formatu, toliko je potrebno navesti argumenata.
U slučaju funkcije printf može da sekao argument upotrebu neka promenljiva, ali može da se upotrebi i neku aritmetički izraz (neka formula u kojoj se nalaze promenljive iz programa):
printf("%d", 2 * i);
O vo nije moguće prilikom unosa promenljive. Za funkciju scanf se mora navesti koja je to promenljiva u koju će podaci koje korisnik unese biti smešteni.
&
Obratite pažnju na ovaj čudni znak ispred naziva promenljive MaxBrojOvaca?
Objašnjenje ovoga je za sada previše složeno. Ali malo jednostavnije objašnjenje sledi:
Kada se u programu koristi ime neke promenljive (npr. MaxBrojOvaca) misli se na vrednost koja se u tom trenutku nalazi u toj promenljivoj.
Međutim, ono što je bitno za finkciju scanf je nešto sasvim drugo - to nije vrednost promenljive, jer će ta vrednost biti zamenjena onom vrednošću koju će da unese korisnik.
Funkcija scanf treba da koristi nešto potpuno drugačije: konkretno mesto gde se promenljiva nalazi u memoriji. Znak & je unarni operator koji daje informaciju o tome gde se u memoriji nalazi promenljiva na koju se odnosi.
Format u scanf će da obezbedi informacije o tipu podataka a "&", zajedno sa imenom promenljive, kaže gde će to biti smešteno. Ako se izostavi znak & neće izazvati nikakve probleme prilikom kompajliranja. Bitno je zapamtiti da je to jako bitno za funkciju scanf i da ne može da radi kako treba bez &.
Dalje, format u scanf koristi iste specifikatore kao i printf.
****
U nastavku je primer jednostavnog programa:
#include <stdio.h>
int main(void)
{
int vrednost,kvadrat;printf("Unesi broj koji se kvadrira!\n");
scanf("%d", &vrednost);
kvadrat = vrednost * vrednost;
printf("Uneli ste broj %d\n",vrednost);
printf("Njegov kvadrat je %d\n",kvadrat);
return 0;
}
- prvo traži od korisnika da unese jedan ceo broj;
- kvadrira ga;
- prikazuje rezultat sa odgovarajućim komentarom.
T reba zapamtiti dve stvari: prvo, ne postoji operator sa kojim mmmože da se vrši operacija kvadratni koren; drugo, ne postoji kvadratni koren od negativnog broja.
Prvi problem može da se reši ako pronađemo funkciju koja može da izračuna kvadratni koren. Ovakva funkcija postoji i kao argument koristi promenljive tipa float. Rezultat je takođe float (očigledno je da je kvadrat celog broja i dalje ceo broj, ali kvaratni koren bilo kojeg celog broja ne mora da bude ceo broj, kao na primer kvadratni koren od 2).Funkcija koju ćemo koristiti je sqrt (square root float) i za nju se koristi samo jedan argument u zagradi. BITNO : da biste uopšte mogli da koristite ovu funkciju, u program se mora uključiti header file koji se zove math.h:
#include <math.h>
Šta ako korisnik ipak unese negativan broj i hoće da se izračuna kvadratni koren? Program će to ignorisati, a da li će se videti rezultat operacije zavisi isključivo od uslovnih izraza koji su u programu
Kompletan primer programa za izračunavanje kvadratnog korena:#include <stdio.h>
#include <math.h>int main(void)
{
float vrednost,kvadratniKoren;printf("Unesi jedan broj, a ja cu de pronadjem kvadratni koren:\n");
scanf("%f", &vrednost);
if(vrednost >= 0.0){
kvadratniKoren = sqrt(vrednost);
printf("Uneli ste broj: %f\n",vrednost);
printf("Kvadratni koren je: %f\n",kvadratniKoren);
}
return 0;
}