Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 19.6.2017, 1:37   #1
DusanN
Član
 
Član od: 10.1.2014.
Lokacija: Vranje
Poruke: 453
Zahvalnice: 40
Zahvaljeno 41 puta na 35 poruka
Određen forumom Pomoc oko zadatka

Pozdrav,
Moram predati zadatak do prekosutra a nikako da popravim gresku.Fora je da se doda novi ucenik upisu se podaci i bira se da li postaviti na pocetak ili kraj.Samo sto se tu zabuni i kod biranja mi ponovo izbaci novi ucenik i ne mogu izabrati da li da se upise na pocetak ili na kraj, bio sam nekako uspeo da to ispravim ali svejedno nije bilo upisalo a ja sam i zaboravio kako sam to uradio.
Kod:
#include <stdio.h>
#include <stdlib.h>
//fflush(stdout);
typedef struct ucenik{
    int broj;
    int ocena_vladanje;
        struct ucenik *sledeci;
}Ucenik;
 
void dodaj_na_pocetak(Ucenik *lista,int ocena,int broj){
    Ucenik *novi=(Ucenik*)malloc(sizeof(Ucenik));
    novi->broj;
    novi->ocena_vladanje=ocena;
    novi->sledeci=lista;
    lista=novi;
}
 
void dodaj_na_kraj(Ucenik *lista,int ocena,int broj){
    Ucenik *novi=(Ucenik*)malloc(sizeof(Ucenik));
    Ucenik *tekuci=NULL;
    novi->broj=broj;
    novi->ocena_vladanje=ocena;
    novi->sledeci=NULL;
    if(lista==NULL)
        lista=novi;
    else{
        for(tekuci=lista; tekuci->sledeci != NULL; tekuci=tekuci->sledeci)
            tekuci->sledeci=novi;
    }
}
 
Ucenik *prvi=NULL;
void main(){
    int broj_dnevnik;
        int ocena_vl;
    char odgovor;
    Ucenik *tekuci;
    while(1){
        printf("Novi ucenik d/n\n");
        scanf("%c",&odgovor);
        if(odgovor=='n'){
            printf("Lista..\n");
            printf("Podaci\n");
            for(tekuci=prvi; tekuci != NULL; tekuci=tekuci->sledeci)
                printf("Redni broj: %d Ocena: %d -- adresa tekuceg %d, adresa sledeceg %d\n",tekuci->broj,tekuci->ocena_vladanje,tekuci,tekuci->sledeci);
            exit(1);
        }
        if(odgovor=='d'){
            printf("Unesi podatke nove osobe..\n");
            printf("Broj ucenika u dnevniku ");
            scanf("%d",&broj_dnevnik);
            printf("Ocena iz vladanja ");
            scanf("%d",&ocena_vl);
            printf("Dodaj na pocetak ili na kraj? p/k\n");
            scanf("%c",&odgovor);
            if(odgovor=='p')
                dodaj_na_pocetak(prvi,ocena_vl,broj_dnevnik);
            else{
                if(odgovor=='k')
                    dodaj_na_kraj(prvi, ocena_vl, broj_dnevnik);
            }
        }
    }
}
DusanN je offline   Odgovor sa citatom ove poruke
Stara 19.6.2017, 9:49   #2
NIx Car
Deo inventara foruma
 
Član od: 28.12.2006.
Lokacija: New Now
Poruke: 3.641
Zahvalnice: 1.743
Zahvaljeno 921 puta na 518 poruka
Slanje poruke preko MSN-a korisniku NIx Car Slanje poruke preko Skypea korisniku NIx Car
Određen forumom Re: Pomoc oko zadatka

Odradi fflush(stdin);
posle ove linije
Kod:
scanf("%d",&ocena_vl);
NIx Car je offline   Odgovor sa citatom ove poruke
Stara 19.6.2017, 11:12   #3
DusanN
Član
 
