Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 31.5.2015, 10:11   #141
mica1709
Banned
 
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: C programiranje

Sad sam se malo naspavao tako da mogu bolje da vidim kodove. Ispravio sam putanju za fajl ali sam uz to morao da ispravim još nešto pošto mi je bilo potrebno da mi program ispiše studente koji imaju ocenu veću od prosečne a ti si u kodu napisao da ispisuje i studente sa prosečnom ocenom pa sam morao da izbrišem znak jednakosti. Sad kod izgleda ovako:

Kod:
case 4:
                broj_studenata = 0; 
                zbir = 0;
                f = fopen("C:\\fajl.txt", "r");
                while (ucitaj_studenta(f, &student))
                {
                    broj_studenata++;
                    zbir += student.ocena;
                }
                prosecna = zbir / (float)broj_studenata;
                fclose(f);
                f = fopen("C:\\fajl.txt", "r");
                while (ucitaj_studenta(f, &student))
                {
                    if((float)student.ocena > prosecna)
                    {
                        printf("%d %c %s %s %d %d \n", student.rednibroj, student.tacka, student.ime, student.prezime, student.brojindeksa, student.ocena);
                    }
                }
                fclose(f);
                break;
mica1709 je offline   Odgovor sa citatom ove poruke
Stara 3.6.2015, 14:50   #142
mica1709
Banned
 
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: C programiranje

Ponovo mi treba pomoć oko zadatka koji se nadovezuje na onaj prethodni.. U fajlu se nalazi spisak studenata koji su polagali ispit sa ocenama. Program treba da uz pomoć menija isčita i ispiše sve podatke iz fajla (prikaz celog izveštaja) i da ima mogućnost da upisuje nove studente i menja podatke o već unetim studentima. Trebalo bi kad izaberem upis novog studenta iz menija da mi u prvom redu ispiše "Unesite ime studenta:".Kad upišem ime da mi u drugom redu ispiše "Unesite prezime studenta:". Kad i to upišem ide treći red "Unesite broj indeksa:" i četvrti " Unesite ocenu". Ovako kako sam ja uradio sve to odradi dobro i ispiše obaveštenje da je fajl uspešno sačuvan ali u fajlu mi je umesto tog novog studenta ispisan duplo prethodni student i to u istom redu. Izmenu podataka o studentima ne znam kako da uradim pa je nisam ni započeo.


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:
				f = fopen("C:\\fajl.txt", "a");
				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("%s", &ocena);
				broj_studenata++;
				fprintf(f,"%d %c %s %s %d %d", student.rednibroj, student.tacka, student.ime, student.prezime, student.brojindeksa, student.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;
}



Poslednja ispravka: mica1709 (3.6.2015 u 15:06)
mica1709 je offline   Odgovor sa citatom ove poruke
Stara 4.6.2015, 13:42   #143
Djordje Turjacanin
Deo inventara foruma
 
Član od: 15.6.2008.
Lokacija: Prnjavor, RS
Poruke: 3.872
Zahvalnice: 491
Zahvaljeno 1.031 puta na 664 poruka
Slanje poruke preko MSN-a korisniku Djordje Turjacanin Slanje poruke preko Skypea korisniku Djordje Turjacanin
Određen forumom Re: C programiranje

Nisam siguran gdje da postavim, pa ću ovde. Šta bi po vama trebalo da ispisuje funkcija ispisIBrisanje() ako je struktura data i ispunjena kao na slici?
Djordje Turjacanin je offline   Odgovor sa citatom ove poruke
Stara 4.6.2015, 14:33   #144
voodoo_
V.I.P. GNU/Linux
 
Avatar korisnika voodoo_
 
Član od: 1.11.2005.
Poruke: 11.166
Zahvalnice: 2.085
Zahvaljeno 4.923 puta na 2.859 poruka
Određen forumom Re: C programiranje

1. Motaš kroz listu pokazivača na stekove dok ne naiđeš na pokazivač koji gađa na određen red (pritom zapamtiš i prethodni pokazivač)
2. Poskidaš sve elemente sa steka na koji pokazivač pokazuje, ispisujući ih tokom skidanja
3. Prevežeš prethodni pokazivač na sledeći, a ovaj što ostane da visi oslobodiš
voodoo_ je offline   Odgovor sa citatom ove poruke
Stara 4.6.2015, 18:07   #145
Djordje Turjacanin
Deo inventara foruma
 
