Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 26.1.2012, 4:44   #1
Ivan-94
Veteran
 
Član od: 15.3.2009.
Lokacija: Beograd
Poruke: 654
Zahvalnice: 240
Zahvaljeno 63 puta na 43 poruka
Slanje poruke preko MSN-a korisniku Ivan-94 Slanje poruke preko Skypea korisniku Ivan-94
Određen forumom How to... C++

Kako krenem da ucim jezik, tako pocinju teme How to....

Kod:
Spoiler za Kod:
Kod:
// O-recnik.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>

using namespace std;

vector<string> split(const string& s, const string& delim, const bool keep_empty = true) {
    vector<string> result;
    if (delim.empty()) {
        result.push_back(s);
        return result;
    }
    string::const_iterator substart = s.begin(), subend;
    while (true) {
        subend = search(substart, s.end(), delim.begin(), delim.end());
        string temp(substart, subend);
        if (keep_empty || !temp.empty()) {
            result.push_back(temp);
        }
        if (subend == s.end()) {
            break;
        }
        substart = subend + delim.size();
    }
    return result;
}

string toLower(string strr)
{	
	char str[100];
	string ret;
	strcpy(str,strr.c_str());
	int differ = 'A'-'a';
	char ch;
	int ii = strlen(str);
	for (int i=0; i <ii;i++)                                                           
	{
		strncpy(&ch,str+i,1);
		if (ch>='A' && ch<='Z')
		{
			ch = ch-differ;
			memcpy(str+i,&ch,1);
		}
	}
	ret = str;
	return ret;
}

int _tmain(int argc, _TCHAR* argv[])
{
	vector<string> words;
	int n;
	string temp;
	bool flag = true;
	bool nflag = true;
	int counter = 0;

	cin >> n;

	for(int i = 0; i < n; i++){
		cin >> temp;
		vector<string> x = split(temp, " ");
		flag = true;
		counter = 0;

		if(toLower(x[0]) == "add"){
			 for (int i = 0; i < words.size(); i++)
				 if(find(words.begin(), words.end(), x[1]) != words.end())
					 flag = false;

			 if(flag){
				 words.push_back(toLower(x[1]));
				 sort( words.begin(), words.end() );
			 }
		}

		if(toLower(x[0]) == "less"){
			if(find(words.begin(), words.end(), x[1]) == words.end())
				cout << "no such word" << endl;
			else {
				for (int i = 0; i < words.size(); i++)
				if(words[i] != toLower(x[1]))
					 counter++;
				 else
					break;
				cout << counter << endl;
			}
		}
	}

	return 0;
}


I izlazi mi stalno problem "vector subscript out of range", a ja nemam pojma kako to da popravm.Video sam da ima neke veze sa indeksima elemenata, ali ja ne vidim problem.
Ivan-94 je offline   Odgovor sa citatom ove poruke
Stara 26.1.2012, 15:42   #2
NISAM NESTO SMART
Član
 
Član od: 14.7.2009.
Lokacija: Srbija
Poruke: 315
Zahvalnice: 53
Zahvaljeno 73 puta na 54 poruka
Slanje poruke preko MSN-a korisniku NISAM NESTO SMART
Određen forumom Re: How to... C++

Pogledao sam malo kod iako nisam najbolje ukapirao sta pokusavas, ali koliko vidim ti pravis ovakav input "less nekistring" ili "add nekistring" i u tom slucaju se desava error.
Problem je sto ti kad koristis >> on ne izvuce celu recinicu vec samo prvu rec do whitespace-sa i ti kad pristupas x[1] to je nepostojece i prekoracavas granice vektora i otuda ta greska ptistupas necemu sto nema, uglavnom kad imas takvu gresku znaci da si prekoracio granice vektora.

Mozes da koristis getline() da bi uzeo celu linuju, uostalom vidi da li je to greska pa se snadji
NISAM NESTO SMART je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku NISAM NESTO SMART na korisnoj poruci:
Ivan-94 (27.1.2012)
Stara 27.1.2012, 14:58   #3
Ivan-94
Veteran
 
Član od: 15.3.2009.
Lokacija: Beograd
Poruke: 654
Zahvalnice: 240
Zahvaljeno 63 puta na 43 poruka
Slanje poruke preko MSN-a korisniku Ivan-94 Slanje poruke preko Skypea korisniku Ivan-94
Određen forumom Re: How to... C++

E sad jos jedan program...

