• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Zadanie struktury

VPS Starter Arubacloud
0 głosów
2,066 wizyt
pytanie zadane 6 stycznia 2018 w C i C++ przez alekolorowomi Nowicjusz (120 p.)

Witam wszystkich na forum, potrzebuję pomocy przy zrobieniu zadań z c++, chcę to zrozumieć, lecz nie wiem jak się za to zabrać :(
Dane są następujące deklaracje;

struct ksiazka {
   string nazwa;
   string autor;
   int rok;
   float cena;
   bool twarda_okladka; // czy ma twarda okladke?
   bool podrecznik; // czy jest podrecznikiem?



1. Napisz funkcje przyjmujaca tablice ksiazek oraz liczbe elementow w tablicy i zwracajaca liczbe (sume) ksiazek o twardej okladce i podrecznikow o miekkej okladce.
2. Napisz funkcje przyjmujaca tablice ksiazek oraz liczbe elementow w tablicy i zwracajaca indeks najdrozszego podrecznika wydanego przed rokiem 1976. Jezeli w tablicy nie ma ksiazki ktora spelnia te kryteria, funkcja ma zwrocic wartosc -1.

Tutaj są moje rozwiązania, ale nie są dobre, stąd moja prośba o pomoc.

Zad.1

Zad.2

komentarz 6 stycznia 2018 przez alekolorowomi Nowicjusz (120 p.)
#include "stdafx.h"
#include <iostream>

using namespace std;

struct ksiazka {

	string nazwa;
	string autor;
	int rok;
	float cena;
	bool twarda_okladka;
	bool podrecznik;
};

int twarda_okladka(ksiazka tab[], int arraySize) {

	int ilosc_ksiazek = 0;

	for (int i = 0; i < arraySize; ++i)
		if (tab[i].twarda_okladka == true && tab[i].podrecznik == false)
			++ilosc_ksiazek;

	return ilosc_ksiazek;
}

int miekka_okladka(ksiazka tab[], int arraySize) {

	int miekki_podrecznik = 0;

	for (int i = 0; i < arraySize; ++i)
		if (tab[i].twarda_okladka == false && tab[i].podrecznik == true)
			++miekki_podrecznik;

	return miekki_podrecznik;
}

int indeks_ksiazki(ksiazka tab[], int arraySize) {

	int indeks = -1;
	float cena_max = 0;

	for (int i = 0; i < arraySize; ++i) {

		if (tab[i].podrecznik == true && tab[i].rok < 1976)
			if (tab[i].cena > cena_max) {

				cena_max = tab[i].cena;
				indeks = i;
			}	
	}

	return indeks;
}

int main() {
	
	const int arraySize = 6;

	ksiazka tab[arraySize] = {

		{ "Nazwa1", "Autor1", 1997, 22.50, false, true },
		{ "Nazwa2", "Autor2", 2004, 32.50, true, true },
		{ "Nazwa3", "Autor3", 1968, 42.50, true, true },
		{ "Nazwa4", "Autor4", 2009, 32.50, true, false },
		{ "Nazwa5", "Autor5", 2008, 32.50, false, true },
		{ "Nazwa6", "Autor6", 1955, 22.50, true, true },
	};

	cout << "Ilosc ksiazek z twarda okladka: " << twarda_okladka(tab, arraySize) << '\n';
	cout << "Ilosc podrecznikow z miekka okladka: " << miekka_okladka(tab, arraySize) << '\n';
	cout << "Indeks najdrozszej ksiazki przed 1976 rokiem: " << indeks_ksiazki(tab, arraySize) << '\n';

	return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 6 stycznia 2018 przez TenGumis Gaduła (3,440 p.)
1.

Według mnie w 18 linii nie powinno być "books[i].podrecznik == false". Chciałbyś zliczyć wszystkie książki a nie tylko te które nie są podręcznikami.

2.

Nie sprawdzasz czy książka jest podręcznikiem.
komentarz 6 stycznia 2018 przez alekolorowomi Nowicjusz (120 p.)

2 Poprawione

Dokonałem takich poprawek, dalej nie wiem co robić. Kompletnie po tym wolnym ciężko idzie z c++, proszę o pomoc

komentarz 6 stycznia 2018 przez TenGumis Gaduła (3,440 p.)
Teraz jest gorzej niż było albo wrzuciłeś jakiś inny kod :)
komentarz 6 stycznia 2018 przez alekolorowomi Nowicjusz (120 p.)
Próbowałem poprawić, ale pewnie nie wyszło.

Dodałem kod jeszcze jeden robiony w Visual studio
0 głosów
odpowiedź 6 stycznia 2018 przez Marcin_N_97 Stary wyjadacz (10,290 p.)

Gotowego rozwiązania nie podsunę, bo to nie miałoby żadnej wartości dla Ciebie, proponuję w takim razie algorytmy:

ZADANIE 1

  1. Stwórz funkcję, której argumentami będzie wskaźnik na pierwszą książke w tablicy oraz ilość książek w tablicy
  2. Stwórz dwie zmienne, w których będziesz przechowywał ilość książek posiadających twardą okładkę oraz podręczników z miękką
  3. Napisz pętle (for), która przejdzie po wszystkich elementach w Twojej tablicy - wykorzystaj do tego ilość jej elementów, które otrzymujesz w argumencie.
  4. Zastosuj if ... else if. W pierwszym sprawdź czy aktualny element to posiada twarda okładka, jesli tak to zwiększ odpowiednią zmienną. W drugim sprawdź negację twarej okładki oraz czy jest podręcznikiem (użyj `!` oraz `&&`).
  5. Gdy przeiterujesz się po wszystkich elementach (wyjdziesz z fora) to dodaj zmienne do siebie i zwróć je (return).

ZADANIE 2

Tutaj nie podam Ci dokładnej instrukcji a tylko wskazówki:

  • na początku przypisz zmiennej `-1`, jeśli nie znajdziesz książki spełniającej wytyczne to nie zostanie nadpisana więc funkcja zwróci `-1`
  • pierw sprawdzaj czy książka jest wydana pzed 1976
  • jeśli tak to dopiero wtedy porównaj z ceną aktualnie wybranej
  • możesz albo posiadać dwie zmienne - jedna z numerem indeksu, druga z ceną lub napisać wyjątek dla porównywania ceny jeśli zmienna wynosi `-1` - wtedy porównywanie ceny jest niemozliwe, przypisz tylko indeks.

 

W razie pytań śmiało pisz. Jak sobie nie poradzisz z podanymi przeze mnie radami to wtedy pokażę Ci kawałki kodu, które działają podobnie do tych, które Ty musisz otrzymać ;)

komentarz 6 stycznia 2018 przez alekolorowomi Nowicjusz (120 p.)
Dodałem pod wątkiem jeszcze jeden kod robiony w Visual Studio, możesz sprawdzić? Pozdrawiam
komentarz 6 stycznia 2018 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
Teraz jest chyba dobrze, ale tylko rzuciłem okiem. Ogólnie totalnie inaczej bym to napisał. Oba sprawdzał w jednej funkcji. Masz zwracać sumę ich, a nie oddzielnie tware i oddzielnie miękkie. Więc powienieneś jeszcze zrobić funkcję "suma", w której wywołujesz jedną i drugą i dodajesz to co zwróciły.

Podobne pytania

0 głosów
1 odpowiedź 197 wizyt
pytanie zadane 30 sierpnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
2 odpowiedzi 256 wizyt
pytanie zadane 8 czerwca 2023 w C i C++ przez whiteman808 Obywatel (1,780 p.)
0 głosów
1 odpowiedź 420 wizyt
pytanie zadane 24 stycznia 2023 w C i C++ przez k0n6710r Nowicjusz (160 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...