Wątek przeniesiony 2017-05-10 21:22 z C/C++ przez Patryk27.

Vector - coś nie tak?

0
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>

int main()
{
	srand(time(NULL));

	// Do Vectora elementów typu int losujesz 20 liczb z przedziału <10, 100>. Oblicz sumę tych elementów, które 
	// są podzielne przez 5

	std::vector<int> vector;
	int liczba = 10 + rand() % 91;
	int suma = 0;

	for (int i = 0; i < 20; ++i)
	{
		vector.push_back(liczba);
	}

	for (int i = 0; i < vector.size(); ++i)
	{
		if (vector[i] % 5 == 0)
		{
			suma += vector[i];
		}
	}

	std::cout << "Suma = " << suma << std::endl;

	std::cin.get();
	return 0;
}

Co jest w moim kodzie źle? Sumę zawsze pokazuje 0.

0

Liczbę losujesz tylko raz, a nie 20 razy, jak zapewne Ci się wydaje.

0

No już chyba sobie poradziłem z tym i teraz to wygląda tak:

#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>

int main()
{
	srand(time(NULL));

	// Do Vectora elementów typu int losujesz 20 liczb z przedziału <10, 100>. Oblicz sumę tych elementów, które 
	// są podzielne przez 5

	std::vector<int> vector;
	//int liczba = 10 + rand() % 91;
	int suma = 0;

	for (int i = 0; i < 20; ++i)
	{
		vector.push_back(10 + rand() % 91);
		//vector.push_back(liczba);
	}

	for (int i = 0; i < vector.size(); ++i)
	{
		if (vector[i] % 5 == 0)
		{
			suma += vector[i];
		}
	}

	std::cout << "Suma = " << suma << std::endl;

	

	std::cin.get();
	return 0;
}

To co wziąłem w komentarz było źle, tylko tak naprawdę dlaczego? I tak mam losowanie w pętli. Nie do końca rozumiem dlaczego nie mogę zrobić zmiennej i przypisać do niej losowanie i potem tą zmienną przypisać do wektora a muszę robić mechanizm losujący w wektorze.

Dzięki.

1

Nie do końca rozumiem dlaczego nie mogę zrobić zmiennej i przypisać do niej losowanie i potem tą zmienną przypisać do wektora a muszę robić mechanizm losujący w wektorze.

Ponieważ zmienna to nie funkcja - jeśli zmiennej przypiszesz jakąś wartość, będzie ona tam trzymana aż do następnej instrukcji przypisania.
Aktualnie losujesz liczbę w pętli, a przedtem losowałeś tylko raz i cały czas tę samą liczbę wrzucałeś do wektora.

0
Czarny Ogórek napisał(a):

Nie do końca rozumiem dlaczego nie mogę zrobić zmiennej i przypisać do niej losowanie i potem tą zmienną przypisać do wektora a muszę robić mechanizm losujący w wektorze.

Oczywiście, że możesz, wtedy to będzie tak wyglądało:

    int liczba = 0;
 	for (int i = 0; i < 20; ++i)
 	{
        liczba = 10 + rand() % 91;
 		vector.push_back(liczba);
 	}
0

Dzięki :) Teraz mam kolejny problem z innym zadaniem.

#include <iostream>
#include <vector>
#include <string>

int main()
{
	// Pobierz 5 napisów i zlicz ile napisów o długości większej niż 10

	std::vector<std::string> napis;
	std::string napis2;
	for (int i = 0; i < 5; ++i)
	{
		std::cout << "Podaj napis" << std::endl;
		std::getline(std::cin, napis2);
		std::cin.get();
	}

	int licznik = 0;
	for (int i = 0; i < napis.size(); ++i)
	{
		if (napis[i].length() > 10)
		{
			++licznik;
		}
	}
	
	std::cout << "LICZNIK = " << licznik << std::endl;

	std::cin.get();
	return 0;
}
1

Przecież nigdzie nie zapisujesz pobranych słów więc co tam liczysz?

0

Tutaj:

        if (napis[i].length() > 10)
        {
            ++licznik;
        }

zliczasz ile napisów jest dłuższych od 10, ale nie sumujesz ich.

1 użytkowników online, w tym zalogowanych: 0, gości: 1