Skocz do zawartości

Programowanie


xemi

Rekomendowane odpowiedzi

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.

pierwsza część jest prosta << to inaczej *2, a >> to inaczej /2. Musisz wykonać operację przesunięcia w lewo (<<) dwa razy, a w prawo (>>) trzy. W dziesiętnej to raczej nie problem bo używasz

cout<<w1<<" "<<w2;

natomiast jeśli chodzi o postać szesnastkową

cout.setf(ios::hex,ios::basefield);
if(w1<0)
  {
w1=w1*(-1);
       cout<<"-"<<w1;
  }
else
{
   cout<<w1;
}

i powtarzasz to dla w2

 

P.S zakładam że w1 i w2 są całkowite (int).

 

A teraz pytanie ode mnie. Piszę program w javie na pojemniki i ambitnie mam coś takiego:

package baza0;
import javax.swing.*;
import java.util.*;

class Osoba
{
   String imie="";
   String nazwisko="";
   float srednia=0;
   int indeks=0;

   public void Nadaj_imie(String imie_)
   {
       imie=imie_;
   }
   public String Podaj_imie()
   {
       return imie;
   }
   public void Nadaj_nazwisko(String nazw_)
   {
       nazwisko=nazw_;
   }
   public String Podaj_nazwisko()
   {
       return nazwisko;
   }
   public void Nadaj_srednia(float srednia_)
   {
       srednia=srednia_;
   }
   public float Podaj_srednia()
   {
       return srednia;
   }
   public void Nadaj_indeks(int indeks_)
   {
       indeks=indeks_;
   }
   public int Podaj_indeks()
   {
       return indeks;
   }
   public String OsobatoString()
   {
       String napis="";
       napis+="Imię: "+imie;
       napis+="\nNazwisko: "+nazwisko;
       napis+="\nŚrednia: "+srednia;
       napis+="\nNumer indeksu: "+indeks;
       return napis; //zwraca dane zamienione na napis
   }
   public boolean Szukaj(String S1,String S2)
   {
       return (imie.equals(S1)&&nazwisko.equals(S2));
   }
}  
class Tablica
{
   Osoba Dane[]=null;
   int ile=0;

   public boolean Pusta()
   {
       return ile==0;
   }
   public boolean Pelna()
   {
       return ile==Dane.length;
   }
   public int Podaj_ile()
   {
       return ile;
   }
   public void alokuj_tablice(int N)
   {
       ile=0;
       Dane=new Osoba[N]; //utworzenie tablicy
   }
   public void Wstaw(String imie_,String nazwisko_,float srednia_,int indeks_)
   {
       Osoba dana=new Osoba(); //tworzy aktualną osobę
       dana.Nadaj_imie(imie_);
       dana.Nadaj_nazwisko(nazwisko_);
       dana.Nadaj_srednia(srednia_);
       dana.Nadaj_indeks(indeks_);
       Dane[ile]=dana; //wstawia na odpowiednią pozycję wpisane dane
       ile++;
   }
   public Osoba Wyszukaj(String S1,String S2)
   {
     for(int i=0;i<ile;i++)
     {
         if (Dane[i].Szukaj(S1,S2))
         {
             return Dane[i];
         }
     }
     return null; //zwraca 0 jak nie znalazlo
   }
   public String TablicatoString()
   {
       String S="";
       for(int i=0;i<ile;i++)
       {
           S+=Dane[i].OsobatoString()+"\n";
       }
       return S; //zwraca zawartość całej tablicy
   }
}