kod:
Spoiler za kod:
Kod:
#include <vector>
#include <string>
#include <iostream>
#include <stdio.h>
#include <sstream>

using namespace std;


int counter[10];

int main(){
    for(int i = 2; i <= 9; i++)
        counter[i] = 0;

    int in;
    cin >> in;

    for (int i = 9; i > 1;){
        if(in % i == 0){
            counter[i] = counter[i] + 1;
            in = (int)(in / i);
        }
        else
            i--;
    }

    if(in != 1){
        cout << "-1" << endl;
        return -1;
    }

    stringstream tst;

    for(int i = 2; i <= 9;){
        if(counter[i] > 0){
            tst << i;
            counter[i] = counter[i] - 1;
        } else
            i++;
    }

    cout << tst;

	fflush(stdin);

	cin.get();
}


I uvek dobijam neki cudni output kao: 0x28fe78.
Ivan-94 je offline   Odgovor sa citatom ove poruke
Stara 27.1.2012, 15:18   #4
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: How to... C++

Kod:
cout << tst.str();
Kod:
//#include <string.h>
// fflush(stdin)
#include <limits>
#ifdef max // glupavi M$  makro
#undef max
#endif
...
cin.ignore( numeric_limits< streamsize >::max(), '\n');
cin.get();

Poslednja ispravka: Belphegor (27.1.2012 u 15:40)
Belphegor je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Belphegor na korisnoj poruci:
Ivan-94 (27.1.2012)
Stara 28.1.2012, 13:43   #5
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: How to... C++

Možda sam zakasnio, ali @Ivan-94, prvi post: taj pristup će ti probiti vremenski limit u tom zadatku. (O-recnik, kvalifikacije za okružno 2012, ako se ne varam.) Probaj da razmisliš koju strukturu podataka da iskoristiš kako bi malo efikasnije tražio i dodavao reči
Geomaster je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Geomaster na korisnoj poruci:
Ivan-94 (28.1.2012)
Stara 9.2.2012, 14:41   #6
Luigi
Član
 
Član od: 8.7.2009.
Lokacija: Novi Sad
Poruke: 43
Zahvalnice: 9
Zahvaljeno 0 puta na 0 poruka
Slanje poruke preko Skypea korisniku Luigi
Određen forumom Re: How to... C++

Da ne otvaram novu temu a imamm pitanje vezano za C++. Kako biste u matricu 9x9, nasumično smestili 81 broj na što brži način?
Evo mog pokušaja, iz nekog razloga ne štampa ništa:
Kod:
#include<iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int randomBroj()
{
	srand ( time(NULL) );
    int random = rand() %9;
	return random;
}
int main()

{
	int indexi[9][9],i=0,x,y;
	for(int a=0;a<9;a++)
	{
		for(int b=0;b<9;b++)
		{
			indexi[a][b]=0;
		}
	}
	while(i<81)
	{
		x=randomBroj(); //funkcija koja vraca 
		y=randomBroj(); //nasumicni broj u intervalu 0-8
		if(indexi[x][y]==0)
		{
			indexi[x][y]=i+1;
			i++;
		}
    }
	for(int a=0;a<9;a++)
	{
		for(int b=0;b<9;b++)
		{
			cout<<indexi[a][b];
		}
	}
	getchar();
	getchar();
}
EDIT: Problem je što treba previše vremena da "ubode" slobodne elemente.

Poslednja ispravka: Luigi (9.2.2012 u 15:10)
Luigi je offline   Odgovor sa citatom ove poruke
Stara 17.9.2012, 1:35   #7
Ivan-94
Veteran
 
Član od: 15.3.2009.
Lokacija: Beograd
Poruke: 654
Zahvalnice: 240
Zahvaljeno 63 puta na 43 poruka
Slanje poruke preko MSN-a korisniku Ivan-94 Slanje poruke preko Skypea korisniku Ivan-94
Određen forumom Re: How to... C++

Pokusavam da uradim najednostavniju multithreaded aplikaciju:

Kod:
#include <iostream>
#include <thread>
#include <chrono>

using namespace std;

void f()
{
	while(1)
	{
		cout << "From SIDE thread." << endl;
		this_thread::sleep_for(chrono::seconds(2));
	}
}

int main(int argc, _TCHAR* argv[])
{
	thread t1(f);
	t1.join();

	while(1)
	{
		cout << "From MAIN thread." << endl;
		this_thread::sleep_for(chrono::seconds(2));
	}
	return 0;
}
Ali izgleda da se scope prebaci u tu f-ju i ne vrati se u main, i dalje izvrsavajuci tu f-ju, kao bi ja hteo.