Član od: 15.6.2008.
Lokacija: Prnjavor, RS
Poruke: 3.872
Zahvalnice: 491
Zahvaljeno 1.031 puta na 664 poruka
Slanje poruke preko MSN-a korisniku Djordje Turjacanin Slanje poruke preko Skypea korisniku Djordje Turjacanin
Određen forumom Re: C programiranje

Ne ne, ne treba meni kako treba da uradim, uradio sam to. Stvar je o tome kako će ispisati baš ovaj tekst što ima. Po meni, ako se poštuje FIFO red, sa početka treba da se skidaju elementi, a dodaju na kraj reda. Ako tako gledamo ovu sliku prvo bi trebalo da ispišu ovi stringovi "naizmjenicnu struju!", ali ova rečenica ima smisla samo ako se skida sa kraja reda, a u tekstu jasno piše da se treba sa početka skidati sve sa stekova. Da li sam u pravu?
Djordje Turjacanin je offline   Odgovor sa citatom ove poruke
Stara 4.6.2015, 21:32   #146
Teva
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
Određen forumom Re: C programiranje

Da ali ne krećeš otpočetka, tebi u zadatku kaže da imaš red stekova. Ti ćeš čitati stekove odozdo na gore (po slici) ali ćeš ispisivati sadržaj stekova sdesna na levo (opet po slici) jer red je LIFO. Odnosno red će ti rasti na "levo". Ima ćeš glavu liste i novi stek u tom redu će ti doći skroz levo

Nadam se da si me shvatio i da je to odgovor koji si tražio

EDIT:

Shvatio sam da sam sam sebi konfuzan a kamoli nekom drugom xD Kada sam rekao ne krećeš otpočetka mislio sam na prirodni početak slike, u smislu sleva na desno. Međutim, red ne počinje na kraju već na početku odnosno gore kod onog što čeka kod Mice ubice na šalteru ne od onog čija leđa gledaš kada stupiš u red
Teva je offline   Odgovor sa citatom ove poruke
Stara 4.6.2015, 22:09   #147
Djordje Turjacanin
Deo inventara foruma
 
Član od: 15.6.2008.
Lokacija: Prnjavor, RS
Poruke: 3.872
Zahvalnice: 491
Zahvaljeno 1.031 puta na 664 poruka
Slanje poruke preko MSN-a korisniku Djordje Turjacanin Slanje poruke preko Skypea korisniku Djordje Turjacanin
Određen forumom Re: C programiranje

Red je FIFO valjda?
Zar ne bi ovde čvor označen sa crvenom bojom bio glava, odnosno od njega krećemo, pošto taj čvor ima sljedeći, meni je nelogično da rep pokazuje na sljedeci, što bi, a da glava pokazuje na null pointer, što bi bilo u slučaju da je glava plavi čvor, a tako smo i radili na vježbama i predavanjima. Uvijek smo dodavali na kraj liste, a skidali sa pocetka. Ako se vodimo tom logikom onda bi trebalo početi skidati od crvenog čvora.

A evo kako su asisteni realizovali red preko liste, tj. funkcije za dodavanje i brisanje iz reda.
Kod:
void dodaj(CVOR **pf, CVOR **pr, STUDENT *s) {
  CVOR *novi = (CVOR *)malloc(sizeof(CVOR));
  novi->s = *s;
  novi->sljedeci = 0;
  if (*pf == 0) *pf = *pr = novi;
  else {
    (*pr)->sljedeci = novi;
    *pr = novi;
  }
}
int brisi(CVOR **pf, CVOR **pr, STUDENT *s) {
  if (*pf == 0) return 0;
  CVOR *p = *pf;
  *s = p->s;
  if (*pf == *pr) *pf = *pr = 0;
  else *pf = p->sljedeci;
  free(p);
  return 1;
}
pf je početak, pr kraj.

Poslednja ispravka: Djordje Turjacanin (4.6.2015 u 22:21)
Djordje Turjacanin je offline   Odgovor sa citatom ove poruke
Stara 4.6.2015, 22:57   #148
Teva
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
Određen forumom Re: C programiranje

Da, da, u pravu si FIFO je, prsti brži od pameti xD Sve vreme sam i mislio na to, samo nisam konstatovao šta sam napisao