public class Baza0
{
   protected Tablica tablica=new Tablica();
   public void Wyswietl()
   {
       if (tablica.Pusta())//jesli tablica nie istnieje, to nie można wyswietlac
       {
           JOptionPane.showMessageDialog(null,"Brak danych");
       }
       else
       {
           JOptionPane.showMessageDialog(null,tablica.TablicatoString());
       }
   }
   public void Wypelnij()
   {
       String S1,S2,S3,S4;
       S1=JOptionPane.showInputDialog(null,"Podaj rozmiar tablicy");
       int N=Integer.parseInt(S1);
       tablica.alokuj_tablice(N); //utworzenie tablicy
       while(!tablica.Pelna()) //jeśli tablica jest zapełniona, tak jest równe false
       {
           S1=JOptionPane.showInputDialog(null, "Podaj imię");
           S2=JOptionPane.showInputDialog(null, "Podaj nazwisko");
           S3=JOptionPane.showInputDialog(null, "Podaj średnią");
           S4=JOptionPane.showInputDialog(null, "Podaj nr indeksu");
           tablica.Wstaw(S1,S2,Float.parseFloat(S3),Integer.parseInt(S4));//dopisanie danych na końcu danych
       }
   }
   public void Wyszukaj()
   {
       if (tablica.Pusta())//jesli tablica nie istnieje, to nie można wyszukać
       {
           JOptionPane.showMessageDialog(null,"Brak danych");
       }
       else
       {
           String S1=JOptionPane.showInputDialog(null,"Podaj Imię");
           String S2=JOptionPane.showInputDialog(null,"Podaj Nazwisko");
           Osoba osoba=tablica.Wyszukaj(S1,S2);
           if(osoba!=null)
           {
               JOptionPane.showMessageDialog(null,osoba.OsobatoString());
           }
           else
           {
               JOptionPane.showMessageDialog(null,"Nic nie znalazłem!", "Błąd", 0);
           }
       }
   }

  static public void main(String args[])
  {  Baza0 baza=new Baza0(); //referencja do tablicy, która jest tworzona w opcji 1
     char a;
     String S;
     do
     {
         S=JOptionPane.showInputDialog(null, "Progam nie jest zabezpieczony przed\n" +
               "złym formatem danych\n i naciskaniem Cancel w okienkach dialogowych\n"+
               "Podaj wybor"+
               "\n1 - Wypelnij tablice,"+
               "\n2 - Wyswietl dane osob"+
               "\n3 - Wyszukaj osobe i wyswietl jej dane"+
               "\nk - Koniec programu");
         a=S.charAt(0);  //pobranie opcji
       switch(a)
       {
           case '1': baza.Wypelnij();
                       break;
           case '2': baza.Wyswietl();
                       break;
           case '3': baza.Wyszukaj();
                       break;
           case 'k': JOptionPane.showMessageDialog(null, "Koniec programu");
                       break;
           default : JOptionPane.showMessageDialog(null,"Zla opcja");
       }
   }while(a!='k');
   System.exit(0);
 }
}

Moje pytanie brzmi: Jeżeli dodam Osoba nastepny; do klasy Osoba i później jak będę usuwał powiedzmy element Tablica Dane[3]; wykonując:

Tablica Dane[2].nastepny=Dane[4];
Dane[3]=null;

, to czy ta tablica obiektów klasy Osoba będzie widziała nowy układ czy muszę zrobić to na samych referencjach do kolejnych obiektów lub przenosząc ostatni element i usuwając go?

Odnośnik do komentarza

tablice maja to do siebie ze sa statyczne, wiec moze byc z tym problem

proponowalbym zamiast tego uzyc listy wiazanej (LinkedList) ktora opiera sie wlasnie na samych referencjach: z dowolnego elementu w takiej liscie mozna sie odwolac tylko do poprzedniego i do nastepnego, dzieki czemu latwo potem odpowiednio zamieniac referencje przy usuwaniu elementu z listy

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

Ja mam problem z banalnymi zadaniami, tylko proszę się nie śmiać, dopero zaczynam zabawę z C++.

 

1)

Napisz funkcję sprawdzającą ile różnych liter 'a'-'z'

występuje więcej niż jeden raz w 200-elementowej tablicy znaków

podawanej jako dane wejściowe tej funkcji.

2)

Napisz funkcję, która sprawdzi czy tablica N liczb rzeczywistych

(podawana jako parametr funkcji) ma symetryczną zawartość

tzn. czy element pierwszy jest równy ostatniemu, drugi – przedostatniemu, itd.

3)

Napisz funkcję wczytującą znaki z klawiatury tak długo,

aż zostaną podane trzy kolejne znaki o takich samych kodach.

Odnośnik do komentarza

Problemik z obiektowym C++, kod:

// owoc.cpp

#include "owoc.h"
#include <iostream>

using namespace std;

Owoc::Owoc(int waga)
{
   this->waga=waga;
}

int Owoc::podaj_wage()
{
   return waga;
}

 

// owoc.h

#ifndef OWOC_H
#define OWOC_H
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

class Owoc
{
   protected:
   int waga;

   public:
   Owoc(int waga);
   int podaj_wage();
   virtual string przedstaw_sie() = 0;

};


#endif // OWOC_H

 

// jablko.cpp

#include "jablko.h"
#include <iostream>
#include <sstream>
#include <string>
using namespace std;

