datoteka i lista

datoteka i lista

offline
  • Pridružio: 08 Maj 2005
  • Poruke: 85

pozz, ovako imam jedan problem, postoji datoteka sa parametrima : IME PREZIME i posle toga negraniceno brojeva recimo IME PREZIME 1 2 4 6 4 7 9 , treba da IME PREZIME ucitam u listu i nadjem aritmeticku sredinu ovih brojeva i takodje njih ucitam u listu,,, recimo jedan element lsite bi bio
MILAN JANKOVIC 3.46
e sad prave mi problem ovi brojevi sto kaze da ih ima proizvoljno mnogo,,, kako najlakse da ih ocitam izbrojim i nadjem aritmeticku sredinu a potom ubacim u listu,,,

lakse bi mi bilo recimo da ih imam ograniceno,,,, onda prosto uradim najobicniju konverziju

while (!feof (ulaz))
{
fscanf (ulaz, "%s %s %d %d %d",ime,prezime, broj1,broj2,broj3);
dodavanje (lst,struktura);
}

izgled datoteke je sledeci
IME PREZIME 1 2 4 6 8 2(\n)
IME PREZIME 2 4 5 7 9(\n)

treba u listi da "izgleda": IME PREZIME 3.43



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Ideja je sledeca:
nemoj da koristis
fscanf (ulaz, "%s %s %d %d %d",ime,prezime, broj1,broj2,broj3);
jer time imas samo tri broja, a kazes da imas ne znas koliko... uzmi ovako:
Ucitas sa jednim fscanf-om string za ime, i isto tako za prezime, onda uzmimas karakter po karakter sve dok ne dodjes do "\n" ili novog reda.

Kad uzmes karakter , propustis ga kroz funkciju isdigit nalazi se u ctype.h da vidis da li je broj. E, sad, posto uzimas jedan po jedan karakter ti moras da pravis od njih brojeve, tj. ako znas da u podacima imas nesto sto je vece od 9 onda moras da pravis brojeve. Ovako:
Ako imas
123 3
ti kad uzmes 1, smestis ga u promenljivu npr. "trenutniBroj"
onda ucitas 2, pa uradis sledece
trenutniBroj *=10; trenutnibBroj +=karakter;
Gde ti je "karakter" promenljiva u koju si ucitao trenutni karakter, i to radis sve dok ne dodjes do praznine. Kada dodjes do praznine dodas trenutni broj na ukupnu sumu i povecas broj brojeva za jedan ( treba ti da znas koliko si ih izbrojao zbog aritmeticke sredine ). Kad naidjes na novi red resetujes sve i krenes iz pocetka Smile



offline
  • Pridružio: 08 Maj 2005
  • Poruke: 85

hvala ti na odgovoru , svidja mi se resenje, ako sam razumeo ovo radi na foru ASCII koda ?

offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

ako pitas za funkciju isdigit, jedna implementacija bi bila
int isdigit (char c) {    if ((c>='0') && (c<='9')) return 1;    return 0; }
Samo proverava da li je broj izmedju 0 i 10 i to je to... uzima karakter po karakter, zato i moras da radis onu konverziju sa trenutni broj ( za slucaj da su brojevi dvocifreni ili trocifreni...)

offline
  • Pridružio: 08 Maj 2005
  • Poruke: 85

aaaha, jasno mi je, hvala puno na pomoci Very Happy Very Happy

offline
  • Pridružio: 27 Nov 2010
  • Poruke: 37

C++

#include <iostream> #include <fstream> using namespace std; int main() {     ifstream inputFile;     inputFile.open( "myTextFile.txt" );     string Ime;     string Prezime;     int iNumber = 0;     double Number;     double arSredina = 0;     inputFile >> Ime;     inputFile >> Prezime;         while( inputFile >> Number ) {         arSredina = arSredina + Number;         iNumber++;     }         arSredina = arSredina / iNumber;     cout << Ime << " " << Prezime << " " << arSredina << endl;     inputFile.close();     return 0; }

Ko je trenutno na forumu
 

Ukupno su 969 korisnika na forumu :: 10 registrovanih, 0 sakrivenih i 959 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: djordje92sm, Glavni Oružni, IQ116, Lj_ubo, markomacii9, mile.ilic75, Mitrast, ping15, RED4G-304, saputnik plavetnila