Tj. hocu da output bude, malo iz jedne f-je malo iz main.

Sta radim pogresno?

Poslednja ispravka: Ivan-94 (17.9.2012 u 1:44)
Ivan-94 je offline   Odgovor sa citatom ove poruke
Stara 17.9.2012, 2:32   #8
EclipsE
Starosedelac
 
Član od: 16.4.2006.
Lokacija: Scary Movie Reputacija: ■■□
Poruke: 1.337
Zahvalnice: 378
Zahvaljeno 279 puta na 196 poruka
Slanje poruke preko Skypea korisniku EclipsE
Određen forumom Re: How to... C++

Kod:
t1.join();
Čekaš da se thread t1 završi, što se nikad neće desiti.
EclipsE je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku EclipsE na korisnoj poruci:
Ivan-94 (17.9.2012)
Stara 17.9.2012, 11:14   #9
Ivan-94
Veteran
 
Član od: 15.3.2009.
Lokacija: Beograd
Poruke: 654
Zahvalnice: 240
Zahvaljeno 63 puta na 43 poruka
Slanje poruke preko MSN-a korisniku Ivan-94 Slanje poruke preko Skypea korisniku Ivan-94
Određen forumom Re: How to... C++

Ok ali kako da ne cekam da se zavrsi, nego da odmah posle pokretanja nastavi?
Ivan-94 je offline   Odgovor sa citatom ove poruke
Stara 17.9.2012, 11:21   #10
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: How to... C++

Pa nemoj da pozivaš join() na tom objektu
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 17.9.2012, 11:33   #11
Ivan-94
Veteran
 
Član od: 15.3.2009.
Lokacija: Beograd
Poruke: 654
Zahvalnice: 240
Zahvaljeno 63 puta na 43 poruka
Slanje poruke preko MSN-a korisniku Ivan-94 Slanje poruke preko Skypea korisniku Ivan-94
Određen forumom Re: How to... C++

Joj, cek, mozda nisam lepo formulisao pitanje.
Kako da pokrenem dve f-je odjednom i da jedna malo dobije vreme procesora malo druga?
Ivan-94 je offline   Odgovor sa citatom ove poruke
Stara 18.11.2012, 17:36   #12
Night Walker
Član
 
Član od: 21.7.2012.
Lokacija: Srbija
Poruke: 31
Zahvalnice: 5
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: C++

Ljudi, treba mi pomoc oko stringova.
Kako da uporedim string zapamcen u nizu od 15 karaktera sa nekim konstantnim stringom?
Skontao sam da mogu da uporedjujem skaki pojedinacni karakter
(if (ff[0]=='T' && itd... do '\0'))
Ali to je naporno jer ima mnogo konstantnih stringova sa kojim treba uporediti.
Moze tako da radi jedino ako napravim funkciju u koja ce da uporedjuje 2 stringa koja jos se posalju, ali sigurno postoji jednostavniji nacin, zar ne?
Night Walker je offline   Odgovor sa citatom ove poruke
Stara 18.11.2012, 17:43   #13
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++

http://www.cplusplus.com/reference/c...string/strcmp/
Teva je offline   Odgovor sa citatom ove poruke
Stara 22.11.2012, 15:05   #14
voodoo_
V.I.P. GNU/Linux
 
Avatar korisnika voodoo_
 
Član od: 1.11.2005.
Poruke: 11.163
Zahvalnice: 2.082
Zahvaljeno 4.922 puta na 2.858 poruka
Određen forumom Re: C++

Radi sigurnosti, koristi strncmp (kao treći argument prosledi dužinu prvog stringa od 15 karaktera).
voodoo_ je offline   Odgovor sa citatom ove poruke
Stara 12.12.2012, 22:29   #15
Ozzy
Član
 
Član od: 10.9.2008.
Lokacija: Beograd
Poruke: 81
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: How to... C++

Jel bi mogao neko da mi za ovaj algoritam tj kod da mi napise ulaz i izlaz tj da program moze da cita sa standardnog ulaza i izbacuje resenje na standardni izraz. Ja bi to sam uradio al neki delovi mi nisu bas jasni pa ce mi ovako biti lakse da posmatram posle u kompajleru korak po korak sta program radi pa da razumem. Hvala unapred

