Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //1. zadatak
- //program.c
- /* Kako bi autograder mogao uspjesno upisati strukturu u datoteku
- morate koristiti ovako definirane strukture
- struct podaci
- {
- char prezime[20];
- char ime[20];
- int sifra;
- char adresa[100];
- int br_tel;
- };
- */
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct {
- char prezime[20];
- char ime[20];
- int sifra;
- char adresa[100];
- int br_tel;
- } podaci;
- FILE *fp;
- podaci *clanovi = NULL;
- int brclanova = 0;
- void makeClanovi() {
- fp = fopen("clanovi.txt", "ab+");
- if (NULL == fp) {
- printf("GRESKA_MAKECLANOVI");
- exit(EXIT_FAILURE);
- }
- return;
- }
- void readClanovi() {
- fseek(fp, 0L, SEEK_END);
- brclanova = ftell(fp)/sizeof(podaci);
- rewind(fp);
- clanovi = (podaci*) calloc(brclanova, sizeof(podaci));
- if (NULL == clanovi) {
- printf("GRESKA_MAKECLANOVI");
- exit(EXIT_FAILURE);
- }
- fread(clanovi, sizeof(podaci), brclanova, fp);
- return;
- }
- void appendClanovi() {
- podaci *p = (podaci*) calloc(1, sizeof(podaci));
- scanf("%s", p->prezime);
- scanf("%s", p->ime);
- scanf("%d", &(p->sifra));
- scanf(" %[^\n]", p->adresa);
- scanf("%d", &(p->br_tel));
- fwrite(p, sizeof(podaci), 1, fp);
- brclanova++;
- clanovi = (podaci*) realloc(clanovi, brclanova * sizeof(podaci));
- if (NULL == clanovi) {
- printf("GRESKA_APPENDCLANOVI");
- exit(EXIT_FAILURE);
- }
- clanovi[brclanova - 1] = (podaci) {};
- clanovi[brclanova - 1] = *p;
- free(p);
- }
- void printMenu() {
- int n = 0;
- do {
- printf("Odaberi opciju: \t");
- scanf("%d", &n);
- switch (n) {
- case (1):
- makeClanovi();
- break;
- case (2):
- readClanovi();
- break;
- case (3):
- appendClanovi();
- break;
- case (4):
- fclose(fp);
- free(clanovi);
- exit(EXIT_SUCCESS);
- }
- } while (n != 4);
- }
- int main (void) {
- setvbuf(stdout, NULL, _IONBF, 0);
- printMenu();
- return 0;
- }
- //nekiheader.h
- #include <stdio.h>
- int suma(int n) {
- if(n == 0) {
- return 0;
- } else {
- return (n % 10 + suma(n / 10));
- }
- }
- int main(void) {
- int n;
- scanf("%d", &n);
- FILE *fp = fopen("suma.txt","w");
- if (NULL == fp) {
- printf("Greska otvaranja file-a");
- exit(EXIT_FAILURE);
- }
- fprintf(fp, "%d", suma(n));
- fclose(fp);
- return 0;
- }
- //zadatak 2
- /* Kako bi autograder mogao uspjesno upisati strukturu u datoteku
- morate koristiti ovako definirane strukture
- struct podaci
- {
- char prezime[20];
- char ime[20];
- int sifra;
- char adresa[100];
- int br_tel;
- };
- struct posudba{
- char ime_filma[20];
- int datum;
- int sif;
- };
- Ulazni podaci u program su zapisani ispod. Tekst poslije znaka # označava komentar
- linije i ne predstavlja ulaz u program:
- 1 # kreiranje filea
- 3 # upis podataka o clanu
- Peric
- Pero
- 1 #sifra clana
- Osjecka 132 #adresa
- 12345 #br tel
- 4 #izbornik posudbe
- 2 #broj filmova za posudbu
- 1 #sifra clana koji posudjuje film
- Mrak film 1 #naziv filma
- 34 #dan posudbe
- Mrak film 2 #naziv filma
- 35 #dan posudbe
- 5 #zavrsetak rada programa
- */
- #include <stdio.h>
- #include <stdlib.h>
- #if defined(_WIN32) || defined(_WIN64) //zbog onih dosadnih VS2015 upozorenja
- #define _CRT_SECURE_NO_WARNINGS 1
- #pragma warning(disable:4996)
- #endif
- typedef struct {
- char prezime[20];
- char ime[20];
- int sifra;
- char adresa[100];
- int br_tel;
- } podaci;
- typedef struct {
- char ime_filma[20];
- int datum;
- int sif;
- } posudba;
- podaci *clanovi = NULL;
- posudba *filmovi = NULL;
- int brClanova = 0;
- int brFilmova = 0;
- int brFilmovaClana(int);
- void izbornik (void);
- void makeClanovi (void);
- void makePosudba (void);
- void readClanovi (void);
- void readPosudba (void);
- void appendClan (void);
- void posudbaFilma (void);
- void myMemset (void*, int, int);
- int main(void) {
- izbornik();
- return 0;
- }
- void myMemset(void *b, int c, int l) { //jer je _STROGO_ zabranjen makar i SPOMEN stringa.h —\_(?)_/—
- unsigned char *p = (unsigned char*)b;
- while (l > 0) {
- *p = c;
- p++;
- l--;
- }
- return;
- }
- podaci getPodaci() { // vraca ociscenu strukturu podaci
- podaci p;
- myMemset(&p, 0, sizeof(podaci));
- return p;
- }
- posudba getPosudba() { // vraca ociscenu strukturu posudba
- posudba p;
- myMemset(&p, 0, sizeof(posudba));
- return p;
- }
- void izbornik() {
- int n = 0;
- puts("1- Kreiranje datoteke Clanovi.txt");
- puts("2- Čitanje iz datoteke Clanovi.txt");
- puts("3- Dodavanje novih članova u Clanovi.txt");
- puts("4- Posudba filma");
- puts("5- Završetak programa");
- do {
- printf("Odaberi opciju: ");
- scanf("%d", &n);
- switch (n) {
- case (1):
- makeClanovi();
- makePosudba();
- break;
- case (2):
- readClanovi();
- readPosudba();
- break;
- case (3):
- appendClan();
- break;
- case (4):
- posudbaFilma();
- break;
- case (5):
- fcloseall();
- free(clanovi);
- free(filmovi);
- return;
- }
- } while (n != 5);
- return;
- }
- void makeClanovi() {
- FILE *fp = fopen("clanovi.txt", "w");
- if (NULL == fp) {
- puts("Greska pravljenja clanovi.txt");
- exit(EXIT_FAILURE);
- }
- fclose(fp);
- return;
- }
- void makePosudba() {
- FILE *fp = fopen("posudba.txt", "wb");
- if (NULL == fp) {
- puts("Greska pravljenja posudba.txt");
- exit(EXIT_FAILURE);
- }
- fclose(fp);
- fp = fopen("posudba", "wb");
- fclose(fp);
- return;
- }
- void readClanovi() {
- int result;
- FILE *fp = fopen("clanovi.txt", "rb");
- if (NULL == fp) {
- puts("Greska otvaranja clanovi.txt u \"rb\" modu");
- exit(EXIT_FAILURE);
- }
- fseek(fp, 0L, SEEK_END);
- brClanova = ftell(fp) / sizeof(podaci);
- fseek(fp, 0L, SEEK_SET);
- clanovi = (podaci*)calloc(brClanova, sizeof(podaci));
- if (NULL == clanovi) {
- puts("Greska pravljenja clanovi[]");
- exit(EXIT_FAILURE);
- }
- result = fread(clanovi, sizeof(podaci), brClanova, fp);
- if (result != brClanova) {
- puts("Greska citanja clanova");
- exit(EXIT_FAILURE);
- }
- fclose(fp);
- return;
- }
- void readPosudba() {
- int result;
- FILE *fp = fopen("posudba.txt", "rb");
- if (NULL == fp) {
- puts("Greska otvaranja posudba.txt u \"rb\" modu");
- exit(EXIT_FAILURE);
- }
- fseek(fp, 0L, SEEK_END);
- brFilmova = ftell(fp) / sizeof(posudba);
- fseek(fp, 0L, SEEK_SET);
- filmovi = (posudba*)calloc(brFilmova, sizeof(posudba));
- if (NULL == filmovi) {
- puts("Greska pravljenja filmovi[]");
- exit(EXIT_FAILURE);
- }
- result = fread(filmovi, sizeof(posudba), brFilmova, fp);
- if (result != brFilmova) {
- puts("Greska citanja filmova");
- exit(EXIT_FAILURE);
- }
- fclose(fp);
- return;
- }
- void appendClan() {
- int result;
- FILE *fp = fopen("clanovi.txt", "ab");
- if (NULL == fp) {
- puts("Greska otvaranja clanovi.txt u \"ab\" modu");
- exit(EXIT_FAILURE);
- }
- podaci p = getPodaci();
- printf("Prezime: ");
- scanf(" %[^\n]", p.prezime);
- printf("Ime: ");
- scanf(" %[^\n]", p.ime);
- printf("Sifra: ");
- scanf("%d", &p.sifra);
- printf("Adresa: ");
- scanf(" %[^\n]", p.adresa);
- printf("Broj telefona: ");
- scanf("%d", &p.br_tel);
- brClanova++;
- clanovi = (podaci*)realloc(clanovi, brClanova * sizeof(podaci));
- if (NULL == clanovi) {
- puts("Greska prosirivanja clanova");
- exit(EXIT_FAILURE);
- }
- clanovi[brClanova - 1] = p;
- result = fwrite(&p, sizeof(podaci), 1, fp);
- if (result != 1) {
- puts("Greska pisanja clana");
- exit(EXIT_FAILURE);
- }
- fclose(fp);
- }
- void posudbaFilma() {
- int i, result, n, sif;
- posudba p[4] = { getPosudba(), getPosudba(), getPosudba(), getPosudba() };
- FILE *fp = fopen("posudba.txt", "ab");
- FILE *fp1 = fopen("posudba","ab");
- if (NULL == fp) {
- puts("Greska otvaranja posudba.txt u \"ab\" modu");
- exit(EXIT_FAILURE);
- }
- printf("Broj filmova za posuditi: ");
- scanf("%d", &n);
- if (n > 4) {
- printf("Previse filmova odabrano!");
- return;
- }
- printf("Sifra clana: ");
- scanf("%d", &sif);
- if ((n + brFilmovaClana(sif)) > 4) {
- printf("Clan ce imati previse filmova posudjeno!");
- return;
- }
- for (i = 0; i < n; i++) {
- printf("Ime filma: ");
- scanf(" %[^\n]", p[i].ime_filma);
- printf("Datum: ");
- scanf("%d", &p[i].datum);
- p[i].sif = sif;
- result = fwrite(&p[i], sizeof(posudba), 1, fp);
- result = fwrite(&p[i], sizeof(posudba), 1, fp1);
- if (1 != result) {
- puts("Greška zapisivanja posudbe");
- exit(EXIT_FAILURE);
- }
- }
- brFilmova += n;
- filmovi = (posudba*)realloc(filmovi, brFilmova * sizeof(posudba));
- if (NULL == filmovi) {
- puts("Greska prosirivanja filmova");
- exit(EXIT_FAILURE);
- }
- for (i = 0; i < n; i++) {
- filmovi[(brFilmova - 1) - (n - 1) + i] = p[i];
- }
- fclose(fp);
- }
- int brFilmovaClana(int sif) {
- if (brFilmova == 0) {
- return 0;
- }
- int i, cnt = 0;
- for (i = 0; i < brFilmova; i++) {
- if (filmovi[i].sif == sif) {
- cnt++;
- }
- }
- return cnt;
- }
- //nekiheader mi je prazan u drugom
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement