Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Ćwiczenie 2. Definicja prostej klasy. Obserwacja konstruktorów i destruktorów .
Celem ćwiczenia jest poznanie zasad formatowania obiektowego wejścia i wyjścia.
Zadania laboratoryjne (czas realizacji: 1 tydzień)
1.1. Napisz i uruchom program, który wczyta*1 kilka liczb rzeczywistych do tablicy TAB[Max] (Max=1000), następnie wyprowadzi te liczby w wyrównanej kolumnie. W programie kontroluj, aby zadany rozmiar tablicy nie przekroczył maksymalnego.

*1 - 1 Do wczytywania liczb należy używać obiektowych operatorów wejścia. Dodatkowo mile widziane będzie wczytywanie danych z pliku (strumienie plikowe).

Potem jest jeszcze 6 podpunktów, ale bazują one raczej na tym, nie jestem pewien jak to mam zrobić, nie łapię tego polecenia, moglibyście napisać (nie kod) co tu należy zrobić, jak to zrealizować?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Ach, ta terminologia.

Obiektowe operatory wejścia i wyjścia to po prostu << i >> .
Czyli jak masz tablicę a[2] to tym co masz zrobić...jest najzwyklejsze w świecie cin >> a[0]; no i cout << a[0];

Innymi słowy, cały skomplikowany kod tego dzieła oprze się się na dwóch for (int a=0; a<=max; a++).
W jednej wczytujesz sobie liczby, w drugiej z kolei po prostu je wyświetlasz w ładnej wyrównanej kolumnie (podpowiem - cout.width() jest w tym przydatne, nie baw się w dodawanie spacji ręcznie czy inne bzdury).

Choć dla pewności, możesz podać jeszcze z 1-2 podpunkty? Bo znając wykładowców to oni czasem piszą jedno a mają na myśli co innego (a przynajmniej mój tak ma) ^_^

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 16.02.2012 o 12:16, ziptofaf napisał:

/.../


Dzięki za wyjaśnienie, te ,,operatory wejścia" mnie zmyliły (choć już znałem to określenie, wyleciało). Reszta polega raczej na poszerzaniu 1 podpunktu, ale może też wrzucę.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 16.02.2012 o 12:16, ziptofaf napisał:

/.../


Napisałem ten programik, ale problem mam z wypisaniem liczb w równej kolumnie. Pomysłu brak, help pls?:)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.02.2012 o 13:56, tomoliop napisał:

Napisałem ten programik, ale problem mam z wypisaniem liczb w równej kolumnie. Pomysłu
brak, help pls?:)


A napisałem ci przecież
"cout.width() jest w tym przydatne" ^^

Przeanalizuj poniższy, paskudny kod:
#include <iostream>
#include <cstdlib>
#include <cmath>

int ilosc_cyfr(int n){
return log10(n) + 1;
}
using namespace std;

int main(){
int zmienna=908;
int a=30;
cout.width(ilosc_cyfr(zmienna));
cout << zmienna << endl;
cout.width(ilosc_cyfr(zmienna));
cout << a;
return 0;
}

Innymi słowy, znajdź sobie największą ilość cyfr w liczbie wczytanej do programu (po prostu porównuj wielkość każdej wczytanej) i wykorzystaj to jako bazę dla cout.width().

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.02.2012 o 14:13, ziptofaf napisał:

> /.../


Okej, chyba wiem o co chodzi, nie miałem pomysłu jak zastosować cout.width() po prostu:).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wybaczcie ciągły spam:).
cout<<"TAB["<<i<<"]= "<<fixed<<hex<<TAB<<endl;
Nie wyświetla w szesnastkowym, bez ,,fixed" wyświetla mi w notacji scientific, której używam parę linijek wcześniej. Muszę jakoś zresetować flagi?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Co jest źle?

#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <math.h>


using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
double x,f;
cout <<"Podaj x="; cin>>x;
If(x<=-5,0)
f=2.0*x+5.0;
Else if ((-5.0<x)&&(x<=1.0))
f=x*x+sin(x);
Else (x>1.0)
f=8.0*exp(x+3.0);
cout<<f;