Kod:
#include <string>
#include <cctype>

using namespace std;

class Parser
{
    string input;
    bool isValid;

    bool isEnd(size_t pos) const
    {
        return pos >= input.size();
    }

    bool readChar(size_t &pos, char c) const
    {
        if (isEnd(pos) || input[pos] != c) {
            return false;
        }

        ++pos;

        return true;
    }

    bool readString(size_t &pos, const string &str) const
    {
        if (input.substr(pos, str.size()) != str) {
            return false;
        }

        pos += str.size();

        return true;
    }

    bool isLetter(size_t pos) const
    {
        return isEnd(pos) == false && isalpha(input[pos]);
    }

    bool isAlphanumeric(size_t pos) const
    {
        return isEnd(pos) == false && isalnum(input[pos]);
    }

    bool readPropositionalLetter(size_t &pos) const
    {
        if (isLetter(pos) == false) {
            return false;
        }

        do {
            ++pos;
        } while (isLetter(pos));

        return true;
    }

    bool readSubformula(size_t &pos) const
    {
        if (isEnd(pos)) {
            return false;
        }

        if (readChar(pos, '-')) {
            return readSubformula(pos);
        }

        if (readChar(pos, '(')) {
            return readSubformula(pos) && readChar(pos, '>') && readSubformula(pos) && readChar(pos, ')');
        }

        return readPropositionalLetter(pos);
    }

    bool findImplication(size_t &pos) const
    {
        int brackets = 0;

        for (; isEnd(pos) == false; ++pos) {
            if (brackets == 0 && input[pos] == '>') {
                ++pos;

                return true;
            }

            if (input[pos] == '(') {
                ++brackets;
            } else if (input[pos] == ')') {
                --brackets;
            }
        }

        return false;
    }

public:
    Parser(const string &input) :
        input(input)
    {
        size_t pos = 0;

        if (readSubformula(pos) == false) {
            isValid = false;

            return;
        }

        if (isEnd(pos)) {
            isValid = true;

            return;
        }

        pos = 0;

        isValid = readSubformula(pos) && readChar(pos, '>') && readSubformula(pos) && isEnd(pos);
    }

    bool axiom1() const
    {
        if (isValid == false) {
            return false;
        }

        if (input.size() >= 2 && input[0] == '(' && input[input.size() - 1] == ')') {
            Parser tmp(input.substr(1, input.size() - 2));

            if (tmp.axiom1()) {
                return true;
            }
        }

        size_t pos = 0;

        if (findImplication(pos) == false) {
            return false;
        }

        string a = input.substr(0, pos - 1);

        return readChar(pos, '(') && findImplication(pos) && readString(pos, a + ")") && isEnd(pos);
    }

    bool axiom2() const
    {
        if (isValid == false) {
            return false;
        }

        if (input.size() >= 2 && input[0] == '(' && input[input.size() - 1] == ')') {
            Parser tmp(input.substr(1, input.size() - 2));

            if (tmp.axiom2()) {
                return true;
            }
        }

        size_t pos = 0;

        if (readChar(pos, '(') == false || findImplication(pos) == false) {
            return false;
        }

        string a = input.substr(1, pos - 2);

        if (readChar(pos, '(') == false || findImplication(pos) == false) {
            return false;
        }

        string b = input.substr(a.size() + 3, pos - a.size() - 4);

        pos = 0;

        if (findImplication(pos) == false) {
            return false;
        }

        string c = input.substr(a.size() + b.size() + 4, pos - a.size() - b.size() - 7);

        return readString(pos, string("((") + a + ">" + b + ")>(" + a + ">" + c + "))") && isEnd(pos);
    }

    bool axiom3() const
    {
        if (isValid == false) {
            return false;
        }

        size_t pos = 0;

        if (readString(pos, "((")) {
            Parser tmp(input.substr(1, input.size() - 2));

            return tmp.axiom3();
        }

        if (readString(pos, "(-") == false || findImplication(pos) == false) {
            return false;
        }

        string b = input.substr(2, pos - 3);

        pos = 0;

        if (findImplication(pos) == false) {
            return false;
        }

        string a = input.substr(b.size() + 4, pos - b.size() - 6);

        return readString(pos, string("(") + a + ">" + b + ")") && isEnd(pos);
    }
};
Ozzy je offline   Odgovor sa citatom ove poruke
Stara 12.12.2012, 23:15   #16
M.Silenus
Veteran
 
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
Određen forumom Re: How to... C++

