Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

dawids24

Zadania z c++

Rekomendowane odpowiedzi

Witam

 

Czy ktoś mógłby mnie nakierować jak rozwiązać takie zadania c ++ ?

 

d173f24d8b020a9emed.jpg

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie, bo dodałeś to w takiej rozdzielczosci, że nie da się tego przeczytać. Poza tym czego konkretnie nie rozumiesz z czym masz konkretnie problem?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie nie wiem jak mam się za to zabrać , co na początku zrobić w przypadku zadań matematycznych.

 

34e813c765c59d07m.jpg

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ale przecież w tych zadaniach masz napisane jak je należy rozwiazać, przy pomocy czego, z czego skorzystać. Nie podchodź do nich jak do zadań matematycznych, tylko podejdź do nich od strony tego "jakie po kolei kroki nalezy wykonać zeby otrzymać wynik". Podejdź do tego tak: sadzasz kolegę przy sobie i pytasz się po kolei o te liczby (Dot 1. zadania), pomysl co robisz jak ktoś podaje Ci po kolei wymyslone przez niego liczby i co robisz zeby obliczyć potem wynik. To samo musisz przelać na kod zeby potem komputer te kroki wykonał.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ok, to już wiele daje, ale problem rodzi się z kodem, bo nie mam bladego pojęcia jak go zacząć ;/. Szukam w necie i walczę z tym, ale bez skutecznie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mam nadzieję, że nie chcesz być programistą.

1. Stwórz tablicę statyczną liczb rzeczywistych o rozmiarze n.

2. Wczytaj n liczb z konsoli i zapisz w tablicy.

3. Stwórz funkcję przyjmującą jako argument tablicę liczb rzeczywistych i inta będącego rozmiarem tej tablicy.

4. Zaimplementuj w tej funkcji wzór na średnią harmoniczną wykorzystując jako xi liczby z tablicy, jako n wielkość tej tablicy (jeśli nie wiesz jak, na pewno znajdzie się jakaś gotowa implementacja w necie, wystarczy lekko dostosować do swojego kodu).

5. Wywołaj funkcję dla Twojej tablicy i n.

6. Wypisz wynik.

Aha no i sprawdź gdzieś czy dane liczby spełniają warunki np, czy wszystkie liczby z tablicy są różne od zera (to możesz już sprawdzić przed zapisaniem do tablicy)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie martw się, nie chce być programistą :)

 

Próbuje ruszyć zadanie 4.

 

Kod wygląda tak :

 

#include "stdafx.h"

#include <conio.h>

#include <iostream>

using namespace std;

#include <time.h>

 

int dzieci[100];

int mlodziez[100];

int dorosli[100];

int wiek;

 

 

int _tmain(int argc, _TCHAR* argv[])

{

 

    for (int i = 0; i < 100; i++)

    {

        cout << "Podaj prosze swoj wiek ";

        cin >> wiek;

 

        if (wiek <= 12)

        {

            dzieci;

        }

        else if (wiek <= 13 <= 18)

        {

            mlodziez;

        }

        else if (wiek <= 19 <= 120)

        {

            dorosli;

        }

 

        }

 

    return 0;

}

 

I co dalej ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1. Nie używaj tablic, w 4 są zbędne, stwórz zmienne do zliczania liczby osób z danego przedziału wiekowego i zmienną do zliczania sumy lat + zmienna do wczytywania wieku.

2. Użyj nieskończonej pętli while lub do while np:

char cont='c';

while (cont=='c' || cont == 'C' )

{

//twoj kod

 

cout<<"\nJesli chcesz kontynuowac wpisz c lub C";

cin>>cont;

}

3. Uzyj ifów by sumować/inkrementować zmienną wtedy gdy trzeba.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Duży edit :)

 

int dzieci; // zmienna do zliczania osób z gruby dzieci

int mlodziez; // zmienna do zliczania osób z gruby mlodziezy

int dorosli; // zmienna do zliczania osób z gruby dorosli

int suma_lat; // suma lat wszystkich

int wiek; // zmiena któa prosi o wiek

int d;

int suma_lat_dzieci;

int suma_lat_mlodziez;

int suma_lat_dorosli;

 

 

 

 

 

int _tmain(int argc, _TCHAR* argv[])

