Skocz do zawartości

Programowanie


xemi

Rekomendowane odpowiedzi

Hejka ja dalej mecze się nad tym projektem... Wydaje mi się, że poczyniłem duże postępy ale mimo wszystko brakuje mi jeszcze jednej opcji ostatniej już, której bym potrzebował i jest to wykluczenie, jednego lub kilku odcinków z poprzednich tras podstawowych w celu wyznaczenia kolejnej trasy podstawowej. Poniżej zamieszczam kod (funkcja która powinna usuwać te połączenia zaznaczona na czerwono). I tutaj rodzi się moje pytanie/prośba czy wie ktoś lub ma chociaż pomysł na to jak tego dokonać ponieważ jak na razie ta funkcja nie działa :doh!:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#define INFINITY 4194304

using namespace std;
void printD(int n,long *d)
{
cout<<"Odleglosc:";
cout.width(10);
cout<<d[n];
cout<<endl;
}
/*
* Wyświetla najkrótszą trasę pomiedzy początkiem a końcem.
*
* dijkstra(int) musi być przynajmnije raz wywołana przed wyświetleniem
*/
void printPath(int dest,int *prev,long **dist) 
{
if(prev[dest]!=-1)
{
	dist[prev[dest]][dest]=0;
	printPath(prev[dest],prev,dist);
}
cout<<dest<<" ";
}
[color="red"]void wyklucz(int dest,int *prev,long **dist,int ile) 
{
ile=0;
if(prev[dest]!=-1)
{
		for(int j=0;j<dest;j++)
		{
			if(dist[prev[dest]][j]>0&&dist[prev[dest]][j]<INFINITY)
			{
				ile++;
			}
		}
	if(ile>2)
	{
		dist[prev[dest]][dest]=0;
		wyklucz(prev[dest],prev,dist,ile);
	}
	else
		wyklucz(prev[dest],prev,dist,ile);
}
}[/color]
void printBackup(int dest,int *prev) 
{
if(prev[dest]!=-1)
	printBackup(prev[dest],prev);
cout<<dest<<" ";
}
void get(int &u, int &v,int &w,int &e,long **dist,char *source)
{
ifstream plik;
plik.open(source,ifstream::in);
plik>>e;
for(int i=0;i<e;++i)
{
	plik>>u;
	plik>>v;
	plik>>w;
	dist[u][v]=w;
}
plik.close();
}
void dijkstra(int s,int n,int e,int *prev,long *d,long **dist,int al)
{
int mini;
int *visited;
visited=new int[al];
for (int i=1;i<=n;++i) 
{
	d[i]=INFINITY;
	prev[i]=-1; // droga do i jeszcze nie znaleziona 
	visited[i]=0; // i-ty element nie odwiedzony 
}
d[s]=0;
for(int k=1;k<=n;++k) 
{
	mini=-1;
	for(int i=1;i<=n;++i)
		if (!visited[i]&&((mini==-1)||(d[i]<d[mini])))
			mini=i;
	visited[mini]=1;
	for(int i=1;i<=n;++i)
	{
		if(dist[mini][i])
		{
			if(d[mini]+dist[mini][i]<d[i]) 
			{
				d[i]=d[mini]+dist[mini][i];
				prev[i]=mini;
			}
		}
	}
}
}
int MAX(int a,int b)
{
if(a>b)
	return a;
else
	return b;
}
int main(int argc, char *argv[]) 
{
int u=0,v=0,w=0; //u- wierzchołek początkowy v- końcowy w- waga
int e=0,n=0; //e- Ilość niezerowych krawędzi n- ilosc wierzchołków
int ile=0,al; //ile - przechowuje ilość krawędzi wierzchołka aby nie zrywać połączenia przy blokowaniu krawędzi al- wielkosc tablic
long **dist; // dist[i][j] odległość pomiędzy i,j jeżeli brak =0
long *d; // d[i] odległość pomiędzy początkiem, a wierzchołkiem i
int *prev; // prev[i] wiechołek poprzedzający i na wyszukanej trasie
int *temp; //zmienna zapasowa do wyznaczania trasy zaasowej
ifstream plik;
char source[1000];
cout<<"Podaj sciezke do pliku:\n";
cin>>source;
plik.open(source,ifstream::in);
if(plik.is_open())
{
	plik>>e;
	n=-1;
	for(int i=0;i<e;++i)
	{
		plik>>u>>v>>w;
		n=MAX(u,MAX(v,n));
	}
	plik.close();
	al=MAX(e,n);
	al++;
	d=new long[al];
	prev=new int[al];
	dist=new long*[al];
	for(int i=0;i<al;i++)
	{
		dist[i]=new long[al];
	}
	for(int i=0;i<al;++i)
	{
		for(int j=0;j<al;++j)
		{
			dist[i][j]=0;
		}
	}
	get(u,v,w,e,dist,source);
	dijkstra(1,n,e,prev,d,dist,al);
	temp=new int[al];
	for(int i=0;i<al;i++)
		temp[i]=prev[i];
	cout<<"Droga podstawowa: ";
	printPath(n,temp,dist);
	cout<<endl;
	printD(n,d);
	cout<<endl;
	dijkstra(1,n,e,temp,d,dist,al);
	cout<<"\nDroga zapasowa: ";
	printBackup(n,temp);
	cout<<endl;
	printD(n,d);
	get(u,v,w,e,dist,source);
	wyklucz(n,prev,dist,ile);
	cout<<endl;
	cout<<endl;
	dijkstra(1,n,e,prev,d,dist,al);
	for(int i=0;i<al;i++)
		temp[i]=prev[i];
	cout<<"Droga podstawowa: ";
	printPath(n,temp,dist);
	cout<<endl;
	printD(n,d);
	cout<<endl;
	dijkstra(1,n,e,temp,d,dist,al);
	cout<<"\nDroga zapasowa: ";
	printBackup(n,temp);
	cout<<endl;
	printD(n,d);
	get(u,v,w,e,dist,source);
	int x =0;
	wyklucz(n,prev,dist,ile);
	cout<<endl;
	cout<<endl;
	dijkstra(1,n,e,prev,d,dist,al);
	for(int i=0;i<al;i++)
		temp[i]=prev[i];
	cout<<"Droga podstawowa: ";
	printPath(n,temp,dist);
	cout<<endl;
	printD(n,d);
	cout<<endl;
	dijkstra(1,n,e,temp,d,dist,al);
	cout<<"\nDroga zapasowa: ";
	printBackup(n,temp);
	cout<<endl;
	printD(n,d);
}
else
{
	cout<<"Blad otwarcia pliku.\n";
}
cout<<endl;
system("PAUSE");
return 0;
}

Odnośnik do komentarza

Działał ktoś trochę na strukturach w C++? Mam taki mały problemik.

 

Tak mam zdefiniowane struktury:

struct kupon
{
   int liczby[6];
};

struct glowna
{
   char nazwisko[30];
   int zaklad[N];
   kupon a;
};

 

tak wygląda funkcja:

void wczytaj (glowna p[], int ile_zakladow, ofstream &plik)
{
 plik.open(nazwa.c_str(), ios_base::out);
 for (int i=0; i<ile_zakladow; i++)
 {	   
	cout<<"Wypelnij "<<i+1<<" zaklad, wpisujac kolejno nazwisko, a potem 6 liczb z zakresu <1,49>\n";
	cout<<"Podaj nazwisko"<<endl;
	cin.get();
	cin.getline(p[i].nazwisko, 30);
	plik <<p[i].nazwisko<<" ";
	for (int j=0; j<6; j++)
	{
		cout<<"Podaj "<<j+1<<" liczbe: __\b\b"; 
		cin>>p[i].a.liczby[j];
		if (p[i].a.liczby[j]<1 && p[i].a.liczby[j]>49) 
		{
		  cout<<"Przekroczono zakres. Dostepne liczby z zakresu <1,49>\n";
		  system("Pause");
		}
	}

	for (int k=0; k<6; k++)
	{
		plik<<p[i].a.liczby[k]<<" ";
	}

	plik<<endl;
 }
 plik.close();
}

 

Problem polega na tym, że ten if nie działa, kiedy wpiszę liczbę większą niż 49... pętla sobie leci w najlepsze, nie wyświetlając żadnego komunikatu.

Odnośnik do komentarza

if (p[i].a.liczby[j]<1 [color="#FF0000"][font="Arial Black"]||[/font][/color] p[i].a.liczby[j]>49)
{
             cout<<"Przekroczono zakres. Dostepne liczby z zakresu <1,49>\n";
             system("Pause");
}

 

Dałeś iloczyn zamiast sumy co powodowało, że zdarzenia wzajemnie się wykluczały ja tutaj bym się jeszcze pokusił o małą modernizacje i zamiast if dał:

 

do
{
           cout<<"Podaj "<<j+1<<" liczbe: __\b\b";
           cin>>p[i].a.liczby[j];
           if (p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49)
           {
                 cout<<"Przekroczono zakres. Dostepne liczby z zakresu <1,49>\nWpisz jeszcze raz\n";
           }
}while(p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49)

Co pozwoli na poprawienie ewentualnej pomyłki bez ponownego uruchamiania.

Odnośnik do komentarza

ech, racja :doh!:

 

Teraz mam kolejną zagwozdkę. Muszę zrobić symulator dużego lotka, całe polecenie wygląda tak:

Wariant B - Symulator dużego lotka

Wymagania:

1. Użytkownik może wprowadzić kupon do gry, z konsoli lub interfejsu użytkownika.

2. Kupon powinien posiadać następujące dane: właściel i N zakładów. Każdy zakład to 6 liczb podanych przez użytkownika od 1 do 49

3. Każdy kupon wprowadzony do gry powinnien być zapisany na dysku jako oddzielny plik (wczytywane po ponownych uruchomienu symulacji).

4. Na starcie symulacji wprowadzomy pulę nagród.

5. Po wprowadzeniu kuponów można uruchomić symulację, która przebiega następująco:

* komputer losuje 6 liczb z przedziału od 1 do 49

* symulator porównuje wylosowane liczby z kuponami (można porónywać czytając pliki na dysku)

* symulator wykrywaja określoną liczbę trafień 3, 4, 5 i 6

* wartość wygranych jest odpowiednio 5%, 10%, 15%, 20%, 100% puli nagród.

* po etapie jednego losowania od puli odejmujemy wartości wygranych, a do puli dodajemy wprowadzoną na starcie wartość puli nagród. Na koniec każdego etapu prezntujemy również prezentujemu zwycięzców.

* symulację kończymy w momencie przeprowadzenia N losowań (podane na początku przez użytkownika) lub po trafieniu 6-stki.

6. Podczas gry są prowadzone statyski ile było trafień 3, 4, 5, 6 elementowych, średnia wartość wygranej oraz sumę wygranych. Statysyki są prezentowanie na koniec każdego etapu i dotyczą wszystkich poprzedzających etapów.

 

Chodzi mi o punkt 3. Nie bardzo wiem jak zrobić, żeby każdy kupon zapisywał się w osobnym pliku. Póki co zrobiłem to w taki sposób, że użytkownik podaje nazwę pliku na początku i dopiero podaje nazwisko, liczbę zakładów i "skreślone" liczby. Tylko jest to niewdzięczne o tyle, że w momencie porównywania kuponów z wylosowanymi liczbami, będę musiał nazwę każdego wpisać z ręki w momencie otwierania pliku i zrobienia porównania.

Odnośnik do komentarza

a nie dało by jakoś na ciągu znaków zrobić np char nazwa [10]="temp0.txt";

i później w pętli przy tworzeniu plików dawać nazwa [4]=(char)i; nazwa[9]='\0'; przez to po kazdym dodaniu mozna zwiekszać i i rzutować jako czar do nazwy pliku a później już normalnie pli.open(nazwa,ios::out);

Odnośnik do komentarza

Jakoś nie widzę tego jak to opisujesz. U mnie wygląda to tak. Jest sobie zadeklarowana zmienna string nazwa;. Później jest zrobiony switch i jak z menu wybierzesz 1, to wygląda to tak:

case 1:{
  glowna tab[N];
  cout<<"Podaj nazwe pliku(format: numer.txt gdzie \"numer\" to kolejna liczba zaczynajac od 1, a konczac na 20)\n";
  cin>>nazwa;
  cout<<"Podaj liczbe zakladow, ktore chcesz zagrac\n";
  cin>>ile_zakladow;
  wczytaj(tab, ile_zakladow, plik);
  break;  
  }

 

więc może zrobiłbym sobie na początku tego case'a zmienną licznik, a potem do nazwy wsadził jakoś ten licznik, tylko jak tam rozszerzenie dodać :-k

 

Edyta ma kolejne pytanie.

 

Jak wylosować 6 liczb z przedziału 1,49, żeby się nie powtarzały, potrafię tylko zrobić zwykłe losowanie:

void losuj(int tab[6])
{
 for (int i=0; i<6; i++)
 tab[i]=rand()%(MAX-MIN+1)+MIN;
}

Odnośnik do komentarza

Najprościej mieć tablicę liczb do wylosowania i liczbę elementów w tej tablicy. Po wylosowaniu elementu przenosisz go na koniec tablicy i zmniejszasz licznik elementów - w ten sposób raz wylosowany element już się nie powtórzy:

#include <algorithm>
#include <iostream>
#include <cstdlib>

void lotto(unsigned ile, unsigned zIlu)
{
unsigned niewylosowane[zIlu];

for (unsigned i = 1; i <= zIlu; ++i)
	niewylosowane[i-1] = i;

for (; ile; --ile, --zIlu)
{
	unsigned indeks = std::rand() % zIlu;
	std::cout << niewylosowane[indeks] << " ";   
	std::swap(niewylosowane[indeks], niewylosowane[zIlu-1]);
}
}

Odnośnik do komentarza
Jakoś nie widzę tego jak to opisujesz. U mnie wygląda to tak. Jest sobie zadeklarowana zmienna string nazwa;. Później jest zrobiony switch i jak z menu wybierzesz 1, to wygląda to tak:

case 1:{
  glowna tab[N];
  cout<<"Podaj nazwe pliku(format: numer.txt gdzie \"numer\" to kolejna liczba zaczynajac od 1, a konczac na 20)\n";
  cin>>nazwa;
  cout<<"Podaj liczbe zakladow, ktore chcesz zagrac\n";
  cin>>ile_zakladow;
  wczytaj(tab, ile_zakladow, plik);
  break;  
  }

ok moze pomysł mój był nie przemyślany ale można po prostu utworzyć tablice charów w formie nazwa["i.txt"] dzięki czemu odwołując się do 1 wiersza dostaniemy 1.txt i to można wrzucić do wczytaj.

Odnośnik do komentarza

Zrobiłem sobie plik z listą plików. Jak teraz z niego kolejno wczytywać pliki? Tak wygląda mój kod. Chciałem otwieranie przeprowadzić w funkcji otworz, niestety coś nie halo i nie wiem jak sobie poradzić, a deadline już jutro :/

 

#include <iostream>
#include <iomanip>
#include <fstream>
#define MIN 1
#define MAX 49
#define N 20

using namespace std;

struct kupon
{
   int liczby[6];
};

struct glowna
{
   int ile_zakladow;
   char nazwisko[30];
   kupon a;
};

struct lista
{
   string nazwa_pliku;
};

void lista_plikow(lista &p, string nazwa, ofstream &plik3);
void wczytaj (glowna p[], ifstream &plik2, ofstream &plik);
void losuj(int tab[6]);
void wypisz(int tab[6]);
void otworz(glowna p[], lista r[], ifstream &plik5, ifstream &plik4);
string nazwa;
string nazwa2;
int main()
{
 //int licznik=0;
 int wylosowane_liczby[6];
 int pula_nagrod, ile_losowan;
 int wybor;
 while(wybor!=3){
 cout<<"Witam w symulatorze duzego lotka\n"<<"Autor: Misiek\n\n"<<"Co chcesz wykonac?\n"<<"(1) Wprowadz kupon\n"<<"
        (2) Rozpocznij symulacje\n"<<"(3) Wyjscie\n";
 cout<<endl;
 ofstream plik, plik3;
 ifstream plik2, plik4, plik5;
 cin>>wybor;
 switch(wybor)
 {

  case 1:{
  //licznik=licznik+1;
  lista zmienna;
  glowna tab[N];
  cout<<"Podaj nazwe pliku(format: numer.txt gdzie \"numer\" to kolejna liczba zaczynajac od 1, a konczac na 20)\n";
  cin>>nazwa;
  //nazwa=licznik;
  lista_plikow(zmienna, nazwa, plik3);
  wczytaj(tab, plik2, plik);
  break;  
  }  
  case 2:{
	   /*	  
	   cout<<"Podaj pule nagrod:\n";
	   cin>>pula_nagrod;
	   cout<<"Ile losowan chcesz wykonac?\n";
	   cin>>ile_losowan;
	   for(int i=0; i<ile_losowan; i++)
	   {
	   cout<<"W kasetach maszyn losujacych znajduje sie odpowiednia ilosc kul.";
	   _sleep(3000);
	   system("cls");
	   cout<<"Komory maszyn losujacych sa puste.";
	   _sleep(3000);
	   system("cls");
	   cout<<"Nastepuje zwolnienie blokady i rozpoczynamy losowanie 6 liczb.";
	   _sleep(3000);
	   system("cls");
	   srand(time(NULL));
	   losuj(wylosowane_liczby);
	   cout<<"Wylosowano nastepujace liczby: \n";
	   wypisz(wylosowane_liczby);
	   float trojka, czworka, piatka, szostka;
	   trojka=((pula_nagrod*10)/100);
	   czworka=((pula_nagrod*15)/100);
	   piatka=((pula_nagrod*20)/100);
	   szostka=pula_nagrod;
	   cout<<"Pula nagrod wynosi: "<<pula_nagrod<<endl;
	   cout<<"Za trafienie trojki mozna wygrac: "<<trojka<<"\n";
	   cout<<"Za trafienie czworki mozna wygrac: "<<czworka<<"\n";
	   cout<<"Za trafienie piatki mozna wygrac: "<<piatka<<"\n";
	   cout<<"Za trafienie szostki mozna wygrac: "<<szostka<<"\n"; */
	   glowna tab2[N];
	   lista taba[N];
	   otworz(tab2, taba, plik5, plik4);
	   cout<<endl;		   
	   //}
	   break;
	   }
  case 3: break;
  default: cout<<"Zly klawisz";
  }					 
  }
system("Pause");
}


void wczytaj (glowna p[], ifstream &plik2, ofstream &plik)
{
 plik.open(nazwa.c_str(), ios::out);
 cout<<"Podaj liczbe zakladow, ktore chcesz zagrac\n";
 cin>>p[0].ile_zakladow;
 plik <<p[0].ile_zakladow<<endl;
 plik2.open(nazwa.c_str(), ios::in);
 plik2 >> p[0].ile_zakladow;
 int zm=p[0].ile_zakladow;
 //cout<<zm<<endl;	 
 for (int i=0; i<zm; i++)
 {	  
	cout<<"Wypelnij "<<i+1<<" zaklad, wpisujac kolejno nazwisko, a potem 6 liczb z zakresu <1,49>\n";
	cout<<"Podaj nazwisko\n";
	cin.get();
	cin.getline(p[i].nazwisko, 30);
	plik <<p[i].nazwisko<<endl;
	for (int j=0; j<6; j++)
	{
		do{
		cout<<"Podaj "<<j+1<<" liczbe: __\b\b";
		cin>>p[i].a.liczby[j];
		if (p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49)
		{
		  cout<<"Przekroczono zakres. Dostepne liczby z zakresu <1,49>\n Wpisz jeszcze raz\n";
		}
		  }while(p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49);
	}

	for (int k=0; k<6; k++)
	{
		plik<<p[i].a.liczby[k]<<endl;
	}
 }
 plik2.close();
 plik.close();
}

