←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Inny
c++ tablice

  • +
  • -
Index - zdjęcie Index 03.03.2016

Witam

 

Wczytuje sobie do tablicy dwuwymiarowej [100][3] liczby w ten sposób:

	for(i=0;i<3;i++)
    	    for(j=0;j<3;j++)
    	       odczyt>>tab[i][j];				
				

są to kolejno w wierszu bok prostokąta, bok2 prostokąta, pole prostokąta

 

Potrzebuje teraz znaleźć wszystkie prostokaty o najmniejszym polu. Następnie wynik wypisać w postaci bok prostokąta, bok2 prostokąta, pole prostokąta. Każdy w osobnych wierszach na końcu podać liczbę tych prostokątów o najmniejszym polu.

 

Próbowałem posortować kolumnę z polami ale wtedy tablica się miesza i nie można znaleźć boków.

Ma ktoś jakiś pomysł jak to zrobić?


Użytkownik Index edytował ten post 03.03.2016 18:57
Odpowiedz

  • +
  • -
Sniper Elite - zdjęcie Sniper Elite 03.03.2016

Napisz sobie funkcję sortującą, która dodatkowo będzie zamieniała pola z bokami prostokątów.

Odpowiedz

  • +
  • -
mastah7991 - zdjęcie mastah7991 03.03.2016

Witam

 

Wczytuje sobie do tablicy dwuwymiarowej [100][3] liczby w ten sposób:

	for(i=0;i<3;i++)
    	    for(j=0;j<3;j++)
    	       odczyt>>tab[i][j];				
				

są to kolejno w wierszu bok prostokąta, bok2 prostokąta, pole prostokąta

 

Potrzebuje teraz znaleźć wszystkie prostokaty o najmniejszym polu. Następnie wynik wypisać w postaci bok prostokąta, bok2 prostokąta, pole prostokąta. Każdy w osobnych wierszach na końcu podać liczbę tych prostokątów o najmniejszym polu.

 

Próbowałem posortować kolumnę z polami ale wtedy tablica się miesza i nie można znaleźć boków.

Ma ktoś jakiś pomysł jak to zrobić?

próbna matura ? xD

 

nie trzeba nawet sortować a raz wystarczy przejechać po tablicy.

na próbnej zrobiłem to mało optymalnie (lecz Ci podam co wymyśliłem bo to jest aż śmieszne )

lecisz po tabicy uznając pole prostokąta 0 za najmniejsze i wypisujesz je do pola.

dodatkowo tworzysz cos co będzie za licznik ile takich jest.

lecisz po nastepnej jesli

jest mniejsz to -> czyscisz plik wpisujesz nowe wartosci, licznik ustawiasz na 1;

jesli wieksze omijasz 

jesli takie samo -> dopisujesz do pliku licznik ++;

 

po zakonczeniu wypisujesz w nowej lini licznik;p

 

 

P.s lepiej użyj tablicy dynamicznej. zlicz ile masz wierwszy potem ustaw wielkosć tablicy na taką co Ci potrzeba.

pamiętaj że robisz program który ma działać ZAWSZE. teraz gdyby było np 3000 wpisów uzyskasz coś niewiarygodnego.

 

p.s2 sortowanie bąbelkowe bo raczej to byłoby użyte przy 1000 danych moze już długo działać dlatego moze moja wersja będzie nawet szybsza ( tyle ze plik czesto otwieramy z parametrem kasowanai)
 


Użytkownik mastah7991 edytował ten post 03.03.2016 21:50
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 03.03.2016

// Example program
#include <iostream>
#include <string>

int main()
{
    int tab[100][3];
    int najmniejszyTrojkat=0;
    int ile=0;
    /*ponieżej pętla do zapełnienia tablicy danymi,
    * zerowe oraz co 11 miejsce zapelniam takim samym mniejszym od reszty trójkątem
    * odkomentuj ją sobie jak potrzebujesz potestować*/
    /*
    tab[0][0]=3;
    tab[0][1]=4;
    tab[0][2]=12;
    for(int a=1;a<100;a++)
    {
        if(a%11==0)
        {
            tab[a][0]=3;
            tab[a][1]=4;
            tab[a][2]=12;
        }
        else
        {
            tab[a][0]=5;
            tab[a][1]=6;
            tab[a][2]=30;
        }
    }*/
    for(int i=1;i<100;i++) 
    {
        if(tab[i][2]<tab[najmniejszyTrojkat][2])
        {
            najmniejszyTrojkat=i;
            ile=1;
        }
        else if(tab[i][2]==tab[najmniejszyTrojkat][2])
        {
            ile++;
        }
    }
    for(int a=100;ile>0;a--)
    {
      if(tab[a][2]==tab[najmniejszyTrojkat][2])//trojkat o tym indexie jest rowny polem z najmniejszym
      {
          ile--;
        //Tu sobie wypisz 
        std::cout << "Najmniejszy trojkat, index w tablicy:" << a << " ,bok:" << tab[a][0] << " drugi bok:" << tab[a][1] << " pole:" << tab[a][2] <<"\n";
      }
    }
}
 

Użytkownik grankee edytował ten post 04.03.2016 00:06
Odpowiedz

  • +
  • -
Index - zdjęcie Index 06.03.2016

Poradziłem sobie już z pomocą innych no ale warto rozszerzyć temat chyba.

Posortować ostatnią kolumnę spoko ale jak posortować wiersze po ostatniej kolumnie?

Dlaczego program do matury musi działać zawsze? Nie mogę sobie zobaczyć w Excelu ile ma wierszy i pod te dane pisać kod?

tutaj moje rozwiązanie:

 


		        for(i=0;i<n;i++)
    			        for(j=0;j<3;j++)
    				       odczyt>>tab[i][j];
									
			int min=tab[0][2];	
			for(i=0;i<n;i++)
				if(tab[i][2]<min)
					min=tab[i][2];
						
			for (i=0; i<n; i++) 
        		        if(tab[i][2] == min){
         	   		wynik1<<tab[i][0]<<" "<< tab[i][1]<<" "<<min<<endl;
            		        ile++;
          	 	        }
           	wynik1<<ile;
    	

Użytkownik Index edytował ten post 06.03.2016 20:23
Odpowiedz