[C++] Tablice dynamiczne

Proki
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 13 mar 2013, o 21:04
Płeć: Mężczyzna
Lokalizacja: Białystok

[C++] Tablice dynamiczne

Post autor: Proki »

1.
Napisz program, który utworzy n-elementową tablicę dynamiczną, gdzie n jest wartością podaną przez użytkownika, wypełni ją liczbami rzeczywistymi, również podanymi przez użytkownika, a następnie skopiuje do nowo utworzonej tablicy dynamicznej tylko te liczby które są większe od 0.

2.
Napisz program, który utworzy dwie kwadratowe tablice dynamiczne o rozmiarze podanym przez użytkownika, wypełni je losowymi liczbami z przedziału (1,9), a następnie wyświetli informację o liczbie elementów, które stoją na tych samych pozycjach w obu tablicach i mają te same wartości.
arcan
Użytkownik
Użytkownik
Posty: 106
Rejestracja: 17 gru 2012, o 23:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 31 razy

[C++] Tablice dynamiczne

Post autor: arcan »

Kod: Zaznacz cały

#include<iostream>
using namespace std;
int main()
{
	int *a,*b,n,pom=0;
	cin >> n;
	a=new int[n];
	for(int i=0;i!=n;i++)
	{
		cin>>a[i];
		if(a[i]>0)
		pom++;
	}
	b=new int[pom];
	for(int i=0,c=0;i!=n;i++)
	{
		if(a[i]>0)
		{
			b[c]=a[i];
			c++;
		}
	}
        delete [] a;
        delete [] b;
	return 0;
}

Kod: Zaznacz cały

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
	srand(time(NULL));
	int **a,**b,n,pom=0;
	cin >> n;
	a=new int*[n];
	b=new int*[n];
	for(int i=0;i!=n;i++)
	{
		a[i]=new int[n];
		b[i]=new int[n];	
	}
	for(int i=0;i!=n;i++)
	for(int j=0;j!=n;j++)
	{
		a[i][j]=rand()%10;
		b[i][j]=rand()%10;
		if(a[i][j]==b[i][j])pom++;
	}
	cout<<pom;
	return 0;
}
		
Proki
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 13 mar 2013, o 21:04
Płeć: Mężczyzna
Lokalizacja: Białystok

[C++] Tablice dynamiczne

Post autor: Proki »

zapomniałem dodać, że wyniki wypisze na ekran. mój błąd, sory.
arcan
Użytkownik
Użytkownik
Posty: 106
Rejestracja: 17 gru 2012, o 23:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 31 razy

[C++] Tablice dynamiczne

Post autor: arcan »

No to zamień to

Kod: Zaznacz cały

if(a[i]>0)
      {
         b[c]=a[i];
         c++;
      }
na to

Kod: Zaznacz cały

if(a[i]>0)
      {
         b[c]=a[i];
         cout<<b[c]<<" ";
         c++;
      }
Proki
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 13 mar 2013, o 21:04
Płeć: Mężczyzna
Lokalizacja: Białystok

[C++] Tablice dynamiczne

Post autor: Proki »

dziękuje bardzo :) Pomógł poleciał !

-- 13 mar 2013, o 22:32 --

Zadeklaruj liczbę uczniów w klasie,uwzględnij pola nazwisko,wiek,wzrost.Napisz funkcje umożliwiające:
-utworzenie listy
-dodanie danych do listy
-usunięcie z listy wskazanego ucznia
-posortowanie uczniów wg wzrostu
-usuniecie listy

to kolejne zadanie - napisałem program, ale nie sortuje mi wgl.