void losuj(int tab[6])
{
int i=0;
while(i<6)
  {
tab[i]=rand()%(MAX-MIN+1)+MIN;
for(int z=0; z<i; z++)
  {
if (tab[z]==tab[i])
i=i-1;
  }
i+=1;
  }
}

void wypisz(int tab[6])
{
 for (int i=0; i<6; i++)
 {
 cout<<setw(4)<<tab[i];
 }
 cout<<"\n";
}

void otworz(glowna p[], lista r[], ifstream &plik5, ifstream &plik4)
{
 plik4.open("lista.txt", ios::in);
 for (int k=0; k<EOF; k++)
 for (int g=0; g<EOF; g++)
 {
 plik4 >>r[k].nazwa_pliku[g];
 plik5.open(r[k].nazwa_pliku[g], ios::in);
 plik5>>p[0].ile_zakladow;
 int zm=p[0].ile_zakladow;
 for (int i=0; i<zm; i++)
	 {
	 plik5.ignore();
	 plik5.getline(p[i].nazwisko, 30);
	 for (int j=0; j<6; j++)
	   {
		 plik5 >> p[i].a.liczby[j];
	   }
	 }
 //test czy dobrze wyswietla kazdy kolejny otworzony plik
 for (int m=0; m<zm; m++)
		{
 cout<<endl;
 cout<<"ile zakladow: "<<zm<<endl;
 cout<<"nazwisko: "<<p[m].nazwisko<<endl;
 for (int n=0; n<6; n++)
   {
	 cout<<p[m].a.liczby[n]<<endl;
   }
		}
 }
 plik5.close();
 plik4.close();
}

void lista_plikow(lista &p, string nazwa, ofstream &plik3)
{
 plik3.open("lista.txt", ios::app);
 p.nazwa_pliku=nazwa;
 plik3 << p.nazwa_pliku<<endl;
 plik3.close();
}

Odnośnik do komentarza

po pierwsze cin>> i cout<< nie obsługują stringów więc powinno to wyglądać tak:

#include <iostream>
#include <iomanip>
#include <fstream>
#define MIN 1
#define MAX 49
#define N 20

using namespace std;

struct kupon
{
      int liczby[6];
};

struct glowna
{
      int ile_zakladow;
      char nazwisko[30];
      kupon a;
};

struct lista
{
      string nazwa_pliku;
};

void lista_plikow(lista &p, string nazwa, ofstream &plik3);
void wczytaj (glowna p[], ifstream &plik2, ofstream &plik);
void losuj(int tab[6]);
void wypisz(int tab[6]);
void otworz(glowna p[], lista r[], ifstream &plik5, ifstream &plik4);
string nazwa;
string nazwa2;
int main()
{
    //int licznik=0;
    int wylosowane_liczby[6];
    int pula_nagrod, ile_losowan;
    int wybor;
    while(wybor!=3){
    cout<<"Witam w symulatorze duzego lotka\n"<<"Autor: Misiek\n\n"<<"Co chcesz wykonac?\n"<<"(1) Wprowadz kupon\n";
    cout<<"(2) Rozpocznij symulacje\n"<<"(3) Wyjscie\n";
    cout<<endl;
    ofstream plik, plik3;
    ifstream plik2, plik4, plik5;
    cin>>wybor;
    switch(wybor)
    {

     case 1:{
     //licznik=licznik+1;
     lista zmienna;
     glowna tab[N];
     cout<<"Podaj nazwe pliku(format: numer.txt gdzie \"numer\" to kolejna liczba zaczynajac od 1, a konczac na 20)\n";
     nazwa=getchar();
     //nazwa=licznik;
     lista_plikow(zmienna, nazwa, plik3);
     wczytaj(tab, plik2, plik);
     break;  
     }  
     case 2:{
          /*      
          cout<<"Podaj pule nagrod:\n";
          cin>>pula_nagrod;
          cout<<"Ile losowan chcesz wykonac?\n";
          cin>>ile_losowan;
          for(int i=0; i<ile_losowan; i++)
          {
          cout<<"W kasetach maszyn losujacych znajduje sie odpowiednia ilosc kul.";
          _sleep(3000);
          system("cls");
          cout<<"Komory maszyn losujacych sa puste.";
          _sleep(3000);
          system("cls");
          cout<<"Nastepuje zwolnienie blokady i rozpoczynamy losowanie 6 liczb.";
          _sleep(3000);
          system("cls");
          srand(time(NULL));
          losuj(wylosowane_liczby);
          cout<<"Wylosowano nastepujace liczby: \n";
          wypisz(wylosowane_liczby);
          float trojka, czworka, piatka, szostka;
          trojka=((pula_nagrod*10)/100);
          czworka=((pula_nagrod*15)/100);
          piatka=((pula_nagrod*20)/100);
          szostka=pula_nagrod;
          cout<<"Pula nagrod wynosi: "<<pula_nagrod<<endl;
          cout<<"Za trafienie trojki mozna wygrac: "<<trojka<<"\n";
          cout<<"Za trafienie czworki mozna wygrac: "<<czworka<<"\n";
          cout<<"Za trafienie piatki mozna wygrac: "<<piatka<<"\n";
          cout<<"Za trafienie szostki mozna wygrac: "<<szostka<<"\n"; */
          glowna tab2[N];
          lista taba[N];
          otworz(tab2, taba, plik5, plik4);
          cout<<endl;          
          //}
          break;
          }
     case 3: break;
     default: cout<<"Zly klawisz";
     }                    
     }
system("Pause");
}


void wczytaj (glowna p[], ifstream &plik2, ofstream &plik)
{
    plik.open(nazwa.c_str(), ios::out);
    cout<<"Podaj liczbe zakladow, ktore chcesz zagrac\n";
    cin>>p[0].ile_zakladow;
    plik <<p[0].ile_zakladow<<endl;
    plik2.open(nazwa.c_str(), ios::in);
    plik2 >> p[0].ile_zakladow;
    int zm=p[0].ile_zakladow;
    //cout<<zm<<endl;    
    for (int i=0; i<zm; i++)
    {      
       cout<<"Wypelnij "<<i+1<<" zaklad, wpisujac kolejno nazwisko, a potem 6 liczb z zakresu <1,49>\n";
       cout<<"Podaj nazwisko\n";
       cin.get();
       cin.getline(p[i].nazwisko, 30);
       plik <<p[i].nazwisko<<endl;
       for (int j=0; j<6; j++)
       {
           do{
           cout<<"Podaj "<<j+1<<" liczbe: __\b\b";
           cin>>p[i].a.liczby[j];
           if (p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49)
           {
             cout<<"Przekroczono zakres. Dostepne liczby z zakresu <1,49>\n Wpisz jeszcze raz\n";
           }
             }while(p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49);
       }

       for (int k=0; k<6; k++)
       {
           plik<<p[i].a.liczby[k]<<endl;
       }
    }
    plik2.close();
    plik.close();
}