Član od: 10.1.2014.
Lokacija: Vranje
Poruke: 453
Zahvalnice: 40
Zahvaljeno 41 puta na 35 poruka
Određen forumom Re: Pomoc oko zadatka

Hvala sada je to dobro, ali kad izaberem 'n' i kad treba da ispise ne ispise nista samo izbaci lista i podaci i prazno
DusanN je offline   Odgovor sa citatom ove poruke
Stara 19.6.2017, 21:00   #4
doctor
Deo inventara foruma
 
Član od: 14.3.2008.
Lokacija: EHCPCGG
Poruke: 12.110
Zahvalnice: 4.319
Zahvaljeno 3.295 puta na 2.274 poruka
Određen forumom Re: Pomoc oko zadatka

Citat:
DusanN kaže: Pregled poruke
Kod:
        for(tekuci=lista; tekuci->sledeci != NULL; tekuci=tekuci->sledeci) {}
            tekuci->sledeci=novi;
Fellow Vranjanac, meni je ovo zapalo za oko kod dodavanja elementa (ako ne grešim, a moguće je dva dana nisam spavao ), ti prolaziš kroz sve elemente ove lančane liste i već kod prve podesiš sledeći na novi pa petlja izabere sledeći koji je sada novi i podesiš mu referencu na samog sebe i tu ti petlja nema kraja. Dodao sam ove vitičaste zagrade tako da petlja ne radi ništa samo ti "dotera" pointer na tekući na poslednji element l. liste i onda njegov sledeći podesi na novi. To što sam dodao vitičaste zagrade znači da će se petlja izvrteti "u prazno" bez izvršenja bilo kakvog koda a onda će se izvršiti tekuci->sledeci=novi;
doctor je offline   Odgovor sa citatom ove poruke
Stara 19.6.2017, 23:20   #5
DusanN
Član
 
Član od: 10.1.2014.
Lokacija: Vranje
Poruke: 453
Zahvalnice: 40
Zahvaljeno 41 puta na 35 poruka
Određen forumom Re: Pomoc oko zadatka

Proklete liste najslabije ih znam.
Probao sam kao sto mi je jos drazi Vranjanac napisao medjutim baca mi gresku da novi nije definisan
DusanN je offline   Odgovor sa citatom ove poruke
Stara 20.6.2017, 2:11   #6
doctor
Deo inventara foruma
 
Član od: 14.3.2008.
Lokacija: EHCPCGG
Poruke: 12.110
Zahvalnice: 4.319
Zahvaljeno 3.295 puta na 2.274 poruka
Određen forumom Re: Pomoc oko zadatka

Ovo bi trebalo da radi.
Promenio sam ti sve printf/scanf, funkcije u njihove safe varijante, flushovao sam svuda i stdin i stdout da bi se izbegli potencijalni problemi sa time.
Uoči i printf_s(" %c", &odgovor); i blanko znak ispred %c - to je da bi se uklonili potencijalni newline karakteri koje generiše neki od prethodnih printf-ova a što dovodi do "preskakanja" izvršenja scanf funkcije koja traži unos jednog karaktera u delu gde program pita da li želiš da dodaš element na početak ili kraj liste.
For petlje su sada while petlje.

Takođe, pošto si već deklarisao prvi element kao globalni pomerio sam ga na početak koda ispod strukture i koristio ga u obe pomoćne funkcije umesto prosleđenog parametra "lista". Mrzi me sad da gledam u detalje ali verovatno nisi lepo prosledio referencu na pointer "prvi" inače bi i to trebalo da radi kako treba.

Kod:
#include <stdio.h>
#include <stdlib.h>
//fflush(stdout);
typedef struct ucenik {
	int broj;
	int ocena_vladanje;
	struct ucenik *sledeci;
}Ucenik;
Ucenik *prvi = NULL;