Slažem se da se red generalno tako implementira, ali opet ne mora da znači da je to ovde slučaj Ti možeš red da implementiraš i pomoću stekova...

Elem, meni je jedino logično objašnjenje da se ovde na red misli tako da mu je glava skroz desno, da bi se dobilo iole smislen odgovor, ali opet možda asistent nije očekivao smislen odgovor xD
Teva je offline   Odgovor sa citatom ove poruke
Stara 4.6.2015, 23:40   #149
Djordje Turjacanin
Deo inventara foruma
 
Član od: 15.6.2008.
Lokacija: Prnjavor, RS
Poruke: 3.872
Zahvalnice: 491
Zahvaljeno 1.031 puta na 664 poruka
Slanje poruke preko MSN-a korisniku Djordje Turjacanin Slanje poruke preko Skypea korisniku Djordje Turjacanin
Određen forumom Re: C programiranje

Pa bas to me i bunilo, a kad ga je neko pitao kako se implementira red, on je rekao standardno preko ulancane liste kako smo i radili na vjezbama. Mislim, uradio sam ja kod kuce tako da glava skroz desno, pa mi funkcija prolazi kroz citav red da bi skinula jedan element jer ako skinem glavu koja je na kraju onda mi se gubi pokazivac, i to se svodi na obicnu listu. U svakom slucaju hvala, ako mi skinu tu neke bodove icu na uvid da probam vratiti te bodove
Djordje Turjacanin je offline   Odgovor sa citatom ove poruke
Stara 5.6.2015, 5:59   #150
mica1709
Banned
 
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: C programiranje

Moze li neko i meni da pomogne?

Citat:
mica1709 kaže: Pregled poruke
Ponovo mi treba pomoć oko zadatka koji se nadovezuje na onaj prethodni.. U fajlu se nalazi spisak studenata koji su polagali ispit sa ocenama. Program treba da uz pomoć menija isčita i ispiše sve podatke iz fajla (prikaz celog izveštaja) i da ima mogućnost da upisuje nove studente i menja podatke o već unetim studentima. Trebalo bi kad izaberem upis novog studenta iz menija da mi u prvom redu ispiše "Unesite ime studenta:".Kad upišem ime da mi u drugom redu ispiše "Unesite prezime studenta:". Kad i to upišem ide treći red "Unesite broj indeksa:" i četvrti " Unesite ocenu". Ovako kako sam ja uradio sve to odradi dobro i ispiše obaveštenje da je fajl uspešno sačuvan ali u fajlu mi je umesto tog novog studenta ispisan duplo prethodni student i to u istom redu. Izmenu podataka o studentima ne znam kako da uradim pa je nisam ni započeo.


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:
				f = fopen("C:\\fajl.txt", "a");
				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("%s", &ocena);
				broj_studenata++;
				fprintf(f,"%d %c %s %s %d %d", student.rednibroj, student.tacka, student.ime, student.prezime, student.brojindeksa, student.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;
}


mica1709 je offline   Odgovor sa citatom ove poruke
Stara 5.6.2015, 10:08   #151
Teva
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
Određen forumom Re: C programiranje

Citat:
Djordje Turjacanin kaže: Pregled poruke
Pa bas to me i bunilo, a kad ga je neko pitao kako se implementira red, on je rekao standardno preko ulancane liste kako smo i radili na vjezbama. Mislim, uradio sam ja kod kuce tako da glava skroz desno, pa mi funkcija prolazi kroz citav red da bi skinula jedan element jer ako skinem glavu koja je na kraju onda mi se gubi pokazivac, i to se svodi na obicnu listu. U svakom slucaju hvala, ako mi skinu tu neke bodove icu na uvid da probam vratiti te bodove
Ja obično u tim situacijama pitam kakvo rešenje očekuje, al ne tehničke stvar već jel očekuješ normalnu rečenicu ili haos xD

@mica1709
Obrati pažnju gde unosiš podatke a šta upisuješ. Podatke unosiš u promenljive ime, prezime itd a ispisuješ student.ime, student.prezime itd...

Nisam testirao kod ali mi se čini da ti u strukturi Student s ostaje poslednji student iz fajla pa njega upisuješ dvaput. I dodaj mu '\n' na početak fprintf-a čisto da bude pregledniji upis
Kod:
				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("%s", &ocena);
				broj_studenata++;
				fprintf(f,"%d %c %s %s %d %d", student.rednibroj, student.tacka, student.ime, student.prezime, student.brojindeksa, student.ocena);