void losuj(int tab[6])
{
int i=0;
while(i<6)
  {
tab[i]=rand()%(MAX-MIN+1)+MIN;
for(int z=0; z<i; z++)
     {
if (tab[z]==tab[i])
i=i-1;
     }
i+=1;
  }
}

void wypisz(int tab[6])
{
    for (int i=0; i<6; i++)
    {
    cout<<setw(4)<<tab[i];
    }
    cout<<"\n";
}

void otworz(glowna p[], lista r[], ifstream &plik5, ifstream &plik4)
{
    plik4.open("lista.txt", ios::in);
    for (int k=0; k<EOF; k++)
    for (int g=0; g<EOF; g++)
    {
    plik4 >>r[k].nazwa_pliku[g];
    plik5.open(r[k].nazwa_pliku[g], ios::in);
    plik5>>p[0].ile_zakladow;
    int zm=p[0].ile_zakladow;
    for (int i=0; i<zm; i++)
        {
        plik5.ignore();
        plik5.getline(p[i].nazwisko, 30);
        for (int j=0; j<6; j++)
          {
            plik5 >> p[i].a.liczby[j];
          }
        }
    //test czy dobrze wyswietla kazdy kolejny otworzony plik
    for (int m=0; m<zm; m++)
           {
    cout<<endl;
    cout<<"ile zakladow: "<<zm<<endl;
    cout<<"nazwisko: "<<p[m].nazwisko<<endl;
    for (int n=0; n<6; n++)
      {
        cout<<p[m].a.liczby[n]<<endl;
      }
           }
    }
    plik5.close();
    plik4.close();
}

void lista_plikow(lista &p, string nazwa, ofstream &plik3)
{
    plik3.open("lista.txt", ios::app);
    p.nazwa_pliku=nazwa;
 plik3<<p.nazwa_pliku.c_str()<<endl;
    plik3.close();
}

kolejnym problemem jest otwieranie plik5 ponieważ funkcja open przyjmuje jako pierwszy parametr wskaźnik na ciąg znaków więc musiałbyś wrzucić tą nazwe z r.nazwa... do jakiejś tablicy char (nie wiem jaki format mają te pliki więc nie dodawałem tego) i w parametrze przekazujesz wtedy wskaźnik na tą tablice.

Odnośnik do komentarza
  • 2 tygodnie później...

jako, ze mam juz sesje za soba to chcialem sobie przypomniec co nieco w kontekscie tworzenia gui w javie i do tego celu probuje zaprogramowac jakis ladny dla oka programik do wyliczania sredniej ocen z semestru (wybralem najlatwiejszy problem (algorytmicznie) do rozwiazania, jaki tylko przyszedl mi do glowy :P ) i wszystko nawet dosc spoko smiga, ale nie podobaja mi sie dwie rzeczy:

1) gdy wpisze ilosc kursow to ladnie pokazuja sie pola, gdzie mozna wpisywac nazwy kursow, oceny i punkty, ale zeby wyswietlil sie przycisk do wyliczenia sredniej to musze najechac myszka na obszar, gdzie ten przycisk sie znajduje i dopiero wtedy on sie wyswietla - dla mnie nie problem, ale dla potencjalnego klienta to powazne utrudnienie

2) zakladajac ze raz wylicze sobie srednia, ale chcialbym zrobic to ponownie to chcialbym, aby po wpisaniu nowej wartosci w pole okreslajace ilosc kursow pojawialy sie nowe pola do wpisywania nazw, ocen i kursow - niestety na chwile obecna dziala to tak, ze po wpisaniu nowej wartosci w to pole, program co prawda zmienia ilosc pol do wpisywania, ale jakos dziwnie zamazuje wartosci poprzednie, wciaz je pamietajac, co sie uwidacznia przy probie wpisania w te pola nowych danych - cholernie uciazliwa sprawa :/

