Programowanie c++
Olunia: Programowanie c++ . Napisac za pomocą tablicy program obliczający średnią arytmetyczną liczb
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
double suma = 0,
liczba;
unsigned int n;
cout<<"Z jakiej ilości liczb chcesz liczyć średnią arytmetyczną: ";
cin>>n;
cout<<endl;
if(n>0)
{
for(int i = 1;i<= n;i++)
{
cout<<"Podaj "<<i<<" liczbę: ";
cin>>liczba;
suma+=liczba;
}
cout<<"Średnia "<<n<<" liczb wynosi: "<<suma/n<<endl;
}
else
cout<<"Podałeś nieprawidłową wartość zmiennej n"<<endl;
system("pause");
return 0;
}
Mam coś takiego ale czy to jest poprawnie napisane z wykorzystaniem tablic w c++
31 maj 15:18
po prostu Michał:
1)nigdy nie czaje czemu w int main() masz jakies argumenty...
2)przeciez nie uzylas wgl tablic... to jak ma byc poprawnie z uzyciem tablic, skoro wgl
nie zostaly zuzyte.
31 maj 15:46
po prostu Michał: 3) spisywanie algorytmu prosto z neta nie sprawi, ze go nagle zrozumiesz
31 maj 15:47
po prostu Michał:
#include <iostream>
using namespace std;
int main()
{
double suma = 0; (wystarczy "int suma", bo chyba nie przekroczysz liczby miliard?)
unsigned int n; (moze byc po prostu "int n")
cout<<"Z jakiej ilości liczb chcesz liczyć średnią arytmetyczną: ";
cin>>n;
int *tablica = new int [n];
if(n>0)
{
for(int i = 0;i< n;i++)
{
cout<<"Podaj "<<i<<" liczbę: ";
cin>>tablica[i];
suma+=tab[i];
}
cout<<"Średnia "<<n<<" liczb wynosi: "<<suma/n<<endl;
}
else
cout<<"Podałeś nieprawidłową wartość zmiennej n"<<endl;
delete [] tablica;
system("pause");
return 0;
}
31 maj 15:53
po prostu Michał: Małe poprawki...
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
double suma = 0; //(wystarczy "int suma", bo chyba nie przekroczysz liczby miliard?)
unsigned int n; //(moze byc po prostu "int n")
cout<<"Z jakiej ilosci liczb chcesz liczyc srednia arytmetyczna: ";
cin>>n;
int *tablica = new int [n];
if(n>0)
{
for(int i = 0;i< n;i++)
{
cout<<"Podaj "<<i+1<<" liczbe: ";
cin>>tablica[i];
suma+=tablica[i];
}
cout<<"Srednia "<<n<<" liczb wynosi: "<<suma/n<<endl;
}
else
cout<<"Podales nieprawidlowa wartosc zmiennej n"<<endl;
delete [] tablica;
system("pause");
return 0;
}
31 maj 15:57
po prostu Michał:
Polecam sprawdzic, czy po usunieciu
#include <cstdlib>
oraz
system("pause")
algorytm nadal bedzie dzialac, w sensie na pewno bedzie,
ale to sie uzywa tylko po to, zeby sie okienko po zakonczeniu dzialania
programu nie zamykalo, jednakze w nowszych kompilatorach sie nie powinno
zamykac, dlatego sprawdz, czy bez tych dwoch bedzie dzialac.
31 maj 15:59
Olunia: Dzięki . Ja poprostu nie rozumiem tych wszystkich komend jak np. co znaczy
int*tab
tab[] lub tab[i]
31 maj 15:59
Olunia: Nie ma nigdzie informacji na ten temat , a ucząc się samemu to ciężko
31 maj 16:01
po prostu Michał:
int *tab = new int[n] <−−deklarujemy tablice dynamiczną (rozmiar podamy dopiero po wczytaniu
liczby "n"
czyli po komendzie cin>>n, dlatego w kodzie to wystepuje wlasnie po wczytywaniu tego "n")
dynamiczna rozni sie tym, ze statyczna musi od razu miec jakas liczbe np. int tab[10]
oznacza tablice ktora ma 10 elementow, dlatego dynamiczne lepsze, jednak uzywaja
wskaznikow −> to ta gwiazdka przy "tab"
Oczywiscie najwazniejsza rzecz dotyczaca tablic −> indeksowane sa od zera
a to oznacza, ze jak deklarujemy tablice 3 − elementowa (statycznie czy dynamiczne − bez
roznicy,
wezmy przyklad statyczny, to):
int tab[3]; <−−deklarujemy tablice 3 elementowa
to ona ma elemnty 0, 1, 2(w sensie tablica to takie pudeleczko z przegrodkami, ktorych adres
(indeks) to 0 ,1 ,2 dla tej akurat tablicy).
puszczamy petle for dlatego zeby wypelniac w tym pudeleczku kazda przegrodke.
np. wezmy taki program :
int tab[3];
for(int i=0; i<3;i++)
{
cin>>tab[i];
}
ten program wczytuje 3 liczby do tablicy (w rozne miejsca w tablicy)
bo najpierw mamy i=0, czyli tab[0] i tam zapisujemy jakas wartosc,
nastepnie po przejsciu wszystkich komend w petli (tutaj jest tylko ta jedna)
zmienna "i" sie zwieksza o jeden (bo i++ oznacza i = i+1)
zatem teraz i=1, i wczytujemy do tab[1] jakas wartosc
i na koniec i=2 , tab[2] = ...
i teraz " i " nam sie zwiekszy, ale warunek petli nie bedzie spelniony bo i < 3, a teraz
"i" wynosi 3, zatem 3 nie jest mneijsze od 3, dlatego petla sie zakonczy.
31 maj 16:06
31 maj 16:07
Dziadek Mróz:
main to funkcja główna przyjmująca 2 argumenty (argc − ilość argumentów, argv − tablica
argumentów, gdzie argv[0] to nazwa programu)
Nie stosujemy globalnie using namespace std, może to prowadzić do błędnego linkowania
podczas kompilacji.
Przykład:
biblioteka STL <list> z klasą std::list, w programie tworzymy własną klasę STL o nazwie list:
−−−−−−−−−−−−−−−−
template <class T>
class list {
...
};
−−−−−−−−−−−−−−−−
Przez omyłkę zrobiliśmy takie coś:
−−−−−−−−−−−−−−−−
#include <list>
...
using namespace std;
template <class T>
class list {
...
};
int main(int argc, char **argv) {
list<int> *list1 = new list<int>();
std::list<int> *list2 = new std::list<int>();
}
−−−−−−−−−−−−−−−−
list1 jest obiektem której klasy, std::list z <list> czy naszej klasy list?
31 maj 16:41
Dziadek Mróz:
Olunia jest na poziomie 0, więc wskaźniki jej nie dotyczą.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
#include <iostream>
int main(int argc, char **argv) {
int ile_liczb;
std::cout << "Podaj ile liczb chcesz wprowadzic: ";
std::cin >> ile_liczb;
int tablica
liczb[ile_liczb];
int srednia = 0;
for (size_t indeks = 0; indeks < ile_liczb; indeks++) {
srednia = srednia + tablica_liczb[indeks];
}
srednia = srednia/ile_liczb;
std::cout << "Srednia arytmetyczna podanych liczb wynosi: " << srednia << std::endl;
return 0;
}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
https://pastebin.com/g2PwJBbV
31 maj 16:48
Dziadek Mróz:
aj sorki, nie podaliśmy liczb
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
for (size_t indeks = 0; indeks < ile_liczb; indeks++) {
std::cout << "Podaj element " << indeks << ": ";
std::cin >> tablica_liczb[indeks];
srednia = srednia + tablica_liczb[indeks];
}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
https://pastebin.com/ratyJcTY
31 maj 16:52
po prostu Michał:
"Olunia jest na poziomie 0, więc wskaźniki jej nie dotyczą."
Mowisz zeby nie stosowac globalnie using namespace std, a kontrprzyklad podajesz jej jakies
biblioteki z kosmosu...to bez sensu. Skoro na wskaznikach sie nie zna to tym bardziej
using ... nie zaszkodzi
Ja przez cale liceum mialem stosowane globalnie using namespace std; i jakos nic sie nie
wydarzylo.
31 maj 16:57
Dziadek Mróz:
O using namespace std pisałem do Ciebie Michał
Ok, stosowałeś w liceum, a tak poza nim pisałeś komuś program na zlecenie, albo robiłeś korektę
czyjegoś kodu na zamówienie?
Pewnie nie, jak ugryziesz trochę praktyki to w końcu wpadniesz na ten problem i będziesz się
dziwił, czemu "u mnie nie działa"
31 maj 17:03
Olunia: To mi pomóżcie z jeszcze jednym ...
Program prosi użytkownika o podanie liczby losowań −n
31 maj 17:51
Olunia: #include<iostream>
#include<ctime>
using namespace std;
int rozm ;
void wypisz (int tablica[])
{
for(int i=0;i<rozm;i++)
cout<<tablica[i]<<endl;
}
int main ()
{
cout <<"Podaj liczby losowan n:"<<endl;
cin>>rozm;
int*tablica= new int [rozm];
return 0;
}
31 maj 17:52
Olunia: próbuje sama ale wychodzi jak widac ..
31 maj 17:52
Dziadek Mróz:
−−−−−−−−−−−−−−−−−−−−−−−−−−−
#include <iostream>
#include <cstdlib>
#include <ctime>
void losuj(int *tablica, int ile_losowan) {
srand(time(NULL));
for (size_t indeks, indeks < ile_losowan; indeks++) {
tablica[indeks] = rand() % 100;
}
}
void wypisz(int *tablica, int ile_liczb) {
for (size
t indeks, indeks < ile_liczb; indeks++) {
std::cout << " " << tablica[indeks];
}
}
int main(int argc, char **argv) {
int ile_losowan;
std::cout << "Podaj ile losowan chcesz przeprowadzic: ";
std::cin >> ile_losowan;
int *tablica = new int[ile_losowan];
losuj(tablica, ile_losowan);
wypisz(tablica, ile_losowan);
return 0;
}
−−−−−−−−−−−−−−−−−−−−−−−−−−−
https://pastebin.com/Y1fyF2KK
31 maj 18:08
po prostu Michał: Tak wlasciwie mam pytanie, dotychczas bylem pewien ze tablice dynamiczna mozna zrobic
tylko i wylacznie na wskaznikach, jednakze napisalem sobie prosty program
int main()
{
int n;
cout<<"Podaj rozmiar tablicy: ";
cin>>n;
int tab[n];
for(int i=0;i<n;i++) cout<<tab[i]<<" ";
}
i wychodzi na to ze tez dziala, wiec wlasciwie czemu tak sie nie implementuje tablicy
dynamicznej.
?
31 maj 19:59
31 maj 20:30