void dodaj_na_pocetak(Ucenik *lista, int ocena, int broj) {
	Ucenik *novi = (Ucenik*)malloc(sizeof(Ucenik));
	novi->broj = broj;
	novi->ocena_vladanje = ocena;
	novi->sledeci = prvi;
	printf("Dodajem na pocetak: %d %d \n", novi->broj, novi->ocena_vladanje);
	fflush(stdout);
	prvi = novi;
}

void dodaj_na_kraj(Ucenik *lista, int ocena, int broj) {
	Ucenik *novi = (Ucenik*)malloc(sizeof(Ucenik));
	Ucenik *tekuci = NULL;
	novi->broj = broj;
	novi->ocena_vladanje = ocena;
	novi->sledeci = NULL;
	printf("Dodajem na kraj: %d %d \n", novi->broj, novi->ocena_vladanje);
	fflush(stdout);
	if (prvi == NULL)
		prvi = novi;
	else {
		tekuci = prvi;
		while (tekuci->sledeci != NULL) tekuci = tekuci->sledeci;
		tekuci->sledeci = novi;
	}
}


int main() {
	int broj_dnevnik;
	int ocena_vl;
	char odgovor, odgovor2;
	Ucenik *tekuci;
	while (1) {
		printf_s("Novi ucenik d/n\n");
		fflush(stdout);
		scanf_s(" %c", &odgovor);
		fflush(stdin);
		if (odgovor == 'n') {
			printf_s("Lista..\n");
			printf_s("Podaci\n");
			fflush(stdout);
			tekuci = prvi;
			printf_s("Adresa prvog %d", tekuci);
			fflush(stdout);
			while (tekuci != NULL){
				printf_s("Iteracija petlje..");
				fflush(stdout);
				printf_s("Redni broj: %d Ocena: %d -- adresa tekuceg %d, adresa sledeceg %d\n", tekuci->broj, tekuci->ocena_vladanje, tekuci, tekuci->sledeci);
				fflush(stdout);
				tekuci = tekuci->sledeci;
			}
			system("pause");
			exit(1);
		}
		if (odgovor == 'd') {
			printf_s("Unesi podatke nove osobe..\n");
			printf_s("Broj ucenika u dnevniku ");
			fflush(stdout);
			scanf_s(" %d", &broj_dnevnik);
			fflush(stdin);
			printf_s("Ocena iz vladanja ");
			fflush(stdout);
			scanf_s(" %d", &ocena_vl);
			fflush(stdin);
			printf_s("Dodaj na pocetak ili na kraj? p/k\n");
			fflush(stdout);
			scanf_s(" %c", &odgovor2);
			fflush(stdin);
			if (odgovor2 == 'p')
				dodaj_na_pocetak(prvi, ocena_vl, broj_dnevnik);
			else {
				if (odgovor2 == 'k')
					dodaj_na_kraj(prvi, ocena_vl, broj_dnevnik);
			}
		}
	}
	return 0;
}
doctor je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku doctor na korisnoj poruci:
DusanN (20.6.2017)
Stara 20.6.2017, 8:56   #7
DusanN
Član
 
Član od: 10.1.2014.
Lokacija: Vranje
Poruke: 453
Zahvalnice: 40
Zahvaljeno 41 puta na 35 poruka
Određen forumom Re: Pomoc oko zadatka

Not all heroes wear capes
Hvala ti puno
DusanN je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

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
Procena računara alien Šta da kupim? 6942 17.12.2023 10:28
Gledanje filmova putem Android telefona? Pomoc hitno Kobilic Aparati i oprema 34 13.8.2015 11:24
pomoc eksel (rešavanje zadataka) boza16v Aplikativni softver 0 1.12.2012 19:12
Samsung gt-S5230 Aplikacije??? Pomoc Kobilic Aparati i oprema 26 17.9.2012 18:38
Pomoc oko pravljenja programa(C) RUSuper Programiranje 14 20.4.2012 17:35


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


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