generalnie chcialbym posluchac jakichs rad, jak sobie z tym problemem poradzic - prosty repaint i ewentualne dodanie metody czyszczacej zawartosc JTextField na niewiele sie zdalo :(

 

umieszczam tutaj caly kod programu:

 

package main;

/**
*
* @author Fenomen
*/
public class Course {

   private String name;
   private double grade;
   private double points;

   public Course()
   {
       name = "";
       grade = 0;
       points = 0;
   }

   public Course(String name)
   {
       this.name = name;
       grade = 0;
       points = 0;
   }

   public Course(String name, double grade, double points)
   {
       this.name = name;
       this.grade = grade;
       this.points = points;
   }

   public void setName(String name)
   {
       this.name = name;
   }

   public void setGrade(double grade)
   {
       this.grade = grade;
   }

   public void setPoints(double points)
   {
       this.points = points;
   }

   public String getName()
   {
       return name;
   }

   public double getGrade()
   {
       return grade;
   }

   public double getPoints()
   {
       return points;
   }

   public String toString()
   {
       return "Nazwa kursu: "+name+", ocena: "+grade+", punkty: "+points;
   }

}

 

package main;

/**
*
* @author Fenomen
*/
public class Average {

   private Course [] coursesarray;
   private double average;
   private double sumpoints;
   private double defpoints;
   private int coursesnumber;

   public Average()
   {
       coursesnumber = 0;
       coursesarray = new Course[coursesnumber];
       average = 0;
       sumpoints = 0;
       defpoints = 0;
   }

   public Average(int coursesnumber)
   {
       this.coursesnumber = coursesnumber;
       coursesarray = new Course[coursesnumber];
       average = 0;
       sumpoints = 0;
       defpoints = 0;
   }

   public Average(Course [] coursesarray)
   {
       this.coursesarray = coursesarray;
       coursesnumber = coursesarray.length;
       sumpoints = 0;
       for (int i=0; i<coursesnumber; i++)
       {
           sumpoints += coursesarray[i].getPoints();
       }
       average = 0;
       for (int i=0; i<coursesnumber; i++)
       {
           average += coursesarray[i].getGrade()*coursesarray[i].getPoints()/sumpoints;
       }
       defpoints = 0;
   }

   public void setCoursesarray(Course [] coursesarray)
   {
       this.coursesarray = coursesarray;
   }

   public void setAverage(double average)
   {
       this.average = average;
   }

   public void setSumpoints(double sumpoints)
   {
       this.sumpoints = sumpoints;
   }

   public void setCoursesnumber(int coursesnumber)
   {
       this.coursesnumber = coursesnumber;
   }

   public void setDefpoints(double defpoints)
   {
       this.defpoints = defpoints;
   }

   public void setCourse(int i, Course course)
   {
       coursesarray[i] = course;
   }

   public Course [] getCoursesarray()
   {
       return coursesarray;
   }

   public double getAverage()
   {
       return average;
   }

   public double getSumpoints()
   {
       return sumpoints;
   }

   public int getCoursesnumber()
   {
       return coursesnumber;
   }

   public double getDefpoints()
   {
       return defpoints;
   }

   public String sumpointsToString()
   {
       return sumpoints+"";
   }

   public String defpointsToString()
   {
       return defpoints+"";
   }

   public String averageToString()
   {
       return average+"";
   }

   public String toString()
   {
       String s="";
       for (int i=0; i<coursesnumber; i++)
       {
           s +=  coursesarray[i].toString()+"\n";
       }
       s += "Koncowa srednia: "+countAverage();
       return s;
   }

   public double countSumpoints()
   {
       sumpoints = 0;
       for (int i=0; i<coursesnumber; i++)
           sumpoints += coursesarray[i].getPoints();
       return sumpoints;
   }

   public double countCoursesnumber()
   {
       return coursesarray.length;
   }

   public double countDefpoints()
   {
       for (int i=0; i<coursesnumber; i++)
       {
           if (coursesarray[i].getGrade() < 3) defpoints +=coursesarray[i].getPoints();
       }
       return defpoints;
   }

   public double countAverage()
   {
       average = 0;
       for (int i=0; i<countCoursesnumber(); i++)
       average += coursesarray[i].getGrade()*coursesarray[i].getPoints()/countSumpoints();
       average *= 100;
       average = (int)average;
       average /= 100;
       return average;
   }

}

 

package main;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
*
* @author Fenomen
*/
public class Application {

   public JFrame frame;
   public final JPanel panel;
   public JLabel label1, label2, label3, label4, label5, label6, label7;
   public JTextField [] courses, grades, points;
   public JTextField coursesnumberfield;
   public int coursesnumber;
   public JButton confirmbutton, applybutton;
   Average average;

   public Application()
   {
       frame = new JFrame();
       frame.setSize(800, 600);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setResizable(false);
       frame.setTitle("Program do wyliczania sredniej ocen (©Marek 'Fenomen' Skowronski, 2009)");

       panel = new JPanel();
       panel.setSize(frame.getSize());
       panel.setBackground(new Color(200, 230, 220));
       panel.setLayout(null);
   }

   public static void main(String [] args)
   {
       Application application = new Application();
       application.userInterface();
   }

   public void userInterface()
   {
       label1 = new JLabel("Ile kursow?");
       label1.setSize(label1.getPreferredSize());
       label1.setLocation(50, 50);
       panel.add(label1);
       coursesnumberfield = new JTextField(4);
       coursesnumberfield.setSize(coursesnumberfield.getPreferredSize());
       coursesnumberfield.setLocation(150, 50);
       panel.add(coursesnumberfield);

       confirmbutton = new JButton("Potwierdz");
       confirmbutton.setSize(confirmbutton.getPreferredSize());
       confirmbutton.setLocation(230, 50);
       confirmbutton.addActionListener(new ActionListener() {

           public void actionPerformed(ActionEvent e) {
               label2 = new JLabel("Kursy: ");
               panel.add(label2);
               label2.setSize(label2.getPreferredSize());
               label2.setLocation(50, 100);
               label3 = new JLabel("Oceny: ");
               panel.add(label3);
               label3.setSize(label3.getPreferredSize());
               label3.setLocation(150, 100);
               label4 = new JLabel("Punkty: ");
               panel.add(label4);
               label4.setSize(label4.getPreferredSize());
               label4.setLocation(250, 100);
               coursesnumber = Integer.parseInt(coursesnumberfield.getText());
               courses = new JTextField[coursesnumber];
               grades = new JTextField[coursesnumber];
               points = new JTextField[coursesnumber];
               for (int i=0; i<coursesnumber; i++)
               {
                   courses[i] = new JTextField(20);
                   grades[i] = new JTextField(3);
                   points[i] = new JTextField(3);
                   panel.add(courses[i]);
                   panel.add(grades[i]);
                   panel.add(points[i]);
                   courses[i].setText("");
                   grades[i].setText("");
                   points[i].setText("");
                   courses[i].setLocation(50, 150+i*30);
                   grades[i].setLocation(150, 150+i*30);
                   points[i].setLocation(250, 150+i*30);
                   courses[i].setSize(90, 25);
                   grades[i].setSize(90, 25);
                   points[i].setSize(90, 25);
               }

               applybutton = new JButton("Wylicz średnią");
               applybutton.setSize(applybutton.getPreferredSize());
               applybutton.setLocation(140, 520);
               panel.add(applybutton);
               applybutton.addActionListener(new ActionListener() {

                   public void actionPerformed(ActionEvent e) {
                       average = new Average(coursesnumber);
                       for (int i=0; i<coursesnumber; i++)
                       {
                           average.setCourse(i, new Course(courses[i].getText(),
                               Double.parseDouble(grades[i].getText()), Double.parseDouble(points[i].getText())));
                       }
                       average.countAverage();
                       average.countCoursesnumber();
                       average.countSumpoints();
                       average.countDefpoints();
                       label5 = new JLabel("Ilosc punktow ECTS z biezacego semestru: "+average.sumpointsToString());
                       panel.add(label5);
                       label5.setSize(label5.getPreferredSize());
                       label5.setLocation(350, 100);
                       label6 = new JLabel("Ilosc deficytowych punktow ECTS z biezacego semestru: "+average.defpointsToString());
                       panel.add(label6);
                       label6.setSize(label6.getPreferredSize());
                       label6.setLocation(350, 150);
                       label7 = new JLabel("Srednia z biezacego semestru wynosi: "+average.averageToString());
                       panel.add(label7);
                       label7.setSize(label7.getPreferredSize());
                       label7.setLocation(350, 200);
                       panel.repaint();
                   }
               }); 
           panel.repaint();
           }
       }
       );
       panel.add(confirmbutton);

       panel.setVisible(true);

       frame.setLayout(null);
       frame.getContentPane().add(panel);
       frame.setVisible(true);
   }
}

 

wszelkie sugestie bardzo mile widziane :)

