aa
Hugo: Przesyłanie z tablicy do tablicy i wypisywanie w odwrotnej kolejności stringów
http://pastebin.com/r3MeVt00
dlaczego to nie działa ? Program się kompiluje.. czy inaczej sie przesyła z tablicy do tablicy?
22 lut 02:40
jakubs:
po 1 błąd w pętli for(int i=0; i<=dl−1;i++)
po 2 ja bym zarezerwował miejsce dla tego stringa(zmieniłem Twój kod):
string imie;
cout<<"podaj imie: ";
cin>>imie;
int dl = imie.length();
string wyraz(dl,' ');
int j = dl−1;
22 lut 03:01
Daansa: w c++ nie trzeba deklarowac tablic?
22 lut 03:05
Hugo: czy i<=dl−1 == i<dl?
bo od zera sie numeruje
a l a
0 1 2
dlugosc = 3
i=0 ; i<dl−1 //czyli dwóch
0 ... 1 ... dwójki nie dam.. masz racje dzięki
///////////////////////////////////////////////////////
string wyraz w takich nawiasach otwatych
? i nie rozumiem składni prosze o komentarz
Daansa: nie wiem
22 lut 03:08
jakubs: Trzeba
22 lut 03:09
Draghan: Typ string to jest typ tablicowy o automatycznym rozmiarze.
Służy do przechowywania ciągów
znaków.
22 lut 03:09
22 lut 03:12
Draghan: Hugo:
string wyraz(dl,' '); //to jedna z postaci konstruktora klasy string
Działa w taki sposób, że dostaje jako argument pierwszy rozmiar, a jako drugi − znak. I
wypełnia string podaną ilością podanego znaku.
22 lut 03:13
jakubs: Po prostu string wyraz o długości imie i wypełniony spacjami.
22 lut 03:14
Saris: przejrzyj dokumentacje biblioteki string.
22 lut 03:15
22 lut 03:15
22 lut 03:15
jakubs: W sumie racja
22 lut 03:17
Hugo: Draghan: skompilowałem i
1) tam dalej było dl −1 w for() wiec ucielo jedną litere i przepisało to samo bez odwrócenia
ale no ciekawe ze dopisujesz string do stringa
a = a+b
22 lut 03:19
Hugo: to akurat umiem i fajne do przemyslenia dalej
22 lut 03:19
Hugo: Ide spać, dziękuje za pomoc : ) mam 4 dni na ogarniecie przed egzaminem
22 lut 03:20
22 lut 03:20
Draghan: Chociaż z tą stratą nie jest do końca takie pewne. Możliwe, że rezerwacja odpowiedniej ilości
pamięci w konstruktorze przebiega szybciej, niż pojedyncze dodawanie elementów.
String rezerwuje pewną ilość miejsca na początku, a jak nie ma już miejsca, to robi realokację.
I tutaj kwestia tego, ile razy podczas przepisywania zrobi ponowną rezerwację miejsca. Także i
moje rozwiązanie nie jest idealne.
Poza tym −
Hugo: poszukaj funkcji o nazwie reverse.
Nie pamiętam, czy była ona metodą std::string, czy trzeba było działać na iteratorach... Wiem,
że na std::vector działała na bank.
A co do inszych zmian, to sorry − nawet nie przeglądałem Twojego kodu pod kątem błędów.
22 lut 03:23
Saris: to j−− tez mozna usunac a zeby to dzialalo musisz odwrocic petle bo wypisze to samo. chyba.
nie spawdzalem
22 lut 03:24
Saris: zmien < na <= i powinno dzialac
22 lut 03:26
22 lut 11:40
22 lut 11:42
22 lut 15:55
22 lut 16:02
Dziadek Mróz:
Tylko Hugo pewnie chciał przepisywanie do innego stringa odwrotność pierwszego, co też można w
jednej linii umieścić, ale jak Hugo nie rozumie to robię łopatologicznie.
22 lut 16:32
Dziadek Mróz:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string imie;
cout << "Podaj imie: "; cin >> imie;
string wyraz = string(imie.rbegin(), imie.rend());
cout << imie << " " << wyraz << endl;
return 0;
}
22 lut 16:53
Hugo: Witajcie, jestem, dziękuję za nowe posty, juz czytam
22 lut 16:54
Hugo: Czytam wasze odpowiedzi i coś zaczeło wchodzić i tu próbując coś natknąłem siena problem
http://pastebin.com/anzAKPfb
próbuje przepleść przez siebie dwa stringi "aaaaaaa" i "drzewko" w sumie ma dawać to
adarazaeawakao
metoda jest taka:
for(int i= 0;i<dl;i++)
{
tab[i] += wyraz[i];
tab[i] += wyr[i];
}
cout<<"wyraz z −a: "<<endl;
cout<<tab<<endl<<endl;
22 lut 18:46
Hugo: @Dziadek Mróz @Trivial : Boje sie używać waszych składowych; wygladają skomplikowanie to
poczytam coś o nich bo takich się nie uczyłem .. Bardzo prosił bym o prostotę nie jestem za
dobrym programistą
22 lut 18:50
22 lut 18:57
Hugo: Idę po kawę , kminię że bez "składowych" nie powalczę to nadrobię to
22 lut 18:58
Trivial: Składowych?
22 lut 18:59
Draghan: Na bank chodziło o metody. A z tego, co lukam na Twój program, to akurat konstruktor.
22 lut 20:29
Dziadek Mróz:
A dlaczego nie używacie iteratora?
22 lut 20:49
Trivial: Dziadku, a po co?
22 lut 21:06
Hugo: Można Trywialnie a można po metodą z Dziada Pradziada
Wyjaśnilibyście mi poszczególne frazy w kodzie?
1)
http://pastebin.com/6SZqg4iY
a) int ilewyrazow(char* t); − ja działam tylko w C++ więc chary znam tylko z opowieści
tworzymy inta który jest tablicą czarów? czyli tak jak by:
string ilewyrazow
b) char* usunspacje(char t[]);
tworzymy czara , czy to jest wskaźnik
w środku widze []
c) gets(t); co to ? podobnie usunspacje(t);
22 lut 21:14
Trivial:
Ja się poddaję. Hugo, Ty nic nie umiesz.
Weźże poczytaj coś o funkcjach przed próbą pisania
czegokolwiek.
22 lut 21:21
Hugo: Mam pomysł; przelece dziś/jutro to wsztstko:
http://scr.hu/2pdc/djwme
poniedzialek, wtorek, środe mnie nie ma, czwartek, pt−egzamin
a później już tylko zadania z poprzednich lat i ewentualna wiedza do zadań
22 lut 21:27
Draghan: int ilewyrazow(char* t);
Funkcja o nazwie "ilewyrazow", zwracająca wartość int, pobierająca argument char.
Char jest bardzo ważnym typem w C++
To, że się odeszło od tablic znaków (nie wszędzie!), nie
znaczy, że char przestał się liczyć.
char* usunspacje(char t[]);
Funkcja o nazwie "usunspacje". Zwraca wskaźnik na char (czyli np. może pokazywać na tablicę
znaków). Jako argument do funkcji leci tablica (stricte − zamaskowane char *).
W c) masz dwie funkcje.
22 lut 21:28
Hugo: Dziękuję za pomoc nawet jeżeli to jest wasza praca zarobkowa(ja tam nie wiem) to miło że macie
cierpliwosć. Poszedłem na informatyke bo to moja pasja. Z matematyki mam etrapeza i fajnie
pozdawałem ale tu hmm... Nie chce mieć z tego warunki −,− cała reszta jest zdana.
22 lut 21:29
22 lut 21:30
Dziadek Mróz:
Zrób zadania z Wprowadzenie do Programowania (Z2 − Z7)
22 lut 21:32
Draghan: Musisz podstawy ogarnąć, tak jak mówi
Trivial, bo widzę że słabo się w tym rozeznajesz.
Bez solidnych fundamentów nie zbudujesz wieżowca.
Możesz przerobić tamten kurs. Możesz robić zadania, jak mówi
Dziadek Mróz. Chociaż wg
mnie, robienie zadań bez przygotowania teoretycznego nic Ci nie da − skutki będą takie, jak
dotychczas, czyli coś tam będziesz pisał, ale sam nie będziesz wiedział za bardzo, co.
A patrzyłeś na Megatutorial od Xiona, który Ci kiedyś podrzuciłem
22 lut 21:33
Hugo: Jeżeli cos podrzucaleś to napewno patrzyłem
@Dziadek Mróz: Zrobie je teraz jeżeli podołam : )
22 lut 21:41
Dziadek Mróz:
To rób i wysyłaj kody na pastebin, chcemy widzieć postępy. Komentuj każdą linijkę i traktuj nas
jak ignorantó2 programistycznych
My nic nie umiemy a mamy rozumieć co piszesz
22 lut 22:16
22 lut 23:32
Hugo: można tylko działac tu na intach? przy double wychodzą głupoty ;−;
22 lut 23:32
Dziadek Mróz:
Ale F będzie double/float. To teraz teoria o rzutowaniu Hugo i do poprawy.
22 lut 23:36
Dziadek Mróz:
I nie wal takich luk w kodzie bo głupio wygląda, jedna luka wystarczy.
22 lut 23:37
22 lut 23:40
Dziadek Mróz:
Zmienne maja mieć taki typ jak w zadaniu. Żadnego ale.
22 lut 23:44
Draghan: Tak dobrze, twardo Go trzymaj,
Dziaku.
22 lut 23:48
Hugo: surowy nauczyciel to dobry nauczyciel
22 lut 23:55
Hugo: miałem wrażenie ze tylko a i b są w double
22 lut 23:56
Hugo: lece kolejne
22 lut 23:57
23 lut 00:05
Draghan: Surowość to dobre dla surówki.
Nauczyciel powinien być wymagający i znający możliwości
ucznia.
23 lut 00:06
Draghan: Hugo
Ile elementów ma Twoja tablica
23 lut 00:06
Draghan: I od jakiego indeksu rozpoczynamy indeksowanie (
) tablicy?
23 lut 00:08
23 lut 00:13
Hugo: 3 elementy? 0,1,2
23 lut 00:13
Hugo: Draghan czyżbyś sie pomylił i w kolejnym poście chciał wybrnąć z tego
W amerykańskim systemie liczy sie od zera natomiast Europejskim* od 1 : )
23 lut 00:14
Draghan: Dobrze, 3 elementy.
Indeksuje się od zera, też ok.
A dlaczego przy deklaracji tablicy
miałeś
double tab [
2 ];
?
23 lut 00:16
Dziadek Mróz:
Hugo można dać
if ()
{
...
}
else if ()
{
...
}
else
{
...
}
I wtedy widać że jest jedna ciągłość warunków.
23 lut 00:17
Draghan: Pomylić to się pomyliłem, bo nie spojrzałem co program konkretnie robi pod linią:
max = tab[1];
Jak zobaczyłem indeksowanie od 1, to zapaliła mi się czerwona lampka (niesłusznie).
Ale jak deklarujesz tablicę, to podajesz ilość elementów. Ty podałeś 2, a odwoływałeś się do 3.
Naruszenie pamięci. Grozi crashem.
23 lut 00:18
Dziadek Mróz:
Hugo w 2 daj trzy zmienne x, y i z i porównaj, bo na tablicy to już wiemy jak.
23 lut 00:19
Dziadek Mróz:
Co do 3, w cmath jest MPI lub MATHPI nie pamiętam już.
23 lut 00:20
Dziadek Mróz:
M_ PI lub MATH_ PI
23 lut 00:21
Draghan: Hugo, możesz mi wyjaśnić, o co chodzi z "W amerykańskim systemie liczy sie od zera natomiast
Europejskim* od 1 : )", bo nie łapię?
23 lut 00:25
Dziadek Mróz:
Byda w południe. Idę spać bo do roboty trzeba rano wstać.
23 lut 00:25
Hugo: z4.
http://pastebin.com/Rv7y098Y
co się nauczyłem:
+ funkcja log(double) to ln
ku zaskoczeniu matematycznemu
myślalem cos o switchu w 3 i 4 zad ale pozostałem przy ifach
23 lut 00:29
Hugo: Chodzi o indexy w zmiennych, w amerykańskich masz od zera tak jak by piszemy
tab[0] .. tab[1] ... a w europejskich jest od tab[1] .. może to bardziej się odnosi do
stringów
... oglądałem na youtube Mirosława Zalete* i on coś tam mówił
@Dzięki Dziadek Mróz : ))
Co do tej tablicy
ilosc znaków no w sumie racja
tab[0] ... zero elementowa tablice
23 lut 00:33
Saris: if(a<0) ⇔ else
23 lut 00:33
Draghan: Hugo, w C++ nie waż się działać na tablicy o rozmiarze size w sposób tab[1]..tab[size]!
MUSI być tab[0]..tab[size−1].
23 lut 00:40
Hugo: @Saris ale na dwóch ifach też sie da
coś robiłem nie dawno z elsami i mi psuło program xd
23 lut 00:45
Hugo: A o co chodziło Dziadkowi z MATH __ PI? można osobno zdeklarować
23 lut 00:47
Saris: da się, ale jeszcze raz sprawdzasz warunek, więc działa to wolniej niż z elsem. Tutaj to bez
różnicy, ale lepiej się uczyć od razu pisać oszczędnie.
23 lut 00:48
Hugo: Do której siedzicie? bo mysle iść spać i pisać jutro
23 lut 00:52
Hugo: Fajny pomysł z tymi zadaniami, troche ich jest
23 lut 00:52
Draghan: Skoro psuło program, to znaczy, że coś skiełbasiłeś.
Ja pewno zaraz lecę. Dziadek sugerował, żebyś nie deklarował "stałej" PI, bo w bibliotece
matematycznej już masz ją zadeklarowaną.
Tylko nie pamiętał, pod jaką nazwą. Ja też nie
pamiętam.
23 lut 01:01
Hugo: działało
23 lut 01:06
Hugo: program działał, była nowa zmienna zdeklarowana : > po prostu , może i wiecej kodu ale
poprawnie
no ja ruszam z kolejnym
23 lut 01:07
TOSIA: dobra ide już spać dobranoc chlopcy
23 lut 01:08
Hugo: nie doszliśmy przecież ...... do sedna
Milej nocki
23 lut 01:14
Draghan:
23 lut 01:22
Hugo: zad 5.
http://pastebin.com/6ejWftMY
i natknałem na problem
prosze o wyjaśnienie
double c;
c = 5/9;
I zwraca mi c = 0
a nie powinno dopiero jak wrzucam coś pomiędzy:
c = 5 * (b−32) / 9 wtedy wychodzi poprawna liczba po przecinku, dlaczego?
23 lut 01:44
Draghan: Wpisz 5.0/9 i powinno śmigać.
Dzieje się tak dlatego, że operator dzielenia widzi dwie liczby całkowite (5 i 9), w związku z
czym wykonuje dzielenie całkowite. Musisz podpowiedzieć kompilatorowi, że chcesz dzielenie
zmiennoprzecinkowe, np. przez zapisanie 5.0 zamiast 5.
Wiem, trochę to nieintuicyjne, ale nie poradzisz.
23 lut 01:49
Hugo: oks tak miałem w asemblerze gdzie dla floata musial byc przecinek
23 lut 02:17
Hugo: Robie kolejne i mam problem
23 lut 02:17
Draghan: Jaki?
23 lut 02:19
Draghan: Pisaj, bo idę spać zaraz.
23 lut 02:20
Hugo: ale cos znalazłem hmm nie wiem czy jest sens wklejać chyba po prostu jestem zmeczony
23 lut 02:22
Draghan: No to obaj lecimy spać. Bynajmniej nie razem. XD Dobranoc.
23 lut 02:23
Hugo: bo mam zamiane z 16−> 10 i tak próbowałem :
int a;
int wynik=0,c,x,b,h;
cout<<"jak przeliczac? 1− 10−>16 .. 2 − 16−>10"<<endl;
cin>>a; //decyduje czy z 10−>16 czy z 16−>10
cin>>b; //liczba do konwersji
switch(a)
{
case 1:
while(b>16) // w sumie nie wiem do konca jak to dac : > ale chyba ok jest
{
c = b%16; //to modulo : ))
cout<<c; //wypisujemy kolejne reszty z dzielenia
x = b/16; // dziele liczbe przez 16
b = b − (x*b);
if(b<=16){ //tu mamy infa by koncowke wypisal i wyrzucil z petli
cout<<b; //wypisujemy reszte i krok nizej wychodzmy z petli
b=0;
}
}
ale to chyba inaczej cza by : >
23 lut 02:23
Hugo: chyba ze połapiesz?
moje bazgroły
23 lut 02:24
Draghan: Nie teraz, już mi powieki same opadają.
Jak jutro nikt nie podpowie, to spojrzę. Tymczasem
spadam. Narka.
23 lut 02:27
Hugo: to do jutra ( :
23 lut 02:34
Dziadek Mróz:
Hugo paczaj na schemat liczenia wartości DEC→HEX:
459 | 11 = B bo 459 % 16 = 11 ⇒ (459 − 11) / 16 =
28 | 12 = C bo 28 % 16 = 12 ⇒ (28 − 12) / 16 =
1 | 1 bo 1 % 16 = 1 ⇒ (1 − 1) / 16 =
0 | 0
45910 = 01CB16 = 1CB16
Czyli algorytm jest łatwy, tylko go przenieść na kod programu. To jest wersja tylko DEC→HEX lub
odwrotnie, więc wystarczy zdefiniować tablicę cyfr systemu 16 i podstawiać do wyniku wartość z
indeksu, którym jest reszta z dzielenia przez 16.
========================================================
string cyfry[] = {"0", "1", ... , "E", "F"};
unsigned int baza = 16;
unsigned int liczba;
string wynik = "";
cin >> liczba;
unsigned int modul;
while (liczba)
{
modul = liczba % baza;
wynik += cyfry[modul];
liczba = (liczba − modul) / baza;
}
cout << string(wynik.rbegin(), wynik.rend()) << endl;
========================================================
Nie kompilowałem wpisałem tak z buta.
23 lut 09:50
23 lut 16:44
Hugo: @Dziadek Mróz:
Te zadania są w miare latwe, wolałbym się skupić na tym co mi nie idzie by zyskać tam wiedze.
Zmienie rozdział z zadaniami o ile pozwolisz. W tym rozdziale mi szło dośc dobrze myśle
23 lut 16:46
Hugo: Boje sie się o to że mi nie starczy czasu, wciąż presja. Źle nie mieć podstaw ale mam nadzieje
że rozumiesz a egzamin już w PT (środy nie licze)
23 lut 16:46
Hugo: To brzmi kształcąco: Z3
5. Opracować program makrogenerator, który wczytuje źródłowy tekst wielowyrazowy, zakończony
tekstem "@" oraz ciąg par wyrazów do
usunięcia – do
wstawienia, również zakończony tekstem
"@". Następnie w tekście źródłowym każdy wyraz znajdujący się w zestawie do
usunięcia zostaje
zastąpiony odpowiadającym mu wyrazem z zestawu do
wstawienia.
Przykład.
Tekst źródłowy
Na Starym Rynku rozdaja samochody @
Pary wyrazów
rozdaja kradana
samochody rowery
@
Wynik
Na Starym Rynku kradna rowery
http://pastebin.com/up9tciSq
można prosić o jakąś wskazówkę
zadanie trudne, ale znam funkcje generalnie
23 lut 17:11
Dziadek Mróz:
Aaaa pamiętam ten program, pół dnia męczyłem na kartce algorytm
23 lut 17:23
Dziadek Mróz:
Nie dołączaj do pliku zbędnych bibliotek, ograniczysz zużycie pamięci.
23 lut 17:24
Hugo: mam pomysł
wiec pobieramy stringa wyraz a następnie dzielimy go na poszczególne wyrazy
używając funkcji find by znaleźć spacje, a później erase by skasować ów spacje i szukać
kolejnego
Ala ma kota duzego
tab[0] = Ala
tab[1] = ma
tab[2] = kota
tab[3] = duzego
Co do tych zamian to można sb ułatwić
i od razu do tabelki wpisywać. I później juz tylko
podmiana i wypis. Daj czas to napisze (spróbuje )
23 lut 17:40
23 lut 17:57
Dziadek Mróz:
Ja ten program chyba tylko w C robiłem
23 lut 17:59
23 lut 18:36
Hugo: ja używam getline(cin,string)
to chyba to samo
program mi sie kompiluje ale nie wychodzi, czy mógłbyś looknąć co mam źle
?
23 lut 18:38
23 lut 18:39
Dziadek Mróz:
Hugo przypomniałem sobie. Pobierasz zdanie i po każdym wprowadzeniu pary podmieniasz findem.
Nie trzeba nic tablicować, starczy główne zdanie jako wyraz i dwa człony, razem tylko 3
zmienne string.
23 lut 18:49
Hugo: ;−; nie rozumiem
miałem nową koncepcje z stringiem bez tablicy
Ala ma duzego kota.
find spacje
erase spacje
Ala −> nowy string
find spacje
erase spacje
ma −> nowy string...
jak chcesz zamieniać
? prosze naszkicuj mi to jakkolwiek
23 lut 18:57
23 lut 19:11
Hugo: Zrobilem sb szybką powtórkę z przesyłu
pole w mainie
pole przez referencje voida
pole przez referencje int i z returnem
http://pastebin.com/uds8eZSF
23 lut 19:30
Hugo: analizuje
!
23 lut 19:33
Hugo: erase ma dwa parametry
erase(od,do)
w twoim
zdanie.erase(zdanie.size() − 1);
i nie ma tam przecinka, czyli domyślna wartość brzmi: skasuj jedną pozycje w miejscu ...?
23 lut 19:54
Hugo: string do
usuniecia;
string do
wstawienia;
size__t pos;
co oznacza to size
t pos? czytałem że pierwsza pozycja
ale tak średnio kumam
pos − Position of the first character in the string to be considered in the search.
23 lut 20:10
Hugo: chyba ze to po prostu zmienna
?
23 lut 20:10
23 lut 20:20
Hugo: prześpie sie z tym na spokojnie ( :
..
..
wstyd mówić ale powtarzam sb teraz przesyłanie przez wskaźniki
następnie w swoim zakresie na szybko struktury które zawsze były piętą achillesową u mnie
I wrócił bym się do tego ostatniego egzaminu który mi komentowałeś i potem juz tylko na
egzaminach. Siedzisz dzis jak wczoraj do 0:00 + ? : ))
23 lut 21:06
Dziadek Mróz:
Jak się da to będę i do 00:00
23 lut 21:08
Hugo: Dziękuję za dziś, poszperam w swoich notatkach ( : Mam nadzieje ze do jutra
23 lut 23:33
Hugo: jedno pytanie
w returnie jak zwracam z jakieś dodatkowej funkcji to tam wartośc moze być
tylko typu int?
int funckja(int a)
{
...
int wartosc;
...
return wartosc;
}
23 lut 23:35
jakubs: Definiujesz funkcję, która będzie zwracać inta, to musisz zwrócić inta
23 lut 23:41
Hugo: aaa
23 lut 23:42
Hugo: dz
23 lut 23:43
24 lut 00:37
Draghan:
Hugo, wyjaśnij mi Ty jedną rzecz...
Dlaczego do argumentów funkcji posyłasz wskaźniki?
Przez to masz pełno brzydkich gwiazdek w kodzie. Czy to było częścią polecenia, czy sam tak
zrobiłeś?
Jeśli chodzi o względy wydajnościowe, to referencje zapewniają identyczną szybkość działania, a
pisze się dużo przyjemniej.
24 lut 07:49
Draghan: A funkcja void wynik( /* .. */ ) mogłaby zwracać ten wynik, jak bozia przykazała.
A nie
się wskaźnikami bawisz.
24 lut 07:52
Dziadek Mróz:
A no, za dużo wskaźników. Zresztą ten program można skrócić do samej funkcji main lub do jednej
dodatkowej funkcji zwracającej napis, jako argumenty wysyłamy wartość wylosowaną i wybraną.
24 lut 11:03
Trivial: Względy wydajnościowe... Tak, na pewno.
24 lut 19:33
Draghan: Ciiiiiiiiicho,
Trivial.
To tylko takie przypuszczenie było.
24 lut 20:41