informatika_10_2_programy_02

Download Report

Transcript informatika_10_2_programy_02

Úvod do jazyka C
Zadanie

Zistite, či zadaný rok je priestupný.

Program spracujte formou funkcie
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
// tu bude funkcia, vracajuca priestupny / nepriestupny rok
main()
{
int i, rok;
char rok_text[20];
for(i=1890; i<2020; i++)
{
if(priestupny_rok(i)==1) strcpy(rok_text,"priestupny");
else strcpy(rok_text,"nepriestupny");
printf("\n\r Rok %d je: %s ",i,rok_text);
}
}
int priestupny_rok(int rok)
{
int priestupny=1;
if((rok%4)!=0) priestupny=0;
if((rok%100)==0)
{
if((rok%400)!=0) priestupny=0;
}
return priestupny;
}
Zadanie

Nájdite najväčší spoločný deliteľ dvoch
čísel

Na zistenie čísla použite funkciu
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
// tu bude funkcia
main()
{
int cislo1, cislo2, delitel;
cislo1=150;
cislo2=120;
delitel=spolocny_delitel(cislo1,cislo2);
printf("Najvacsi spolocny delitel %d a %d je %d ", cislo1, cislo2, delitel);
}
int spolocny_delitel(int cislo1, int cislo2)
{
int i, max,delitel;
if (cislo1 > cislo2) max=cislo1;
else max=cislo2;
delitel=1;
for(i=1; i<max; i++)
{
printf("\n\r Skusam: %d ",i);
if( ((cislo1%i)==0) && ((cislo2%i)==0)) delitel=i;
}
return delitel;
}
Zadanie

Nájdite najmenší spoločný násobok dvoch
čísel

Na zistenie čísla použite funkciu
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
// tu bude funkcia
main()
{
int cislo1, cislo2, nasobok;
cislo1=15;
cislo2=12;
nasobok=spolocny_nasobok(cislo1,cislo2);
printf("Najmensi spolocny nasobok %d a %d je %d ", cislo1, cislo2, nasobok);
}
int spolocny_nasobok(int cislo1, int cislo2)
{
int i, max,nasobok;
if (cislo1 > cislo2) max=cislo1;
else max=cislo2;
nasobok=1;
for(i=(cislo1*cislo2); i>max; i--)
{
printf("\n\r Skusam: %d ",i);
if( ((i%cislo1)==0) && ((i%cislo2)==0)) nasobok=i;
}
return nasobok;
}
Výhody použitia štruktúr

Položky, ktoré logicky súvisia, sú zjednotené do
jedného celku

Zápis/čítanie zo súboru sa vykonajú v jednom
kroku cez fread() / fwrite().

Nie je potrebné deklarovať n-premenných, ktoré
zbytočné rozširujú program
Zadanie úlohy

Existuje databáza, kde sú uložené dni a teploty

Program ho pridá podľa zadania užívateľa
ďalšie, vypíše ich a najde minimum

Pre prístup k dátam použite štruktúru „struct“
Hlavný program
#include <stdio.h>
#include <string.h>
struct den_teplota
{
char den[20];
int teplota;
};
void nacitaj_teploty();
void zapis(struct den_teplota *zaznam);
void vyber_najnizsiu();
main()
{
nacitaj_teploty();
vyber_najnizsiu();
}
Načítanie teplôt
void nacitaj_teploty()
{
int i, count;
char datum[20];
int teplota;
struct den_teplota zaznam;
printf("\n\r Zadaj pocet dni: ");
scanf("%d",&count);
for(i=0; i<count; i++)
{
printf("\n\r Zadaj den: ");
scanf("%s",&zaznam.den);
printf("\n\r Zadaj teplotu: ");
scanf("%d",&zaznam.teplota);
zapis((struct den_teplota*)&zaznam);
}
return;
}
Zápis štruktúry
void zapis(struct den_teplota *zaznam)
{
FILE *fp;
fp=fopen("zaznamy.txt","a");
if(fp!=NULL)
{
fwrite((void*)zaznam,sizeof(struct den_teplota),1,fp);
fclose(fp);
}
else {printf("\n\n\r zapis(): chyba pri otvarani suboru");}
return;
}
Načítanie štruktúr a
vyhľadanie najnižšej teploty
void vyber_najnizsiu()
{
int i, min=100;
struct den_teplota zaznam;
char buffer[1024];
FILE *fp;
fp=fopen("zaznamy.txt","r");
if(fp!=NULL)
{
while(!feof(fp))
{
fread(&zaznam,sizeof(zaznam),1,fp);
printf("\n\r Den: '%s' Teplota: '%d' ",zaznam.den,zaznam.teplota);
if(min>zaznam.teplota) min=zaznam.teplota;
}
fclose(fp);
}
else {printf("\n\n\r vyber_najnizsiu(): chyba pri otvarani suboru");}
printf("\n\n\r Najnizsia teplota: %d ",min);
return;
}
Výpis programu