Odnośnik do komentarza
  • 3 tygodnie później...

Robisz tabele, z trzeba kolumnami. Teraz nie pamiętam, ale jakoś się dawało wartość w 1 i 3 kolumnie (x% ?) , a 2 kolumnę wpisujesz jej szerokość.

 

Można też zrobić tabelę z 1 kolumną, która będzie wyśrodkowana i miała jakąś tam szerokość, a w niej zagnieżdżamy kolejne.

Odnośnik do komentarza

wszelkie sugestie bardzo mile widziane :)

u mnie ten przycisk na dole, jak najbardziej jest caly czas widoczny - nie trzeba najezdzac nigdzie, zeby go zobaczyc

 

ale poza tym to troche "bagietek" masz:

1. przy zmianie liczby kursow na wieksza sie odswieza liczba pol, ale juz przy zmianie na mniejsza niekoniecznie ;)

2. przy zmianie liczby kursow, no niby czysci jakos te pola, ale jak sie na nie poklika to sie okazuje, ze jednak tam sa jakies wartosci

3. z tego chyba efektu potem sie pierdzieli i mimo, ze sie powypelnialo wszystkie pola to sie dostaje NumberFormatException i krzyczy, ze empty String - kawalek stacktrace:

 

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String

at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)

at java.lang.Double.parseDouble(Unknown Source)

at Application$1$1.actionPerformed(Application.java:101)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

 

Tak w ogole to w kwesti sugestii to - nie pisz w golym swingu, przy wiekszych aplikacjach, ustawianie w kolko w pixelach pozycji elementow jest strzalem w kolano.

Zacznij np. uzywac bilbiotek jGoodies (http://www.jgoodies.com/downloads/index.html - tam masz tez dema takich formow - np. odpal sobie wersje jnlp to od razu online zobaczysz) - wtedy bazujesz na tak zwanych FormLayout'ach - ustawiasz tam sobie strukture formularza (taki no szablon) no i naprawde tego sie fajnie uzywa. Moze na poczatku byc ciezej no bo tutaj mozna robic juz duze swingowe aplikacje - rozne zakladki duperele. Wtedy tez zmieni ci sie podejscie - np. niezaleznie od tego, czy dane pole widac czy nie widac ty je i tak dodajesz do panelu, a dopiero roznorakie listenery (w zaleznosci od miliarda bzdetow, ktore mozesz sobie wymyslec ;) ) decyduja o tym, czy dane pole ma byc widoczne, edytowalne itd. itp. (np. w twoim przypadku na akcji podpietej do tego pierwszego buttona, moglbys komponentom ustawiac setVisible(true));

 

To pomaga bo pozniej mozna sobie ladnie logike wyodrebnic, a tak jak bedziesz mial taki makaraon, w ktorym na 50 listenerze bedziesz dodawal kolejne 500 pole to naprawde sie zgubisz :D Wiem co mowie, bo, jakkolwiek to zabrzmi, siedze m.in. w takim projekcie Swingowym (co prawda juz prehistoryczna wersja swinga), w ktorym jest raptem 5 ekranow i ... ten projekt trwa juz 5 lat :D Trwa tyle bo niemalze cokolwiek nie zrobisz (wpiszesz cos, nacisniesz tab, enter, jakies klawisze funkcyjne) to zaskakuje miliard listenerow, ktore ustawiaja focusy, odpalaja popupy, ustawiaja edytowalnosc / widocznosc pol w zaleznosci od tego co wpisales w danym polu, itd. itp. No juz pomine milczeniem fakt, ze to musi chodzic na wynalazku co sie zwie AS400, a on ma swoja maszyne wirtualna wiec ma czesto fanaberie...

 

Poza tym, o ile pamietam to w naszej aplikacji formularze generowaly sie raz przy starcie aplikacji - wszelkie pola (te rozne JTExtField itd.) inicjalizowaly sie tylko raz - potem juz tylko listenery zmienialy ich stan. U ciebie jak listener zaskakuje to zawsze tworzy instancje danego obiektu. to kosztuje. zreszta, lepiej jak userowi aplikacja bedzie sie startowac 10 sek, zamiast 5, ale potem bedzie mu chodzic szybciej niz jak np. bedzie przechodzil pomiedzy zakladakami i ciagle mu sie bedzie cos "na zywo" generowalo i w rezultacie chodzilo wolniej.

 

 

Sprobuj sie tez pobawic z JTable - tam juz jest calkiem ciekawie bo np. uzywasz tam modeluDanych (TableModel), ktory sobie np. bedziesz mogl sortowac, edytowac, kazda kolumna jest okreslonego typu (np. string, waluta, data). Nauczysz sie dzieki temu pisac rozne renderery, ktore zmienia wyglad twoich komponentow (JTextField itd.) nie do poznania, pozwola na edycje itd. Tam moze byc niezly mlynek, ale zaryzykuje stwierdzenie, ze jak zrobisz tabele uzywajaca modeluDanych, w ktorej cos tam bedziesz edytowal, jakis tam wlasny komponent napiszesz (ot chocby, tekstowy komponent, ale zeby obok tego co wpiszesz byla ikonka graficzna, a jak np. bedziesz edytowal to pole to jego tlo ustawi sie na kolor sraczkowaty, a czcionka na morski niebieski ;) ) to naprawde poznasz swinga.

Na stronie Sun'a byl, o ile pamietam, calkiem niezly tutorial.

 

poza tym - co dalej ? :) java se, ktora wydaje sie, ze juz znasz to dopiero poczatek :) mozesz pisac aplikacje mobilne (j2me), mozesz pisac proste aplikacje desktopowe (np. swing, adobe flex), mozesz pisac aplikacje webowe, a mozesz pojechac w ogole z grubej rury i wziac sie za j2ee, czyli tzw. jave korporacyjna - to takie ustrojstwo, na ktorym dzialaja serwisy transakcyjne bankow, operatorow telefonii komorkowych, rozne wieksze programy lojalnosciowe, uslugi lokalizacyjne itd. itp. Mozliwosci duzo, zarobki bdb, a tak szybko to nie zniknie z rynku bo to wielki czolg :D

Odnośnik do komentarza

pytanie trochę z innej beczki :P jak w html-u (może być z użyciem css) sprawić, że zawartość strony będzie wyśrodkowana w zależności od rozdzielczości (np. tak jak na nk :P )

 

Bierzesz zawartość w DIV i w css dajesz temu divowi:

margin: 0 auto;

Odnośnik do komentarza
  • 3 miesiące później...

Napisać aplikację z użyciem klasy i działania na obiektach tej klasy z wykorzystaniem tablic

