2 zadania z podręcznika

Problemy i ich rozwiązania w C++.
wojt12322

2 zadania z podręcznika

Post przez wojt12322 »

Witam, mam 2 zadania z podręcznika do informatyki które nie wiem jak ruszyć.. przepisze je i prosił bym o jakąś wskazówkę lub cokolwiek innego...

zad 1.
Napisz program, który znajduje wartości najczęściej występujące w jednowymiarowej tablicy 20-elementowej liczb całkowitych wylosowanych z zakresu <0.10>. Jesli takich liczb jest kilka, wówczas podaj wszystkie. natomiast jesli wszystkie wartości tablicy występują jednakowo często, to wyswietla się komunikat, ze w zbiorze nie ma wartości najczęsciej występujacych..


Potrafię napisać wszystko tylko nie potrafię jednej rzeczy, wypisać te liczby które najczęsciej występują, i liczbę ich wystąpień...

zad 2.

Napisz program zamiany i-tego wiersza z j-tą kolumną, gdzie i oraz j są odpowiednio numerami wiersza i kolumny, na których przecięciu znajduje się element maksymalny w tablicy kwadratowej o wymiarach n x n.

Tego programu to nie wiem jak zacząć....
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: 2 zadania z podręcznika

Post przez Morfidon »

Witam,

Odnośnie zadanie 1-szego:

Wystarczy stworzyć dodatkową tablicę tymczasową typu integer o rozmiarze 10 i odpowiednio inkrementować ją, jeżeli wystąpi jakaś liczba z przedziału od <0, do 10>

Odnośnie zadania 2-iego:

Narysuj sobie to na kartce i zobacz jak to wygląda dla np.dla tablicy kwadratowej o wymiarach (3x3). Na pewno musisz skorzystać naraz z 2 pętli oraz stworzyć tymczasową zmienną do zamiany wartości, aby nie stracić wartości aktualnych w zmiennych w tablicy. (lub też jest jeszcze inny sposób przy pomocy xor, ale to nie jest tutaj takie ważne).

Pozdrawiam ;)
wojt12322

Re: 2 zadania z podręcznika

Post przez wojt12322 »

Co do pierwszego zadania...

Code: Zaznacz cały

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void wyswietl(int tab[20])
{
    cout << "\n Wyswietlam elementy jakie zanajduja sie w tablicy\n";
    for (int i=0; i<20; i++)
    cout << tab[i] << " ";
    cout << endl << endl;
}
void wypelnij(int tab[19])
{
    cout << "Liczby z przedzialu <0.10> wylosowane: \n";
    for (int i=0; i<20; i++)
    tab[i] = rand()%11;
}
void zliczanie(int tab[19])
{
    int ilosc;
    for (int i=0; i<20; i++)
    {
        
        ilosc = 0;
        
        for (int j=0; j<20; j++)
        if (tab[i]==tab[j])
        {
            ilosc = ilosc+1;
        }
    
        cout << tab[i] << " wystepuje " << ilosc << " razy\n";
    }
}

    
    
int main()
{
    int tablica[19];
    srand(time(NULL));
    wypelnij(tablica);
    wyswietl(tablica);
    zliczanie(tablica);
    getchar();
    return 0;
}

Napisałem takie coś wypisuje mi ile razy liczba wystepuje w tablicy, ale nie wiem jak napisać zeby liczby się nie powtarzały, no i żeby wyświetlić też ta której liczba powtórzeń jest największa...
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: 2 zadania z podręcznika

Post przez Morfidon »

Code: Zaznacz cały

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

int il[11] = {0};

void wyswietl(int tab[20])
{
    cout << "\n Wyswietlam elementy jakie zanajduja sie w tablicy\n";
    for (int i=0; i<20; i++)
    cout << tab[i] << " ";
    cout << endl << endl;
}
void wypelnij(int tab[20])
{
    cout << "Liczby z przedzialu <0.10> wylosowane: \n";
    for (int i = 0; i < 20; i++)
      tab[i] = rand()%11;
}
void zliczanie(int tab[20])
{     
        for (int i = 0; i < 20; i++)
          il[tab[i]]++;
}