Jablko::Jablko(string imie) : Owoc (waga)
{
   this -> imie=imie;
}

string Jablko::przedstaw_sie()
{
   ostringstream nazwa;
   nazwa << imie;
   imie=nazwa.str();
   cout<<"Nazywam sie"<<imie<<endl;
}

 

// jablko.h

#ifndef JABLKO_H
#define JABLKO_H
#include "owoc.h"
#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>

using namespace std;

class Jablko : public Owoc
{
   private:
   string imie;

   public:
   Jablko(string imie, int waga);
   virtual string przedstaw_sie();

};

#endif // JABLKO_H

 

wyskakują mi błędy:

 

jablko.cpp:7: error: prototype for `Jablko::Jablko(std::string)' does not match any in class `Jablko'

jablko.h:12: error: candidates are: Jablko::Jablko(const Jablko&)

jablko.h:17: error: Jablko::Jablko(std::string, int)

 

edyta dodaje, że jeszcze może się przydać:

 

// kosz.h

#ifndef KOSZ_H
#define KOSZ_H

#include <vector>
#include "gruszka.h"
#include "jablko.h"

using namespace std;

class Kosz
{
   private:
   vector<Owoc *> owocki;

   public:
   Kosz(int ile_g);
   void start(int ile);
   ~Kosz();
};

#endif // KOSZ_H

 

// kosz.cpp

#include "kosz.h"
#include <iostream>

using namespace std;

Kosz::Kosz(int ile_g)
{
   owocki.push_back(new Jablko("Jablko"),5);
   for (int i=0; i<ile_g; i++)
   {
       owocki.push_back(new Gruszka("Gruszka"),1+i);
   }
}


void Kosz::start(int ile)
{
   for (int i=0; i<owocki.size(); i++)
   {
       przedstaw_sie(owocki[i]);
   }
}

 


// main.cpp

#include <cstdlib>
#include <iostream>
#include "kosz.h"
using namespace std;

int main(int argc, char *argv[])
{

   Kosz kosz(2);
   kosz.start(4);

system ("Pause");
}

Odnośnik do komentarza
  • 1 miesiąc później...
  • 3 miesiące później...
  • 4 tygodnie później...
  • 2 tygodnie później...

CREATE PROCEDURE dbo.PracownikMiejscowosc

@Par_Miejscowosc varchar(25) = '',

@Par_LiczbaN int

AS

BEGIN

SELECT TOP (@Par_LiczbaN) WITH TIES dbo.Pracownik.Miejscowosc, COUNT(*) AS [Liczba pracownikow]

FROM dbo.Pracownik

WHERE Miejscowosc LIKE '%' + @Par_Miejscowosc + '%'

GROUP BY Miejscowosc

ORDER BY [Liczba pracownikow] DESC, Miejscowosc ASC;

END

GO

 

Niech mi któs powie, czemu działa mi TOP, ale WITH TIES juz nie?

 

Execute dbo.PracownikMiejscowosc '','2'

GO

 

Powinno dac mi:

Wrocław 3

Trzebnica 1

Wieluń 1

 

a daje

Wrocław 3

Trzebinca 1

 

Any ajdijas?

Odnośnik do komentarza

Jestem absolutnie zielony, nawet nie wiem czy to pasuje do tematu ...

Czy ktoś z forum zajmuje się/umie wyjaśnić działanie LaTeX Editora? Przekracza mnie zmiana kodu w wyświetlany na ekranie tekst, obraz.

Po polsku jest taki podręcznik "Nie za krótkie wprowadzenie do systemu Latex" - Link, jak sam tytuł wskazuje trochę tam informacji jest ;]

Hmm, Latex Editor to konkretny program, edytor, w sumie dość prosty, korzystałem z niego kilka lat, więc pytaj o co dokładnie chodzi.

 

Edit:

Jeżeli to jeszcze aktualne ;)

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

zaczynam sie uczyc c++ bo bede w nim robic pewien projekt ;] niestety zatrzymalem sie przy probie implementacji listy z iteratorem...

 

w projekcie mam trzy pliki: lista.h, iterator.h i program.cpp - w lista.h jest definicja klasy odpowiadajacej za konstrukcje listy;

#ifndef DLISTA_H_
#define DLISTA_H_
#include "iteratorL.h"

template <class typ> class iteratorL;