Wykorzystać mechanizm dziedziczenia (przekazywanie właściwości między klasą nadrzędną i potomną) używając metod przeciążonych i przedefiniowanych.

 

Mam ktos moze cos niezbyt skomplikowanego podchodzacego pod ten opis? :)

 

Jezyk programowania - Java

Odnośnik do komentarza

tu ci wrzuce caly kod:

 

public abstract class Osoba
{
String nazwisko;
String imie;
String pesel;

Osoba(String nazwisko, String imie, String pesel)
   {
   this.nazwisko = nazwisko;
   this.imie = imie;
   this.pesel= pesel;
   }

Osoba()
   {
   nazwisko = "";
   imie = "";
   pesel = "";
   }

public String toString()
   {
   return("imie: "+imie+", nazwisko: "+nazwisko+", pesel: "+pesel);
   }

void wyswietlOsobe()
   {
   toString();
   }    

}

 

 

public class Pracownik extends Osoba
   {
   double pensja;
   int urlopDoWykorzystania;

   Pracownik(String nazwisko, String imie, String pesel, double pensja, int urlop)
       {
       super(nazwisko, imie, pesel);
       this.pensja = pensja;
       urlopDoWykorzystania = urlop;
       }

   Pracownik()
       {
       super();
       pensja = 0.0;
       urlopDoWykorzystania=28;
       }

public String toString()
   {
   return (super.toString()+", pensja: "+pensja+", urlop: "+urlopDoWykorzystania);
   }

void wyswietlPracownika()
   {
   toString();
   }

void setPensja(double pensja)
   {
   this.pensja = pensja;
   }    

void setUrlop(int urlop)
   {
   urlopDoWykorzystania = urlop;
   }    

double zwrocPensje()
   {
   return pensja;
   }

int zwrocUrlop()
   { 
   return urlopDoWykorzystania;
   }


void nowyUrlop(int urlop)
   {
   urlopDoWykorzystania = urlop;
   }

void nowaPensja(double n_pensja)
   {
   pensja = n_pensja;
   }

void ustawUrlop(String nazw, int urlop)
   {
   if (nazw.equals(nazwisko)) urlopDoWykorzystania = urlop;
   }    

}

 

 

public class Student extends Osoba
{
double ocenaZAnalizy;
double ocenaZAlgebry;
double ocenaSrednia;

Student(String nazwisko, String imie, String pesel, double analiza, double algebra, double srednia)
   {
   super(nazwisko, imie, pesel);
   ocenaZAnalizy = analiza;
   ocenaZAlgebry = algebra;
   ocenaSrednia = srednia;
   }

Student()
   {
   super();
   ocenaZAnalizy = 0.0;
   ocenaZAlgebry = 0.0;
   ocenaSrednia = 0.0;
   }

public String toString()
   {
   return (super.toString()+", ocena z analizy: "+ocenaZAnalizy+", ocena z algebry: "+ocenaZAlgebry+", ocena srednia: "+ocenaSrednia);
   }

void wyswietlStudenta()
   {
   toString();
   }

void ustawOceneZAnalizy(double ocena_analiza)
   {
   ocenaZAnalizy = ocena_analiza;
   }

void ustawOceneZAlgebry(double ocena_algebra)
   {
   ocenaZAlgebry = ocena_algebra;
   }

double zwrocOceneZAnalizy()
   {
   return ocenaZAnalizy;
   }

double zwrocOceneZAlgebry()
   {
   return ocenaZAlgebry;
   }

double sredniaOcen()
   {
   ocenaSrednia = (ocenaZAnalizy + ocenaZAlgebry) / 2;
   return ocenaSrednia;
   }

}

 

 

import java.io.*;

public class Main
   {
   public static void main(String [] args)
       {

   int liczba=10;
   int studlicz=0 ,praclicz = 0;
   Osoba osoba[] = new Osoba[liczba];

   osoba[0] = new Student("Jan", "Kowalski", "84110645874", 5.0, 4.0, 4.5);
   osoba[1] = new Pracownik("Adam", "Nowak", "59051264953", 1665.2, 25);
   osoba[2] = new Student("Krzysztof", "Michalski", "8001263211", 3.0, 4.0, 3.5);
   osoba[3] = new Pracownik("Janusz", "Jurgiel", "61041358243", 1665.2, 25);
   osoba[4] = new Student("Dariusz", "Stefanski", "80111415669", 5.0, 3.0, 4.0);
   osoba[5] = new Pracownik("Tomasz", "Pomidor", "72100845521", 1665.2, 25);
   osoba[6] = new Student("Patryk", "Chlebowski", "85121456697", 4.0, 4.0, 4.0);
   osoba[7] = new Pracownik("Bogdan", "Gumiasty", "59080713365", 1665.2, 25);
   osoba[8] = new Student("Przemyslaw", "Zakrecki", "85030913321", 5.0, 5.0, 5.0);
   osoba[9] = new Student("Krzysztof", "Kowalski", "81010512879", 4.0, 3.0, 3.5);

   for (int i=0; i<osoba.length; i++)
       if (osoba[i] instanceof Student) {
           studlicz++;
           System.out.println("Osoba: "+osoba[i].imie+" "+osoba[i].nazwisko+" jest studentem");
       }
       else {
           praclicz++;
           System.out.println("Osoba: "+osoba[i].imie+" "+osoba[i].nazwisko+" jest pracownikiem");
       }

   for (int i=0; i<osoba.length; i++)
       if (osoba[i] instanceof Pracownik)
           System.out.println("Osoba: "+osoba[i].imie+" "+osoba[i].nazwisko+" zarabia "+((Pracownik)osoba[i]).zwrocPensje()+" zl");

   for (int i=0; i<osoba.length; i++)
       if (osoba[i] instanceof Student)
           System.out.println("Osoba: "+osoba[i].imie+" "+osoba[i].nazwisko+" ma srednia "+((Student)osoba[i]).sredniaOcen());


   }
}

 

pisalem to dwa lata temu wiec prosze o wyrozumialosc co do czytelnosci kodu ;)

Odnośnik do komentarza
  • 2 tygodnie później...

Ok, dopiero zaczynam "zabawę" z C++ i utknąłem przy takim zadaniu. Chodzi mi tylko wskazówkę, jak zacząć:

 

Dana jest zmienna w = -63. Wykorzystując operatory przesunięcia bitowego - w lewo (<<) oraz

w prawo (>>), obliczyć w1 = w ∗ 4 oraz w2 = w / 8. Wyprowadzić zmienne w1 i w2 w postaci

dziesiętnej i szesnastkowej.

Odnośnik do komentarza

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.

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

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...