void sort(int *tab)
{
   for (int i = 0; i < 20 - 1; i++)
    {
     
      for (int j = 0; j < 20  - 1; j++)  
        if (tab[j] > tab[j+1])
        {
            tab[j] ^= tab[j+1];
            tab[j+1] ^= tab[j];
            tab[j] ^= tab[j+1];      
            /*
            lub
            int temp = tab[j];
            tab[j] = tab[j+1];
            tab[j+1] = temp;
            */                  
        }
      
    }
}
void total()
{
     for (int i = 0; i < 11; i++)
      cout << i << " wystepuje: " << il[i] << " razy" << endl;
}
int main()
{
    int tablica[20];
    srand(time(NULL));
    wypelnij(tablica);
    sort(&tablica[0]); // rownowazne sort(tablica); tak żeby lepiej się sprawdzało wizualnie ;)
    wyswietl(tablica);
    zliczanie(tablica);
    total();
    getchar();
    return 0;
}
Może tak?
wojt12322

Re: 2 zadania z podręcznika

Post przez wojt12322 »

oo widze ze odpisales ja napisałem to przed chwila tak:

Code: Zaznacz cały

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void wyswietl(int tab[20])
{
    cout << "\n Wyswietlam elementy jakie zanajduja sie w tablicy\n";
    for (int i=0; i<20; i++)
    cout << tab[i] << " ";
    cout << endl << endl;
}
void wypelnij(int tab[20])
{
    cout << "Liczby z przedzialu <0.10> wylosowane: \n";
    for (int i=0; i<20; i++)
    tab[i] = rand()%11;
}
void zliczanie(int tab[20])
{
    int wynik[11];

    

    for (int i=0; i<11; i++)
    {
	wynik[i]=0;
    }

   

    for (int i=0; i<20; i++)
    {
	wynik[tab[i]]++;
    }

    cout << endl << endl; 

    int licznik=0;
    int najwieksza=0;

    for(int i=20; i>=0; i--)
    {
	for(int k=0; k<11; k++){

	    if(wynik[k]==i){
		cout << "Najwieksza liczba to " << k << " wystapila " << i << " razy " << endl;
		najwieksza=1;
		licznik++;
	    }
	    
	}
	if(najwieksza==1)
	{
	    if(licznik>1)
	    {
	    cout << licznik << " liczby maja maksymalna wartosc" << endl;
	    }else{
	    cout << "1 liczba ma maksymalna wartosc" << endl;
	    }
	    break;
	}
    }


}

    
    
int main()
{
    int tablica[19];
    srand(time(NULL));
    wypelnij(tablica);
    wyswietl(tablica);
    zliczanie(tablica);
    getchar();
    return 0;
}
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: 2 zadania z podręcznika

Post przez Morfidon »

Zawsze odpisuje ;) no fajnie, widzę, że dokończyłeś :)

Taka sugestia, staraj się pisać czytelnie i estetycznie. Wiem, że to piszesz dla siebie etc., ale naprawdę później to wchodzi już w nawyk i nie tracisz więcej czasu, a programy są czytelne i narażasz się na mniej błędów nie tylko u siebie, ale także pracując z innymi. ;)

Poprawiłem funkcję zliczanie, aby była czytelniejsza i zobacz różnicę:

Code: Zaznacz cały

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void wyswietl(int tab[20])
{
    cout << "\n Wyswietlam elementy jakie zanajduja sie w tablicy\n";
    for (int i=0; i<20; i++)
    cout << tab[i] << " ";
    cout << endl << endl;
}
void wypelnij(int tab[20])
{
    cout << "Liczby z przedzialu <0.10> wylosowane: \n";
    for (int i=0; i<20; i++)
    tab[i] = rand()%11;
}
void zliczanie(int tab[20])
{
    int wynik[11] = {0};

    for (int i = 0; i < 20; i++)
      wynik[tab[i]]++;
      
    cout << endl << endl; 

    int licznik = 0;
    int najwieksza = 0;

    for(int i = 20; i >= 0; i--)
    {
      for(int k = 0; k < 11; k++)
      {
          if(wynik[k] == i)
          {
            cout << "Najwieksza liczba to " << k << " wystapila " << i << " razy " << endl;
            najwieksza = 1;
            licznik++;
          }
      }
      
      if(najwieksza == 1)
      {
          if(licznik > 1)
            cout << licznik << " liczby maja maksymalna wartosc" << endl;        
          else
            cout << "1 liczba ma maksymalna wartosc" << endl;
         
          break;
      }
    }


}

    
    
int main()
{
    int tablica[20];
    srand(time(NULL));
    wypelnij(tablica);
    wyswietl(tablica);
    zliczanie(tablica);
    getchar();
    return 0;
}

Aha i tablica 20 elementowa to tab[20], nie tab[19];


Pozdrawiam ;)
Post Reply