Teva je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Teva na korisnoj poruci:
mica1709 (6.6.2015)
Stara 13.6.2015, 14:44   #152
mica1709
Banned
 
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: C programiranje

Pokušao sam da ispravim greške kod druge stavke (Upis novog studenta) ali mi i dalje ne ispisuje dobro redni broj, tačku, broj indeksa i ocenu (Pogledajte sliku ispod).

Može li neko da mi kaže kako da uradim stavku pod rednim brojem 3 (Izmena podataka o studentima)?

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:
                f = fopen("C:\\fajl.txt", "a");
                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);
                broj_studenata++;
                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;
}
mica1709 je offline   Odgovor sa citatom ove poruke
Stara 14.6.2015, 10:28   #153
voodoo_
V.I.P. GNU/Linux
 
Avatar korisnika voodoo_
 
Član od: 1.11.2005.
Poruke: 11.166
Zahvalnice: 2.085
Zahvaljeno 4.923 puta na 2.859 poruka
Određen forumom Re: C programiranje

Cela postavka je loše koncipirana. Da bi editovao polje u tekstualnom fajlu i zadržao njegovu originalnu poziciju, morao bi da napraviš nov fajl upisujući sva prethodna polja, pa ubacio novo, pa onda ostala koja su bila iza njega.

Lepša varijanta bi bila da studente ne čuvaš u tekstualnom fajlu sa promenljivom dužinom redova, nego u binarnom gde bi jedan student bio jedno polje tačno određene veličine (npr. sizeof(struct studenti)). Onda bi mogao da mapiraš fajl u memoriju i samo da pregaziš staro polje tako što upišeš novu strukturu na njegovu adresu, bez kreiranja novog fajla.

Inače ne zna se šta je gore, da li ovi školski primeri ili "samo da se nabudži da radi" u školskom duhu...
voodoo_ je offline   Odgovor sa citatom ove poruke
Stara 14.6.2015, 11:57   #154
mica1709
Banned
 
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: C programiranje

A u čemu je problem što mi ne ispisuje dobro novounetog studenta? Pogledaj kod i sliku iz predhodne poruke.
mica1709 je offline   Odgovor sa citatom ove poruke
Stara 14.6.2015, 12:42   #155
voodoo_
V.I.P. GNU/Linux
 
Avatar korisnika voodoo_
 
Član od: 1.11.2005.
Poruke: 11.166
Zahvalnice: 2.085
Zahvaljeno 4.923 puta na 2.859 poruka
Određen forumom Re: C programiranje

Student.rednibroj i student.tacka nisu inicijalizovani a prosleđuješ ih fprintf-u, pa je printf pokupio neko đubre koje se nalazilo na tim memorijskim lokacijama. Ono što treba da uradiš je

student.tacka = '.' /* Ili šta god treba ovde */
student.rednibroj = ++broj_studenata;

Pa tek onda fprintf.

U prikazu izveštaja bi verovatno trebalo da prebrojiš broj uspešnih poziva ucitaj_studenta(), tako da unos novog studenta automatski dobija sledeći broj.
Obrati pažnju da imaš globalnu i lokalnu promenljivu pod istim imenom (broj_studenata), ukloni globalnu.
voodoo_ je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku voodoo_ na korisnoj poruci:
mica1709 (16.6.2015)
Stara 14.6.2015, 13:01   #156
darko31
Starosedelac
 
Član od: 27.11.2012.
Lokacija: Novi Bečej/Sad
Poruke: 1.569
Zahvalnice: 134
Zahvaljeno 406 puta na 371 poruka
Određen forumom Re: C programiranje

Ne trebaju ti ampersendi & uz promenljive u fprintf-u, tako upisuješ njihove adrese u txt fajl. Što se tiče rednog broja, koliko vidim, on se upisuje iz strukture, a tu nije inicijalizovana vrednost na početku pa zato imaš te čudne vrednosti.

Što se tiče ostatka programa, bilo bi lepo kad si već krenuo sa funkcijama da radiš da i svi ti zadaci u case-ovima budu funkcije.

Što se tiče voodoo-ove primedbe, morao bih se složiti, bilo bi relativno lakše sa binarnim datotetkama. Ovako, ne znam kako drugačije da radiš izmenu osim da učitaš ceo fajl, izmeniš šta ti treba i pregaziš ceo stari fajl.