{

 

    char cont = 'c';

    while (cont == 'c' || cont == 'C')

    {

        cout << "Podaj prosze swoj wiek ";

        cin >> wiek;

 

        if (wiek <= 12)

        {

            dzieci++;

        }

 

        else if (wiek <= 19)

        {

            mlodziez++;

 

        }

 

        else if (wiek <= 120)

 

        {

            dorosli++;

        }

 

 

 

      

 

        //if (19 <= wiek <= 120)

        //{

        //    dorosli++;

        //    suma_lat_dorosli = wiek + wiek;

        //}

 

       

           

 

        cout << "\nJesli chcesz kontynuowac wpisz c lub C ";

        cin >> cont;

    }

    cout << endl;

    cout << "Tyle wynosi wiek dzieci " << suma_lat_dzieci << endl;

    cout << "Tyle wynosi wiek mlodziezy " << suma_lat_mlodziez << endl;

    cout << "Tyle wynosi wiek doroslych " << suma_lat_dorosli << endl;

    cout << "Tyle jest osob w grupie dzieci " << dzieci << endl;

    cout << "Tyle jest osob w grupie mlodziezy " << mlodziez << endl;

    cout << "Tyle jest osob w grupie dorosli " << dorosli << endl;

 

    cin >> d;

    return 0;

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ogólnie nieźle, ale wkradło się parę błędów.

 

1. W else ifach musisz dodać warunki progowe, jeśli napiszesz else if (wiek<=19) to 11 latek też zostanie zaliczony do tego przedziału, czyli musisz zrobić coś takiego (if wiek>12 && wiek<=19

2. Pytanie teraz czy masz sumować liczbę lat osobno z każdej kategorii czy wszystkie razem, wczoraj nie bardzo wczytywałem się w zadanie, teraz widzę, że w treści chodzi chyba o to, by sumować oddzielnie czyli, zamiast jednej zmiennej do sumowania musisz mieć po jednej dla każdego przedziału tak jak to zrobiłeś i powinno wyglądać to tak

if (...)

{

zmiennaOdLiczbyOsob++;

sumaZDanegoPrzedzialu+=wiek;//dodajesz do obecnej wartości sumy wartość wieku i nadpisujesz sumę.

3. Musisz wczesniej (np zaraz przy tworzeniu) nadać wartość zmiennym = 0, w innym przypadku te zmienne będę miały jakieś wartości wzięte z kosmosu.

 

I ogólnie chyba nieźle :)

 

Kurde no nie doczytałem, końcówki treści zadania, że program ma być oparty o tablice statyczne, co w sumie, jest w tym przypadku bez sensu. Tzn, nie widzę sensu zapisywania wieku do tablicy, skoro nie będziemy się odwoływać do każdej z wartości z osobna, wystarczą sumy. Nie widzę sensu w tym założeniu tzn. polecenie utworzenia pętli nieskończonej kłóci się z ograniczeniem do 100 osób i tablicą statyczną. Hmm... poczekaj chwilkę, zaraz coś naskrobę...

 

#include <iostream>

 

 

using namespace std;

 

double srednia (int * tab, int size)

{

double suma = 0;

for (int i=0; i<size; i++)

{

suma+=tab;

}

return suma/size;

}

 

int main()

{

int dzieci [100];

int mlodziez [100];

int dorosli [100];

char cont = 'c';

int wiek;

int ileDzieci=0;

int ileMlodziez=0;

int ileDorosli=0;

while (cont == 'c' || cont == 'C')

{

cout<<"\nPodaj wiek: ";

cin>>wiek;

{

if (wiek<=12)

{

dzieci[ileDzieci]=wiek; //zapisuje wiek do tablicy

ileDzieci++; //przesuwam sie na wolne miejsce w tablicy, zliczam ile osob z danego przedzialu

}

if (wiek>12 && wiek<=19)

{

mlodziez[ileMlodziez]=wiek;

ileMlodziez++;

}

if (wiek>19 && wiek<=120)

{

dorosli[ileDorosli]=wiek;

ileDorosli++;

}

}

 

cout<<"\nWpisz c lub C jesli chcesz kontynuowac\n";

cin>>cont;

 

if (ileDorosli == 100 || ileMlodziez == 100 || ileDzieci == 100)

{

cout<<"\nTablica przepelniona";

cont = 'a';

}

 

}

cout<<"\nIlosc osob w przedziale 0-12 lat: "<<ileDzieci;

cout<<"\nSredni wiek w przedziale 0-12 lat: "<<srednia(dzieci, ileDzieci);

cout<<"\nIlosc osob w przedziale 13-19 lat: "<<ileMlodziez;

cout<<"\nSredni wiek w przedziale 13-19 lat: "<<srednia(mlodziez, ileMlodziez);

cout<<"\nIlosc osob w przedzilae 20-120 lat: "<<ileDorosli;

cout<<"\nSredni wiek w przedziale 20-120 lat: "<<srednia (dorosli, ileDorosli);

 

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

using namespace std;

 

double srednia(int * tab, int size)

{

double suma = 0;

for (int i = 0; i<size; i++)

{

suma += tab;

}

return suma / size;

}

 

Tej części kodu nie za bardzo rozumiem. Tworzymy zmienną typu double srednia ( i teraz a nawiasie zmienną typu int tab (tylko co w tym przypadku daje * ? oraz zmienną size. Potem następuje nawias klamrowy co już w ogóle jest dla mnie magią, po co on jest, nawiasów klamrowych użyłem tylko do if i pętli. Pętla ma się wykonać dopóki i jest mniejsze od size (a skąd program wie, ile razy ma się pętla wykonać, skoro size nigdzie nie podajemy ?). Suma += tab jest to zapis skrótowy operatora jakiegoś ? Return, czyli ma zostać zwrócona wartość suma/(podzielona) przez size ?

----------------------------------------------------------------------------------

Co do tej części kodu to lepiej już ją rozumiem.

 

Mamy 3 zmienne , które iledzieci, ilemlodziez, iledorosli, które mają zliczać ile wynosi suma wieku w danej kategorii wiekowej oraz 3 tablice dzieci, mlodziez, dorosli , których zapisywana jest ilość osób z danej kategorii wiekowej.

 

Teraz taka trochę zagadka dla mnie, ponieważ mamy zmienną wiek, komputer oczekuje wprowadzenia przez użytkownika wartości i gdy mu ją damy to w tym momencie w zmiennej wiek jest zapisana ta wartość i teraz konstrukcja pierwszego ifa .

 

Gdy wpiszemy wiek <= 12 lat to do tablicy dzieci, liczbą elementów jest [iledzieci] = wiek (no i tutaj nie mogę zrozumieć za bardzo jak to się dzieje, że wiek zapisany w zmiennej jest dodawany i potem znowu jesteśmy proszeni o podanie wieku i do zmiennej wiek jest dopisana nowa wartość i dodaje się ona do sumy lat. Nie mogę zrozumieć jak to działa, jak sam robiłem i wyświetlałem sumę wieku to nadpisywała się nowo wprowadzonym wiekiem.

 

int main()

{

int dzieci[100];

int mlodziez[100];

int dorosli[100];

char cont = 'c';

int wiek;

int ileDzieci = 0;

int ileMlodziez = 0;

int ileDorosli = 0;

while (cont == 'c' || cont == 'C')

{

cout << "\nPodaj wiek: ";

cin >> wiek;

{

if (wiek <= 12)

{

dzieci[ileDzieci] = wiek; //zapisuje wiek do tablicy

ileDzieci++; //przesuwam sie na wolne miejsce w tablicy, zliczam ile osob z danego przedzialu

}

if (wiek>12 && wiek <= 19)

{

mlodziez[ileMlodziez] = wiek;

ileMlodziez++;

}

if (wiek>19 && wiek <= 120)

{

dorosli[ileDorosli] = wiek;

ileDorosli++;

}

}

 

cout << "\nWpisz c lub C jesli chcesz kontynuowac\n";

cin >> cont;

 

if (ileDorosli == 100 || ileMlodziez == 100 || ileDzieci == 100)

{

cout << "\nTablica przepelniona";

cont = 'a';

}

 

}

cout << "\nIlosc osob w przedziale 0-12 lat: " << ileDzieci;

cout << "\nSredni wiek w przedziale 0-12 lat: " << srednia(dzieci, ileDzieci);

cout << "\nIlosc osob w przedziale 13-19 lat: " << ileMlodziez;

cout << "\nSredni wiek w przedziale 13-19 lat: " << srednia(mlodziez, ileMlodziez);

cout << "\nIlosc osob w przedzilae 20-120 lat: " << ileDorosli;

cout << "\nSredni wiek w przedziale 20-120 lat: " << srednia(dorosli, ileDorosli);

 

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ta komplikacja wynika z powodu konieczności zastosowania tablic (które w tym przypadku są bez sensu, ale nie mnie się kłócić z treścią zadania). Fragment

double srednia(int * tab, int size)

{

double suma = 0;

for (int i = 0; i<size; i++)

{

suma += tab;

}

return suma / size;

}

To jest funkcja typu double (wszak średni wiek nie musi być całkowity) o nazwie średnia, przyjmująca za argument tablicę intów (* oznacza wskaźnik, tablice do funkcji przekazuje się za pomocą wskaźnika, wskaźnik to taki "drogowskaz" gdzie fizycznie w pamięci znajduje się dany element). Użyłem funkcji bo nie warto pisać tego samego kodu dla trzech przypadków. Możesz przeczytać gdzieś o funkcjach, nie są trudne. W późniejszym kodzie przy wypisywaniu średniego wieku jak możesz zauważyć używałem tej funkcji dla odpowiednich kombinacji tablica + rozmiar. Jako rozmiar użyłem aktualnej liczby osób, a nie maksymalnego rozmiaru tablicy, mam nadzieję, że rozumiesz dla czego.

 

Funkcja srednia zna wartosc size bo przekazuje go jej gdy ją wywołuje, np srednia (dzieci, ileDzieci) jako tab przyjmie sobie tablicę dzieci, a za size przyjmie wartość jaką ma obecnie ileDzieci.

 

Operator += to taki "skrót" np a+=5 to to samo co a=a+5.

 

Return suma/size oznacza, że funkcja zwróci sumę wieku/ilość osób, czyli właśnie średnią.

 

Co do wieku, to w przypadku zmiennej wiek jest on nadpisywany przez cin. Tzn jeśli zrobisz cin>>wiek i podasz 5, a później kolejne cin>>wiek i podasz 20 to gdy spróbujesz odczytać wiek wyświetli Ci się 20.

Wiek z osobna dla każdego przypadku zapisuję w tablicy w miejscu w którym wskazuje zmienna ileDzieci itd. przy każdym zapisaniu jakiejś wartości do tablicy zwiększam tą zmienną o jeden, więc następnym razem wiek zapisze się w kolejnym (wolnym) miejscu w tablicy. Jak zapewne wiesz indeks tablicy zaczyna się od 0, więc wszystko jest ok. Np. podaje pierwszy wiek równy 5, zapisuje w tablicy pod 0 indeksem i zwiększam ilość dzieci o 1 (czyli ileDzieci=1), gdy następnym razem spróbuje zapisać do tablicy Dzieci jakiś wiek, zapisze go już pod indeksem 1, a po tej operacji ileDzieci zwiększe o 1, czyli przy kolejnym zapisie będę zapisywał pod indeksem 2.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zadanie 1.

1. Tworzysz, statycznie lub dynamicznie tablice n liczb. Wypełniasz tablice liczbami podanymi w zadaniu.

2. Tworzysz funkcje (lub też nie, choć byłoby wskazane) obliczającą średnią harmoniczną.

3. Prototyp funkcji:

Dodajesz do siebie wszystkie liczby odwrotne do tych z tablicy( w pętli) ex. suma+=1/tab. Tyle razy ile trzeba.

Mnożysz ilość liczb(n) razy odwrotność ułamka który Ci wyszedł w mianowniku, ex: n*suma^(-1). Dlaczego do potęgi (-1)? Definicja dzielenia ułamków.

Koniec zadania.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak się za to zabrać ?

 

 

Napisz program, w którym zostaną wykonane następujące zadania:

 wczytanie z klawiatury dwóch wartości całkowitoliczbowych do zmiennych n i m oznaczających odpowiednio liczbę wierszy i kolumn

pewnej tablicy dwuwymiarowej;

 przydzielenie dynamicznie pamięci dla tablicy dwuwymiarowej (macierzy) B o wartościach typu double;

 nadanie wartości w programie dla elementów macierzy B w taki sposób, że B (i, j) = sin(i + j);

 wczytanie z klawiatury liczby rzeczywistej z przedziału [-1,1] wykorzystywanej dalej w funkcji (nazwa zmiennej w programie: liczba);

 wywołanie funkcji obliczenia; funkcja zwraca wartość typu double; do funkcji przekazana jest macierz B (nazwa parametru w funkcji:

T), liczba wierszy macierzy B (parametr przekazany przez wartość, nazwa parametru w funkcji: row), liczba kolumn macierzy B (parametr przekazany przez wartość, nazwa parametru w funkcji: col), wczytana z klawiatury wartość zapamiętana w zmiennej liczba (parametr przekazany przez wartość, nazwa parametru w funkcji: value);

funkcja oblicza/wyznacza następujące wielkości: maksymalną wartość elementów w całej tablicy, wartość ta jest przekazana do programu przy wykorzystaniu instrukcji return (nazwa odpowiedniej zmiennej w programie: wartosc_max); liczbę elementów w całej macierzy o wartościach większych od wartości parametru value, wyznaczona liczba elementów jest przekazana do programu przez wskaźnik

(nazwa parametru w funkcji: pnumber, nazwa odpowiedniej zmiennej w programie: liczba_wiekszych); sumę wartości elementów leżą-

cych w wierszu o indeksie 2, suma ta jest przekazana do programu przez referencję (nazwa parametru w funkcji: sum, nazwa odpowiedniej zmiennej w programie: suma_wiersz);

 wypisanie wszystkich wyznaczonych/obliczonych wartości przekazanych z funkcji do programu;

 zwolnienie dynamicznie przydzielonej pamięci dla tablicy dwuwymiarowej B.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Przecież wszystko jest dokładnie opisane, czego z tego nie rozumiesz?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...