Programiranje DEV C++

  • Začetnik teme Začetnik teme Aca1.
  • Datum pokretanja Datum pokretanja

Aca1.

Početnik
Poruka
3
Da li neko moze da uradi ovaj zadatak, bio bih veoma zahvalan. Hvala unapred.

IMG_20190709_120233.png
 
Da treba da napise sta mu nije jasno. Znaci tu ima citanje iz fajla parsovanje u strukturu i upit. Znaci treba da izabere
u kom formatu unosi rekord, najbolje csv posto je to neki standard, i cak u zadatku ne mora da pita za uslov pretrage nego da hardkodira ;)

edit:
znaci pravi listu struktura sa datim podacima cita red po red, onda prolazi kroz listu i ispituje na kriterijum te ispisuje.
U C++ je ovo trivijalno posto ima std::list<struktura>, ali u C-u mora da implemenira listu.

edit2:
moze da koristi i niz pointera umesto liste ako je vec problem da se implementira, znaci ili da odredi maksimalnu
velicinu niza ili da ga dinamicki alocira po broju redova iz fajla.
 
Poslednja izmena:
Prvo otvoris datoteku sto mozda uspe a onda pitas za ime, pa opet otvaras sto drugi put ne uspe, a mozda ni prvi put. Ako vec pitas za ime datoteke onda to ime i iskoristi, a ne da hardkodiras aca.txt. Sto se tice scanf %s je za niz karaktera a %d za integer. Trebalo bi da prodjes neki C turorial prvo posto si trebao char aca[50].
pa scanf("%s",aca); pa dat=fopen(aca,"r");
Da li aca.txt postoji?
 
Pitanje za ostale: Zašto se u kodu ne vide brojevi redova?



Napravi fajl test.txt koji treba da stoji u istom folderu:

Kod:
Marija Antic 35 Sabac
Sasa Katic 14 Valjevo
Ana Bozic 24 Becej
Jovan Jovanovic 7 Valjevo
Milan Petrovic 28 Valjevo
Dejan Stanic 76 Kragujevac
Jana Markovic 38 Valjevo
Petar Djordjevic 34 Nis
Sima Bojic 4 Valjevo


Ovde ti dalje nedostaje da sam uradiš proveru starosti:

C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   FILE* fp;
   char* filename = "test.txt";
   char* city = "Valjevo";

   fp = fopen(filename, "r");
   if (fp == NULL){
        printf("Greska prilikom otvaranja datoteke %s",filename);
       } else
   {
      char line[128];  // ovde cemo da smestamo pojedinacne redove iz datoteke
      while ( fgets ( line, sizeof line, fp ) != NULL )   {
            char duplicateLine[128];
            strcpy(duplicateLine, line); //cuvamo original reda u primenljivoj line, a sa duplikatom cemo da se igramo
            char* token;
            token = strtok(duplicateLine, " "); // ova funkcija secka string po zadatom delimiteru

            int printer = 0; // odredjuje da li red zadovoljava uslove za stampanje. ako bude vece od nule, red ide na ekran
            int i = 0; //prati u kojoj se koloni nalazimo

            while(token != NULL)
                {
                i++;
                if(i==3){ //treca kolona
                    // provera starosti
                    // ako zadovoljava uslov, povecati printer za jedan
                    }
                if(i==4){ //cetvrta kolona
                    int poklapanjeGrada;
                    int duzinaImenaGrada = strlen(token)-1; // ime grada je poslednje u redu pa ce token da sadrzi i prelazak u novi red, a to je jedan char viska
                    poklapanjeGrada = strncmp(city, token, duzinaImenaGrada); // ako su identicni funkcija vraca vrednost nula
                    if (poklapanjeGrada == 0){printer++;} //ispunjen jedan uslov za stampu, povecavamo promenljivu printer
                    }
                token = strtok (NULL, " ");
                }
            if(printer >0) {  printf(line, "\n");  } // ako su oba uslova za stampu ispunjena printer treba da ode na dvojku. promeniti to kasnije.
      }
      fclose ( fp );
   }
   printf("\n\n");
   return 0;
}

P:S: bmaxa je u pravu, nagrabusio si. :D
 
Poslednja izmena:
Ma znam. Ako neko ne pritisne Enter napon poslednjeg unosa u datoteku, u poslednjem redu će bezveze da skine jedan char jer tamo uopšte i nema \n pa će da ostane Valjev.

Trebalo bi najpre ispitati da li ima prelazak u novi red, onda u zavisnosti od toga skinuti poslednji char, onda uporediti duzine dva stringa, pa tek ako su iste duzine uporedjivati sadrzaj. Nek uradi i on nesto :)
 
C++:
#include <fstream>
#include <iostream>

int main() {
    std::ifstream ifs("test.txt");
    if (ifs.is_open()){
        std::string ime,prezime,grad;
        int godine = 0;
        while (ifs) {
            ifs>>ime>>prezime>>godine>>grad;
            if (godine >= 18 && grad == "Valjevo")
                std::cout<<ime<<" "<<prezime<<" "<<godine<<" "<<grad<<"\n";
        }

    } else {
        std::cout << "ne mogu da otvorim datoteku\n";
    }
}

A vidi resenje u C++ :P
 

Back
Top