return 0;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Pierwsze, co to jest i po co #include "stdafx.h"
Czemu ten main wygląda tak dziwnie? Nie wystarczy dać po prostu "int main()"
Po trzecie funkcje muszą być pisane małymi literami, czy "if" zamiast "If", "else" zamiast "Else"
Po czwarte w "Else (x>1.0)" ten nawias jest nie potrzebny. Wystarczy samo "else".

No i żeby było widzieć wynik to na koncu napisać getchar();

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 22.02.2012 o 16:10, Mysterum napisał:

...


W takim zapisie else w ogole nie jest ci potrzebne.
Mozesz to zapisac tak:

if (x<=-5) {}
if (((-5<x)&&(x<=1)) {}
if (x>1) {}

a z else tak:

if (x<=-5) {}
else
{
if (x<=1) {}
if (x>1) {}
}

Generalnie to z include zostaw iostream i math, a main zadeklaruj po prostu jako:

int main()

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 22.02.2012 o 17:08, Piotrbov napisał:

Pierwsze, co to jest i po co #include "stdafx.h"

Podane przez prowadzącego, ma być zawarte w programie.

Dnia 22.02.2012 o 17:08, Piotrbov napisał:

Czemu ten main wygląda tak dziwnie? Nie wystarczy dać po prostu "int main()"

jak wyżej

Dnia 22.02.2012 o 17:08, Piotrbov napisał:

Po trzecie funkcje muszą być pisane małymi literami, czy "if" zamiast "If", "else" zamiast
"Else"

ok, to wiem.

Dnia 22.02.2012 o 17:08, Piotrbov napisał:

Po czwarte w "Else (x>1.0)" ten nawias jest nie potrzebny. Wystarczy samo "else".

też ma być zawarte w programie.

Dnia 22.02.2012 o 17:08, Piotrbov napisał:

No i żeby było widzieć wynik to na koncu napisać getchar();

ok, wiem.

W zasadzie ja ten program tylko przepisuję z wykładu, nie mam nic od siebie, wszytko jest zrobione jak kazał prowadzący. A Visual Studio pokazuje błędy: wcześniej uparł się na "missing '';'' before f". Teraz program kompiluje się poprawnie, jednak VS pokazuje błąd: Run-Time Check Failure #3 - The variable ''f'' is being used without being initialized.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 22.02.2012 o 17:26, Mysterum napisał:

Teraz program kompiluje się poprawnie, jednak VS pokazuje
błąd: Run-Time Check Failure #3 - The variable ''f'' is being used without being initialized.


Zadeklaruj f jako np:

double f=0;

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 22.02.2012 o 17:26, Mysterum napisał:

W zasadzie ja ten program tylko przepisuję z wykładu, nie mam nic od siebie, wszytko
jest zrobione jak kazał prowadzący. A Visual Studio pokazuje błędy: wcześniej uparł się
na "missing '';'' before f". Teraz program kompiluje się poprawnie, jednak VS pokazuje
błąd: Run-Time Check Failure #3 - The variable ''f'' is being used without being initialized.


Trzeba było mówić, że w Visualu zrobione. Skompilowałem to w Visualu i jedyny błąd, który znalazłem to z tym ostatnim elsem, jesli naprawde musisz go mieć to po tym elsie napisz "if" i będzie po kłopocie. Ładnie się kompiluje i działa bez żadnych błędów.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Super, jak zrestartowałem Visuala to też zadziałalo. A możesz mi powiedzieć, jaki masz wynik, jeżeli za x podstawisz -1 ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 22.02.2012 o 17:44, Mysterum napisał:

Super, jak zrestartowałem Visuala to też zadziałalo. A możesz mi powiedzieć, jaki masz
wynik, jeżeli za x podstawisz -1 ?


Wychodzi 0.158529, czyli po prostu sinus z jedynki.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jak już tu jestem to opiszę swój problem. Przeciążyłem sobie operator >> tak aby wczytywał tylko dozwolone symbole. Wygląda to tak:

istream & operator >> (istream & StrmWej, symbol & WczytSym)
{
symbol TabSymboli[] = {a,b,c,d,e};
char ZnakSymbolu;

StrmWej >> ZnakSymbolu;
if (ZnakSymbolu < ''a'' || ''e'' < ZnakSymbolu) {
cerr << "Blad! Wprowadzono niedozwolony znak."
<< endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), ''\n'' );
//exit(1);
}
else
{
WczytSym = TabSymboli[ZnakSymbolu-''a''];
return StrmWej;
}
}