Ovako nešto:

Kod:
#include <iostream>
#include <iomanip>
#include <iterator>

// ... parser kod ... //

int main()
{
  std::string input(std::istream_iterator<std::string::value_type>(std::cin),
                         std::istream_iterator<std::string::value_type>());
					
  Parser parser(input);
  
  std::cout << std::boolalpha;

  std::cout << parser.axiom1() << "\n";
  std::cout << parser.axiom2() << "\n";
  std::cout << parser.axiom3() << "\n";
  
  return 0;
}
Ispišeš ulaz i lupiš Ctrl + Z i dobiješ rezultat.
M.Silenus je offline   Odgovor sa citatom ove poruke
Stara 12.12.2012, 23:31   #17
Ozzy
Član
 
Član od: 10.9.2008.
Lokacija: Beograd
Poruke: 81
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: How to... C++

Citat:
M.Silenus kaže: Pregled poruke
Ovako nešto:

Kod:
#include <iostream>
#include <iomanip>
#include <iterator>

// ... parser kod ... //

int main()
{
  std::string input(std::istream_iterator<std::string::value_type>(std::cin),
                         std::istream_iterator<std::string::value_type>());
                    
  Parser parser(input);
  
  std::cout << std::boolalpha;

  std::cout << parser.axiom1() << "\n";
  std::cout << parser.axiom2() << "\n";
  std::cout << parser.axiom3() << "\n";
  
  return 0;
}
Ispišeš ulaz i lupiš Ctrl + Z i dobiješ rezultat.
Hvala ti druze mnogo
Jel ovo Ctrl+Z moze da se promeni da radi na neku drugu komandu tipa da kad kliknes na tab da krene da radi?
Ozzy je offline   Odgovor sa citatom ove poruke
Stara 13.12.2012, 0:07   #18
M.Silenus
Veteran
 
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
Određen forumom Re: How to... C++

Ne znam za tab, ali, ako ti odgovara da ulaz obrađuješ liniju po liniju (tj. kad pritisneš enter, on pozove parser) onda možeš da uradiš ovako nešto:

Kod:
#include <iostream>
#include <iomanip>
#include <iterator>

// ... parser kod ... //

int main()
{
  std::string line;
                    
  while(std::getline(std::cin, line))
  {
    if( line == "exit" )
      break;

    Parser parser(line);
  
    std::cout << std::boolalpha;

    std::cout << parser.axiom1() << "\n";
    std::cout << parser.axiom2() << "\n";
    std::cout << parser.axiom3() << "\n";
  }
  
  return 0;
}
Ovaj program možeš da prekineš kada otkucaš "exit" + Enter ili Ctrl + Z, pa šta ti više odgovara.

Ne znam kako uraditi to sa tabovima bez neke GUI biblioteke, ali to mi je overkill za aplikaciju ovog tipa.
M.Silenus je offline   Odgovor sa citatom ove poruke
Stara 18.12.2012, 21:39   #19
Ozzy
Član
 
Član od: 10.9.2008.
Lokacija: Beograd
Poruke: 81
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: How to... C++

Jel moze neko da mi napise kako bi se mogao dotati neki text ispred ovoga true i false?

Citat:
M.Silenus kaže: Pregled poruke
Ovako nešto:

Kod:
#include <iostream>
#include <iomanip>
#include <iterator>

// ... parser kod ... //

int main()
{
  std::string input(std::istream_iterator<std::string::value_type>(std::cin),
                         std::istream_iterator<std::string::value_type>());
                    
  Parser parser(input);
  
  std::cout << std::boolalpha;

  std::cout << parser.axiom1() << "\n";
  std::cout << parser.axiom2() << "\n";
  std::cout << parser.axiom3() << "\n";
  
  return 0;
}
Ispišeš ulaz i lupiš Ctrl + Z i dobiješ rezultat.

Poslednja ispravka: Ozzy (19.12.2012 u 20:03)
Ozzy je offline   Odgovor sa citatom ove poruke
Stara 7.7.2013, 16:30   #20
abcdefgh
Novi član
 
Član od: 6.7.2013.
Poruke: 1
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: How to... C++

Ukoliko zelis nauciti C/C++ mozes pogledati i ovaj uvod>

www.scribd.com/duskoKoscica

Kompletno besplatno.
abcdefgh je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Tagovi
c++, how to, pomoc, programiranje

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



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


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