@voodoo

Što se tiče tih školskih zadataka, to se slažem, kao neko ko je upravo završio jedan predmet o C-a na faksu, zadaci su manje više očaj, i 95% tih zadataka su savršeni za rad u Excelu . A potpuno sam za politiku nabudži samo da radi, jer pored programiranja imam još 5 drugih predmeta koje treba položiti i stvarno se nema vremena za peglanje koda do savršenstva.
darko31 je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku darko31 na korisnoj poruci:
mica1709 (16.6.2015)
Stara 15.6.2015, 1:30   #157
Teva
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
Određen forumom Re: C programiranje

Zavisi od predmeta, na uvodnim kursevima u C veliki je uspeh i samo nabudžiti da radi, sobzirom da se prvi put upoznaješ sa jezikom. Ja sam konkretno imao kurseve gde je bilo piši šta oćeš samo da to radi posao, a bilo je kurseva gde sam pored piši šta oćeš imao i ocenjivanje vremenske i memorijske složenosti i "lepotu koda".
Teva je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Teva na korisnoj poruci:
mica1709 (16.6.2015)
Stara 16.6.2015, 23:09   #158
mica1709
Banned
 
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: C programiranje

Citat:
Teva kaže: Pregled poruke
Zavisi od predmeta, na uvodnim kursevima u C veliki je uspeh i samo nabudžiti da radi, sobzirom da se prvi put upoznaješ sa jezikom. Ja sam konkretno imao kurseve gde je bilo piši šta oćeš samo da to radi posao, a bilo je kurseva gde sam pored piši šta oćeš imao i ocenjivanje vremenske i memorijske složenosti i "lepotu koda".
Ja se prvi put susrećem sa C programskim jezikom i kao što kaže Darko uz C/C++ imam još dosta ispita koje trebam da spremam pa vas zbog toga još jedanput molim za pomoć da ovo nekako zajednički nabudžimo jer ima još dosta domaćih zadataka koje treba da rešavam a naredni mogu da dobijem tek kad pošaljem ovaj. Uz pomoć vaših sugestija uspeo sam skoro da rešim upisivanje novih studenata. Sad mi je jedini problem redni broj jer mi uvek ispisuje broj 1.
Još uvek ne znam kako da uradim stavku pod rednim brojem 3 (Izmena podataka o studentima). Darko je pokušao da mi pomogne ali ja neznam kako da napišem to što je on rekao? Trebala bi mi konkretnija pomoć.



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:
                f = fopen("C:\\fajl.txt", "a");
                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);
				student.tacka = '.';
                student.rednibroj = ++broj_studenata;
                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;
}
mica1709 je offline   Odgovor sa citatom ove poruke
Stara 17.6.2015, 0:07   #159
Teva
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
Određen forumom Re: C programiranje

Neam ništa protiv budženja al imam protiv mehaničkog rada i rada napamet.

Sedi i razmisli malo pre nego što samo saspeš kod koji ti liči da radi, sem što se kompajlira mora da ima i nekog smisla. Prvenstveno logički.

Da bi upisao novog studenta, treba da imaš broj studenata koji je već upisan da bi upisao redni broj koji ima smisla. U prevodu, moraš da prođeš kroz ceo fajl da bi znao koliko studenata ima.
Teva je offline   Odgovor sa citatom ove poruke
Stara 20.6.2015, 14:08   #160
mica1709
Banned
 
Član od: 2.5.2011.
Lokacija: Bujanovac
Poruke: 156
Zahvalnice: 205
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: C programiranje

Citat:
Teva kaže: Pregled poruke
Neam ništa protiv budženja al imam protiv mehaničkog rada i rada napamet.

Sedi i razmisli malo pre nego što samo saspeš kod koji ti liči da radi, sem što se kompajlira mora da ima i nekog smisla. Prvenstveno logički.

Da bi upisao novog studenta, treba da imaš broj studenata koji je već upisan da bi upisao redni broj koji ima smisla. U prevodu, moraš da prođeš kroz ceo fajl da bi znao koliko studenata ima.
Jasno mi je šta treba da uradim ali ne znam kako? Kako da prođem kroz fajl? Pokušavao sam nešto ali mi ne ide.
mica1709 je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


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


Sva vremena su po Griniču +2 h. Sada je 5:50.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com