|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
20.6.2015, 14:51 | #161 |
Deo inventara foruma
|
Re: C programiranje
Evo na primjer imaš jedan brojač koji ti je na početku nula. Prvo se pozicioniraš na početak fajla, i onda u petlji čitaš pomoću fscanf podatke u studentu pošto znaš kako su fajlovi upisani, i tako dok ne dođeš do kraja datoteke. I onda ti je redni broj taj brojač + 1.
|
Sledeći korisnik se zahvaljuje korisniku Djordje Turjacanin na korisnoj poruci: | ||
mica1709 (24.6.2015) |
20.6.2015, 14:56 | #162 | |
Starosedelac
Član od: 23.2.2006.
Lokacija: Tamo gde su kuće od čokolade i prozori od marmelade....
Poruke: 1.579
Zahvalnice: 195
Zahvaljeno 301 puta na 171 poruka
|
Re: C programiranje
Radio si brojanje studenata kada si radio prosečnu ocenu. Kao i za upis novog, kao i prosečnu ocenu potreban ti je broj studenata.. Bukvalno treba da iteriraš kroz ceo fajl i da izbrojiš studente.
Citiran post sam osakatio čisto da ne bude preveliki Obrati pažnju na boldovan snipet u kodu. Obrati samo pažnju kako i kad otvaraš fajl i za šta, pošto tu može da ti napravi problem gde će da upisuje. Nisam siguran da li ako ga otvoriš za rw da li ćeš čitati otpočetka a pisati na kraj, to će morati neko ko malo dublje radi sa tim da ti kaže (očekujem voodoo_ ) Citat:
|
|
Sledeći korisnik se zahvaljuje korisniku Teva na korisnoj poruci: | ||
mica1709 (24.6.2015) |
20.6.2015, 15:05 | #163 |
Starosedelac
Član od: 23.2.2006.
Lokacija: Tamo gde su kuće od čokolade i prozori od marmelade....
Poruke: 1.579
Zahvalnice: 195
Zahvaljeno 301 puta na 171 poruka
|
Re: C programiranje
@Djordje Šta bi na kraju ono za ispit? Jel očekivao da se radi naopačke ili da ispiše pretumbane reči?
|
21.6.2015, 3:23 | #164 |
Deo inventara foruma
|
Re: C programiranje
Nisu mi skinuli bodove tu pa pretpostavljam da je trebalo ovako kao što sam ja uradio, u svakom slučaju, bodove sam dobio, zadovoljan sam urađenim i to mi je dosta.
|
24.6.2015, 13:18 | #165 | |
Banned
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
|
Re: C programiranje
Citat:
Kod:
#include<stdio.h> #define MAX_IME 15 #define MAX_PREZIME 15 #define MAX_STUDENATA 80 typedef struct studenti { char ime[MAX_IME]; char prezime[MAX_PREZIME]; char tacka; int brojindeksa, ocena, rednibroj; } Studenti; Studenti student[MAX_STUDENATA]; int broj_studenata = 0; int ucitaj_studenta(FILE *f, Studenti *s) { char tacka; if(fscanf(f, "%d%c%s%s%d%d", &(s->rednibroj), &(s->tacka), s->ime, s->prezime, &(s->brojindeksa), &(s->ocena)) == 6) return 1; else return 0; } int main(int argc, char* argv[]) { Studenti student; FILE* f; char ime[MAX_IME]; char prezime[MAX_PREZIME]; float prosecna = 0; int broj_studenata = 0; int brojindeksa; int izbor; int ocena; do { printf("************************************ MENI **************************************\n"); printf("1. Prikaz celog izvestaja\n"); printf("2. Upis novog studenta\n"); printf("3. Izmena podataka o studentima\n"); printf("4. Izlaz iz programa\n\n"); printf("********************************************************************************\n"); printf("Unesite izbor:"); scanf("%d",&izbor); switch(izbor) { case 1: f = fopen("C:\\fajl.txt", "r"); while (ucitaj_studenta(f, &student)) { printf("%d %c %s %s %d %d \n", student.rednibroj, student.tacka, student.ime, student.prezime, student.brojindeksa, student.ocena); } fclose(f); break; case 2: broj_studenata = 0; f = fopen("C:\\fajl.txt", "a"); while (ucitaj_studenta(f, &student)) { broj_studenata++; } student.tacka = '.'; student.rednibroj = broj_studenata+1; printf("Unesite ime studenta: \n"); scanf("%s", &ime); printf("Unesite prezime studenta: \n"); scanf("%s", &prezime); printf("Unesite broj indeksa: \n"); scanf("%d", &brojindeksa); printf("Unesite ocenu studenta: \n"); scanf("%d", &ocena); fprintf(f,"\n%d%c %s %s %d %d", student.rednibroj, student.tacka, ime, prezime, brojindeksa, ocena); fclose(f); printf("Fajl je uspesno sacuvan....\n"); break; case 3: case 4: printf("\nHvala Vam .. Program se zatvara.......\n\n"); break; default: printf("\nNepravilan izbor.....\n"); } } while(izbor != 4); return 0; } |
|
24.6.2015, 13:23 | #166 |
Deo inventara foruma
|
Re: C programiranje
Nisi se pozicionirao na početak fajla. Prije while petlje, odnosno nakon otvaranja moraš premotati na početak.
Kod:
fseek (f, 0 , SEEK_SET ); |
Sledeći korisnik se zahvaljuje korisniku Djordje Turjacanin na korisnoj poruci: | ||
mica1709 (24.6.2015) |
24.6.2015, 13:48 | #167 | |
Banned
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
|
Re: C programiranje
Citat:
Kod:
#include<stdio.h> #define MAX_IME 15 #define MAX_PREZIME 15 #define MAX_STUDENATA 80 typedef struct studenti { char ime[MAX_IME]; char prezime[MAX_PREZIME]; char tacka; int brojindeksa, ocena, rednibroj; } Studenti; Studenti student[MAX_STUDENATA]; int broj_studenata = 0; int ucitaj_studenta(FILE *f, Studenti *s) { char tacka; if(fscanf(f, "%d%c%s%s%d%d", &(s->rednibroj), &(s->tacka), s->ime, s->prezime, &(s->brojindeksa), &(s->ocena)) == 6) return 1; else return 0; } int main(int argc, char* argv[]) { Studenti student; FILE* f; char ime[MAX_IME]; char prezime[MAX_PREZIME]; float prosecna = 0; int broj_studenata = 0; int brojindeksa; int izbor; int ocena; do { printf("************************************ MENI **************************************\n"); printf("1. Prikaz celog izvestaja\n"); printf("2. Upis novog studenta\n"); printf("3. Izmena podataka o studentima\n"); printf("4. Izlaz iz programa\n\n"); printf("********************************************************************************\n"); printf("Unesite izbor:"); scanf("%d",&izbor); switch(izbor) { case 1: f = fopen("C:\\fajl.txt", "r"); while (ucitaj_studenta(f, &student)) { printf("%d %c %s %s %d %d \n", student.rednibroj, student.tacka, student.ime, student.prezime, student.brojindeksa, student.ocena); } fclose(f); break; case 2: broj_studenata = 0; f = fopen("C:\\fajl.txt", "a"); fseek (f, 0 , SEEK_SET ); while (ucitaj_studenta(f, &student)) { broj_studenata++; } student.tacka = '.'; student.rednibroj = broj_studenata+1; printf("Unesite ime studenta: \n"); scanf("%s", &ime); printf("Unesite prezime studenta: \n"); scanf("%s", &prezime); printf("Unesite broj indeksa: \n"); scanf("%d", &brojindeksa); printf("Unesite ocenu studenta: \n"); scanf("%d", &ocena); fprintf(f,"\n%d%c %s %s %d %d", student.rednibroj, student.tacka, ime, prezime, brojindeksa, ocena); fclose(f); printf("Fajl je uspesno sacuvan....\n"); break; case 3: case 4: printf("\nHvala Vam .. Program se zatvara.......\n\n"); break; default: printf("\nNepravilan izbor.....\n"); } } while(izbor != 4); return 0; } |
|
24.6.2015, 16:04 | #168 |
Član
Član od: 22.11.2009.
Lokacija: Čačak
Poruke: 251
Zahvalnice: 63
Zahvaljeno 11 puta na 10 poruka
|
Re: C programiranje
Kada si otvorio fajl za upisivanje, stavio si mu mod "a" koji podrazumeva samo pisanje u fajl. Stoga, kada posle otvaranja pokušavaš da čitaš, to se ispostavlja kao nemoguće i while ti se završava u prvom prolazu, tako da prom. broj_studenata ostaje na nuli.
Rešenje ti je da otvoriš fajl u modu za pisanje i čitanje, dakle "a+" na primer. Takođe, skloni \n pri upisu u fajl, dodaje ti jednu praznu liniju koja je nepotrebna, pošto se file pointer već pozicionirao na kraj fajla; skloni & kada učitavaš u char[], pošto se pri prosleđivanju funkciji na taj način dešava "array to pointer decay", funkcija će primiti char* . Grešci si mogao ući u trag relativno lako. Naime, postavio si broj_studenata na 0, po završetku while-a taj broj je ostao na 0 → while se nije izvršio niti jednom, što će reći f-ja ucitaj_studenta je vratila 0 pri prvom pokušaju čitanja, tj fscanf je vratio <6, u ovom slučaju -1(switch case 2 slučaj), dok u switch-ovom case 1 tog problema nema. |
Sledeći korisnik se zahvaljuje korisniku Futuristic na korisnoj poruci: | ||
mica1709 (24.6.2015) |
24.6.2015, 22:12 | #171 | |
Banned
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
|
Re: C programiranje
Citat:
Kod:
#include<stdio.h> #define MAX_IME 15 #define MAX_PREZIME 15 #define MAX_STUDENATA 80 typedef struct studenti { char ime[MAX_IME]; char prezime[MAX_PREZIME]; char tacka; int brojindeksa, ocena, rednibroj; } Studenti; Studenti student[MAX_STUDENATA]; int broj_studenata = 0; int ucitaj_studenta(FILE *f, Studenti *s) { char tacka; if(fscanf(f, "%d%c%s%s%d%d", &(s->rednibroj), &(s->tacka), s->ime, s->prezime, &(s->brojindeksa), &(s->ocena)) == 6) return 1; else return 0; } int main(int argc, char* argv[]) { Studenti student; FILE* f; char ime[MAX_IME]; char prezime[MAX_PREZIME]; float prosecna = 0; int broj_studenata = 0; int brojindeksa; int izbor; int ocena; do { printf("************************************ MENI **************************************\n"); printf("1. Prikaz celog izvestaja\n"); printf("2. Upis novog studenta\n"); printf("3. Izmena podataka o studentima\n"); printf("4. Izlaz iz programa\n\n"); printf("********************************************************************************\n"); printf("Unesite izbor:"); scanf("%d",&izbor); switch(izbor) { case 1: f = fopen("C:\\fajl.txt", "r"); while (ucitaj_studenta(f, &student)) { printf("%d %c %s %s %d %d \n", student.rednibroj, student.tacka, student.ime, student.prezime, student.brojindeksa, student.ocena); } fclose(f); break; case 2: broj_studenata = 0; f = fopen("C:\\fajl.txt", "a+"); while (ucitaj_studenta(f, &student)) { broj_studenata++; } student.tacka = '.'; student.rednibroj = broj_studenata+1; printf("Unesite ime studenta: "); scanf("%s", &ime); printf("Unesite prezime studenta: "); scanf("%s", &prezime); printf("Unesite broj indeksa: "); scanf("%d", &brojindeksa); printf("Unesite ocenu studenta: "); scanf("%d", &ocena); fprintf(f,"\n%d%c %s %s %d %d", student.rednibroj, student.tacka, ime, prezime, brojindeksa, ocena); fclose(f); printf("Fajl je uspesno sacuvan....\n"); break; case 3: case 4: printf("\nHvala Vam .. Program se zatvara.......\n\n"); break; default: printf("\nNepravilan izbor.....\n"); } } while(izbor != 4); return 0; } |
|
28.6.2015, 23:49 | #172 |
Banned
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
|
Re: C programiranje
Pokušao sam da rešim stavku pod 3 (Izmena podataka o studentima) ali mi prikazuje neke greške. Pa bih zamolio nekog da mi pomogne.
Evo i koda: Kod:
#include<stdio.h> #include<stdlib.h> #define MAX_IME 15 #define MAX_PREZIME 15 #define MAX_STUDENATA 80 typedef struct studenti { char ime[MAX_IME]; char prezime[MAX_PREZIME]; char tacka; int brojindeksa, ocena, rednibroj; } Studenti; Studenti *student; int broj_studenata = 0; int ucitaj_studenta(FILE *f, Studenti *s) { char tacka; if(fscanf(f, "%d%c%s%s%d%d", &(s->rednibroj), &(s->tacka), s->ime, s->prezime, &(s->brojindeksa), &(s->ocena)) == 6) return 1; else return 0; } int main(int argc, char* argv[]) { student = (Studenti *) malloc(sizeof(Studenti)); if (student == NULL) { fprintf(stderr, "Alokacija memorije nije uspela!\n"); } Studenti student; FILE *f; char ime[MAX_IME]; char prezime[MAX_PREZIME]; float prosecna = 0; int broj_studenata = 0, izbor_izmene = 0, brojindeksa, izbor, ocena; do { printf("************************************ MENI **************************************\n"); printf("1. Prikaz celog izvestaja\n"); printf("2. Upis novog studenta\n"); printf("3. Izmena podataka o studentima\n"); printf("4. Izlaz iz programa\n\n"); printf("********************************************************************************\n"); printf("Unesite izbor:"); scanf("%d",&izbor); switch(izbor) { case 1: f = fopen("H:\\fajl.txt", "r"); while (ucitaj_studenta(f, &student)) { printf("%d %c %s %s %d %d \n", student.rednibroj, student.tacka, student.ime, student.prezime, student.brojindeksa, student.ocena); } fclose(f); break; case 2: broj_studenata = 0; f = fopen("H:\\fajl.txt", "a+"); while (ucitaj_studenta(f, &student)) { broj_studenata++; } student.tacka = '.'; student.rednibroj = broj_studenata+1; printf("Unesite ime studenta: "); scanf("%s", &ime); printf("Unesite prezime studenta: "); scanf("%s", &prezime); printf("Unesite broj indeksa: "); scanf("%d", &brojindeksa); printf("Unesite ocenu studenta: "); scanf("%d", &ocena); fprintf(f,"\n%d%c %s %s %d %d", student.rednibroj, student.tacka, ime, prezime, brojindeksa, ocena); fclose(f); printf("Fajl je uspesno sacuvan....\n"); break; case 3: izbor_izmene = 0; f = fopen("H:\\fajl.txt", "r+"); while (ucitaj_studenta(f, &student)) { printf("Unesite redni broj studenta cije podatke zelite da promenite: \n"); scanf("%d",&izbor_izmene); printf("Novo ime: \n"); scanf("%s",&student[izbor_izmene]->ime); fprintf(f,"%s\n",student[izbor_izmene]->ime); printf("Novo prezime: \n"); scanf("%s",&student[izbor_izmene]->prezime); fprintf(f,"%s\n",student[izbor_izmene]->prezime); printf("Novi broj indeksa: \n"); scanf("%d",&student[izbor_izmene]->brojindeksa); fprintf(f,"%d\n",student[izbor_izmene]->brojindeksa); printf("Nova ocena: \n"); scanf("%d",&student[izbor_izmene]->ocena); fprintf(f,"%d\n",student[izbor_izmene]->ocena); } case 4: printf("\nHvala Vam .. Program se zatvara.......\n\n"); break; default: printf("\nNepravilan izbor.....\n"); } } while(izbor != 4); return 0; } |
29.6.2015, 13:07 | #173 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.166
Zahvalnice: 2.086
Zahvaljeno 4.923 puta na 2.859 poruka
|
Re: C programiranje
"student" je jedan primerak strukture "Studenti" u memoriji, tako da "student[izbor_izmene]" nema smisla, to nije niz struktura prethodno popunjen primercima pročitanim iz fajla.
Preporučujem da razradiš neki programski tok pre kodiranja, pošto ovo ovako ne ide. |
1.7.2015, 22:00 | #174 |
Veteran
Član od: 24.10.2007.
Lokacija: Beograd
Poruke: 694
Zahvalnice: 222
Zahvaljeno 215 puta na 121 poruka
|
Re: C programiranje
Za sve koji imaju problema sa C programiranjem, vrlo dobri materijali se nalaze na sajtu RTI katedre ETFa http://rti.etf.bg.ac.rs/rti/ir1p2/materijal.html
|
Sledeći korisnik se zahvaljuje korisniku Flash91 na korisnoj poruci: | ||
Nikola Stankovic (3.7.2015) |
14.7.2015, 13:22 | #175 |
Banned
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
|
Re: C programiranje
Treba mi pomoć oko sledećeg zadatka u C programskom jeziku:
Napisati program kojim se čita datoteka: znak po znak; i odredjuje broj pojavljivanja malih slova u datoteci bez w, x, y. Problem je što ne znam kako da eliminišem w, x i y da ih ne broji. Ovako kako sam napisao broji sva mala slova. Kod:
#include <stdio.h> int main () { FILE * f; char c; int malaslova = 0; f = fopen ("H:\\fajl.txt", "r"); if (f == NULL) { printf("Greska prilikom otvaranja fajla!"); } else { do { c = fgetc(f); if ((c >= 'a') && (c <= 'z')) { malaslova++; } } while (c != EOF); fclose (f); printf("Broj pojavljivanja malih slova u datoteci: %d \n", malaslova); } return 0; } |
14.7.2015, 13:48 | #176 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.166
Zahvalnice: 2.086
Zahvaljeno 4.923 puta na 2.859 poruka
|
Re: C programiranje
'w', 'x' i 'y' su tri pretposlednja slova u abecedi, tako da proveravaj opseg od 'a' do 'v' i posebno proveravaj 'z'.
Kod:
if ( ((c >= 'a') && (c <= 'v')) || (c == 'z') ) { malaslova++; } |
Sledeći korisnik se zahvaljuje korisniku voodoo_ na korisnoj poruci: | ||
mica1709 (14.7.2015) |
14.7.2015, 16:57 | #177 |
Banned
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
|
Re: C programiranje
Hvala.
|
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Kako najlakše naučiti programiranje? | Eris | Programiranje | 50 | 11.11.2010 18:10 |
Linux i C++ programiranje | Andross | Slobodni softver | 13 | 4.1.2007 21:43 |
Symbian programiranje | Optique | Programiranje | 1 | 16.6.2006 9:58 |
Programiranje u OpenGL | Damjan | Pravljenje igara | 9 | 7.3.2006 2:05 |
Programiranje? | Wo[R]MY | Programiranje | 1 | 3.3.2006 18:14 |