Kod: Zaznacz cały

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class ListaUczniow{
private:
	struct Uczen{
		string imie;
		string nazwisko;
		double wzrost;
		int wiek;
	};

	vector <Uczen> uczniowie;

	string ZamienNaMale(string wyraz){
		for(int i = 0; i < wyraz.length(); i++){
			wyraz[i] = tolower(wyraz[i]);
		}
		return wyraz;
	};
public:

	void DodajUcznia(){
		Uczen nowy;
		cout<<"---DODAWANIE UCZNIA---"<<endl;
		cout<<"Podaj imie:"<<endl;
		cin>>nowy.imie;
		cout<<"Podaj nazwisko:"<<endl;
		cin>>nowy.nazwisko;
		cout<<"Podaj wzrost:"<<endl;
		cin>>nowy.wzrost;
		cout<<"Podaj wiek:"<<endl;
		cin>>nowy.wiek;
		uczniowie.push_back(nowy);
	};

	void StworzListe(){
		uczniowie.clear();
		char wybor;
		do{
		system("cls");
		cout<<"---TWORZENIE LISTY UCZNIOW---"<<endl;
		cout<<"Dodac nowego ucznia?(t/n)"<<endl;	
		cin>>wybor;
		if(wybor == 't' || wybor == 'T') DodajUcznia();	
		}while(wybor != 'n' && wybor != 'N');
	};

	void UsunUcznia(){
		Uczen dokasacji;
		cout<<"---USOWANIE UCZNIA---"<<endl;
		cout<<"Podaj imie:"<<endl;
		cin>>dokasacji.imie;
		cout<<"Podaj nazwisko:"<<endl;
		cin>>dokasacji.nazwisko;
		for(int i = 0; i < uczniowie.size(); i++){
			if(ZamienNaMale(uczniowie[i].imie) == ZamienNaMale(dokasacji.imie) && ZamienNaMale(uczniowie[i].nazwisko) == ZamienNaMale(dokasacji.nazwisko) ){
				uczniowie.erase(uczniowie.begin() + i);
				break;
			}
		}
	};

	void UsunListe(){
		uczniowie.clear();
	};

	void SortujWgWzrostuOdMin()
{
int dalej=1;
	while (dalej)//sortuj az wszystko posortowane
	{
	dalej=0;
	for (int i=0;i<uczniowie.size()-1 ;i++ ) 
		{
		if(uczniowie[i+1].wzrost < uczniowie[i].wzrost) 
			{
			Uczen temp = uczniowie[i];
			uczniowie[i] = uczniowie[i+1];
			uczniowie[i+1] = temp;
			dalej=1;
			}
		}
	
	}
};

	void SortujWgWzrostuOdMax(){
		bool sortowane = true;
		while(sortowane){
			sortowane = false;
			for(int i = 0; i < uczniowie.size()-1; i++){
				if(uczniowie[i+1].wzrost > uczniowie[i].wzrost){
					Uczen temp = uczniowie[i];
					uczniowie[i] = uczniowie[i+1];
					uczniowie[i+1] = temp;
					sortowane = true;
				}
			}
		}
	};

	void SortujWgWiekuOdMin(){
		bool sortowane = true;
		while(sortowane){
			sortowane = false;
			for(int i = 0; i < uczniowie.size()-1; i++){
				if(uczniowie[i+1].wiek < uczniowie[i].wiek){
					Uczen temp = uczniowie[i];
					uczniowie[i] = uczniowie[i+1];
					uczniowie[i+1] = temp;
					sortowane = true;
				}
			}
		}
	};

	void SortujWgWiekuOdMax(){
		bool sortowane = true;
		while(sortowane){
			sortowane = false;
			for(int i = 0; i < uczniowie.size()-1; i++){
				if(uczniowie[i+1].wiek > uczniowie[i].wiek){
					Uczen temp = uczniowie[i];
					uczniowie[i] = uczniowie[i+1];
					uczniowie[i+1] = temp;
					sortowane = true;
				}
			}
		}
	};

	void WyswietlListe(){
		for(int i = 0; i < uczniowie.size(); i++){
			cout<<"---UCZEN NR "<<(i+1)<<":"<<endl;
			cout<<"IMIE:     "<<uczniowie[i].imie<<endl;
			cout<<"NAZWISKO: "<<uczniowie[i].nazwisko<<endl;
			cout<<"WIEK:     "<<uczniowie[i].wiek<<endl;
			cout<<"WZROST:   "<<uczniowie[i].wzrost<<endl<<endl;
		};
		cin.ignore();
		cin.get();
	};
};

int main(){
	ListaUczniow listauczniow;
	bool koniec = false;
	while(!koniec){
		system("cls");
		cout<<"----MENU----"<<endl;
		cout<<"0.Wyswietl liste uczniow\n"
			<<"1.Stworz liste od nowa\n"
			<<"2.Dodaj nowego ucznia\n"
			<<"3.Usun ucznia\n"
			<<"4.Sortuj od najmniejszego do najwiekszego\n"
			<<"5.Sortuj od najwiekszego do najmniejszego\n"
			<<"6.Sortuj od najmlodszego do najstarszego\n"
			<<"7.Sortuj od najstarszego do najmlodszego\n"
			<<"8.Usun Liste\n"
			<<"X.Wyjdz z programu\n";
		char wybor;
		cin>>wybor;
		switch(wybor){
		case '0': listauczniow.WyswietlListe(); break;
		case '1': listauczniow.StworzListe(); break;
		case '2': listauczniow.DodajUcznia(); break;
		case '3': listauczniow.UsunUcznia(); break;
		case '4': listauczniow.SortujWgWzrostuOdMin(); break;
		case '5': listauczniow.SortujWgWzrostuOdMax(); break;
		case '6': listauczniow.SortujWgWiekuOdMin(); break;
		case '7': listauczniow.SortujWgWiekuOdMax(); break;
		case '8': listauczniow.UsunListe(); break;
		case 'X': koniec = true; break;
		case 'x': koniec = true; break;
		}
	}
}
arcan
Użytkownik
Użytkownik
Posty: 106
Rejestracja: 17 gru 2012, o 23:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 31 razy

[C++] Tablice dynamiczne

Post autor: arcan »

Hmm, trochę za duży kod jak dla mnie do analizy, ale jak chcesz jak najszybciej posortować dodajesz po prostu biblioteke

Kod: Zaznacz cały

#include <algorithm>
dodajesz dane do wektora a pozniej sortujesz to co chcesz w tym wektorze za pomocą:

Kod: Zaznacz cały

sort(nazwa_wektora.begin(),nazwa_wektora.end();
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C++] Tablice dynamiczne

Post autor: witekkq »

Zastanów się nad tym kawałkiem Twojego kodu jeszcze.

Kod: Zaznacz cały

wybor != 'n' && wybor != 'N'
Warunkiem zakończenie sortowania nie jest jednokrotne przelecenie przez pętle for, zastanów się dlaczego. Wybierz sobie któreś

Ewentualnie możesz nie podmieniać struktur a wartości w nich zawarte

Kod: Zaznacz cały

swap(struktura1.a,struktura2.a);
ODPOWIEDZ