template <class typ> class DLista
{
struct wezel
{
	typ * wsk;
	wezel * nastepca;
	wezel * poprzednik;
	wezel() : nastepca(NULL), poprzednik(NULL), wsk(NULL) {}
};

wezel * pierwszy;
wezel * ostatni;
int dlugosc;

public:
typedef iteratorL<typ> itLis;

DLista();
~DLista();
void wstaw(typ & obj, itLis & iter);
void wstaw(typ & obj, int nr);
void wstaw(typ & obj);
void usun(itLis & iter);
void usun(int nr);
int rozmiar() const;

// tu sa definicje tych funkcji...

private:
void daje_na_poczatek(wezel * nowy, itLis & iter);
void daje_w_srodku(wezel * nowy, itLis & iter);
void daje_na_koniec(wezel * nowy);
void usuwam_pierwszy(itLis & iter);
void usuwam_ostatni(itLis & iter);
void usuwam_ze_srodka(itLis & iter);
friend ostream & operator << (ostream & stru, DLista<typ> & x);
friend class iteratorL<typ>;

  // tu sa definicje tych funkcji...

};

 

iterator.h to klasa zawierajaca opis iteratora:

#ifndef ITERATORL_H_
#define ITERATORL_H_
#include "DLista.h"

template <class typ> class DLista;

template <class typ> class iteratorL
{
friend class DLista<typ>;

DLista<typ> & pojemnik;
DLista<typ> :: wezel * wybrany;

public:
// rozne ciekawe funkcje

};
#endif /* ITERATORL_H_ */

 

I jest problem z linijka:

	DLista<typ> :: wezel * wybrany;

 

mianowicie w pliku iterator.h kompilator nie widzi obiektu tej prywatnej struktury klasy lista.h; zastrzegam ze modyfikator dostepu 'public' nie pomogl :| jak sobie z takim problemem poradzic?

Odnośnik do komentarza

musisz zdaje się zainkludować jeszcze Dlista.h w pliku cpp, pomimo, że masz go w iterator.h, pamiętam, że miałem podobny problem, jak będę w domu (czyli koło 23) to zerknę w swój projekt, bo może jeszcze trzeba na coś zwrócić uwagę.

Ten zabieg nie pomoże, ponieważ błąd pojawia się w pliku nagłówkowym.

 

I jest problem z linijka:

DLista<typ> :: wezel * wybrany;

Proponuję przyzwyczaić się do opisywania wskaźników bez białego znaku po typie lub przed nazwą zmiennych (metoda formatowania C/C++).

Wydaje mi się, że problem stanowi odwołanie do węzła poprzez operator '::'. Spróbuj zamiast niego użyć:

DLista<typ>.wezel *wybrany;

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

takie pytanie: jak w c++ z wartosci piksela pobrac jego skladowe (r, g, b) ? potrzebuje tego do transformacji obrazu do skali szarosci przez usrednienie wartosci pikseli

 

probowalem czegos takiego z przesunieciem bitowym (gdzies wygooglane) ale nie chce dzialac

 

int Testing::grayscaleByAverage()
{
unsigned char* imgSrc = image->GetBits(); //zrodlo obrazu
unsigned char* processedImg = new unsigned char[image->GetSize()];
int widthImg = image->GetWidth();
int heightImg = image->GetHeight();
int red, green, blue, overall, average;
for(int y = 0; y < heightImg; y++) {
	for(int x = 0; x < widthImg; x++) {
		overall = imgSrc[x*y];
		red = (overall >> 16) & 0xff;
		green = (overall >> 8) & 0xff;
		blue = overall & 0xff;
		average = (red + green + blue) / 3;
		processedImg[x*y] = (unsigned char) blue;
	}
}
processedImage -> SetBits(processedImg);
return 0;
}

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

Pytanko z T-SQLa

 

SELECT Pracownik.Nazwisko + ' ' + Pracownik.Imie AS [Dane Pracownika], Pracownik.Ulica + ' ' + Pracownik.NrDomu + '/' + Pracownik.NrLokalu AS [DaneTeleadresowe]

FROM dbo.Pracownik

 

I teraz tak - jesli NRLokalu jest NULL, to i tak mi wypisze ten separator '/'. Jak wstawic IFa do tego selecta (wzglednie inne rozwiazanie), zeby w przypadku, kiedy Pracownik.NrLokalu = NULL zamiast '/' do stringa przekazywane było ''.

 

 

EDYTA (CASE WHEN (Pracownik.NrLokalu <> 0) THEN '/' ELSE '' END) załatwiło sprawe

Odnośnik do komentarza
  • 1 miesiąc później...

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ę...