Problem jest natomiast taki. Chciałbym umieścić w środku zmienną, która będzie warunkiem w mainie. Czy ktoś zna jakiś prosty sposób aby to zrobić? Jakoś przez wskaźnik czy referencje?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wyjaśnij znaczenie pojęcia: „przestrzeń nazw” oraz podaj przykłady zastosowania.
Mam problem z ubraniem tego zwięźle w słowa.

Nie jestem też do końca pewien właściwej odpowiedzi na to:
Jaka jest zawartość pliku StdAfx.h? (takie coś się tworzy domyślnie w Visual Studio)
Zawiera najbardziej potrzebne w programie pliki nagłówkowe?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam wszystkich ;) Mam dwa problemy, strasznie lamerskie, ale cóż (C#):

a) przy obliczaniu y= -2 do potęgi -3/8 wyskakuje info, że y nie jest liczbą. Dlaczego? Zauważyłem, że przy każdej liczbie ujemnej, którą chcę podnieść do potęgi wyskakuje takie info, gdy tylko usunę minus z 2, wynik jest ok.

b)przy obliczaniu 1/tg(3/8) wychodzi mi zły wynik.Kombinowałem trochę, ale wychodzi mi 2 z hakiem, a powinno ~152,8. Mógłby mi ktoś napisać, jak to ma wyglądać?

Z góry dzięki ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 28.02.2012 o 18:21, Mikex napisał:

Witam wszystkich ;) Mam dwa problemy, strasznie lamerskie, ale cóż (C#):

a) przy obliczaniu y= -2 do potęgi -3/8 wyskakuje info, że y nie jest liczbą.
Dlaczego? Zauważyłem, że przy każdej liczbie ujemnej, którą chcę podnieść do potęgi wyskakuje
takie info, gdy tylko usunę minus z 2, wynik jest ok.

b)przy obliczaniu 1/tg(3/8) wychodzi mi zły wynik.Kombinowałem trochę, ale wychodzi mi
2 z hakiem, a powinno ~152,8. Mógłby mi ktoś napisać, jak to ma wyglądać?

Z góry dzięki ;)


Podaj jakich funkcji używasz do tego celu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 28.02.2012 o 18:21, Mikex napisał:

Witam wszystkich ;) Mam dwa problemy, strasznie lamerskie, ale cóż (C#):

a) przy obliczaniu y= -2 do potęgi -3/8 wyskakuje info, że y nie jest liczbą.
Dlaczego? Zauważyłem, że przy każdej liczbie ujemnej, którą chcę podnieść do potęgi wyskakuje
takie info, gdy tylko usunę minus z 2, wynik jest ok.

(-2) ^ (-3/8) = (-1/2) ^ (3/8) = (-1/8)^(1/8)
Czyli szukamy pierwiastka ósmego stopnia z liczby ujemnej. Wynikiem jest liczba urojona (0.77i). Prawdopodobnie używałeś funkcji działającej tylko dla liczb rzeczywistych.

Dnia 28.02.2012 o 18:21, Mikex napisał:

b)przy obliczaniu 1/tg(3/8) wychodzi mi zły wynik.Kombinowałem trochę, ale wychodzi mi
2 z hakiem, a powinno ~152,8. Mógłby mi ktoś napisać, jak to ma wyglądać?

Mi wychodzi 2.54. Zapewne nie zwróciłeś uwagi, że musisz podać argument w radianach, a nie w stopniach.

Dnia 28.02.2012 o 18:21, Mikex napisał:

Z góry dzięki ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować