Laboratorium 4 – wskaźniki

#include<iostream>
#include<iomanip>
#include<locale>
#include<climits>
using namespace std;

const size_t N = 3;
typedef unsigned char byte; //definicja nowego typu

void wczytaj(float* t, const size_t n)
{	for (float* p = t; p < t + n; p++)
	{	cout << "t[" << p - t << "]= ";
		cin >> *p;
	}
}


int main(void)
{	double tablica[N] = { 0.0 };
	float* tf = nullptr;

	wczytaj((float*)tablica, N);
	cout.width(8);
	cout << setprecision(3) << fixed << tablica[1] << ' ';
	cout << tablica[2] << " " << cout.width() << endl;

	tf = (float*)tablica;
	cout << setprecision(3) << fixed << tf[1] << ' ';
	cout << tf[2] << " " << cout.width() << endl;

	//wyświetlenie bajtów
	for (byte* pi = (byte*)tablica; pi < (byte*)(tablica + 1); pi++)
	{	cout << setbase(2);
		cout << (int)*pi << ' ';
		//printf("%x ", *pi);
	}
	return 0;
}
  1. Ćwiczenie wykorzystania wskaźników jako alternatywnej metody dostępu do zmiennych tworzonych przez kompilator tzn. zmiennych globalnych i lokalnych.
    ( Patrz przykład z wykładu nr 5 strona nr 3 )

    – Utwórz zmienne różnych typu: char, int, long, …
    – Napisz instrukcje zapisu wartości do jednej zmiennej (np. typu long) za pomocą adresu innej zmiennej (tego samego typu lub innego)
    – Kontrolnie wyświetlaj zawartości zmiennych po dokonaniu tych zapisów

    Dodatkowo można napisać fragment programu, który wyświetli zawartości poszczególnych bajtów zajmowanych w pamięci przez w/w zmienne.
  2. Ćwiczenie w wykorzystaniu zapisu wskaźnikowego jako metody dostępu do elementów tablicy.

    Napisz funkcje wykonujące podstawowe operacje na tablicach (tzn. wczytywanie, wyświetlanie, liczenie sredniej, max, min) ale W ZAPISIE WSKAŹNIKOWYM !
  3. Łańcuchy – Napisz funkcje:
       int moje_strlen( char* );
       char* moje_strupr(char* );
       char* moje_strcpy( char*, char* )

    realizujące te same operacje co standardowe funkcje strlen, strupr, strcpy z biblioteki <string.h>.
  4. Napisz funkcję:

    void str_zamien( char* tekst, char* stary_wzorzec, char* nowy_wzorzec);

    realizującą operację zamiany w podanym tekście starego wzorca na nowy np.
    <tekst> == „ala ma kota a ola ma asa”
    <stary_wzorzec> == „ma”
    <nowy_wzorzec> == „miala”
    rezultat zamiany: „ala miala kota a ola miala asa”

    (Osoby mniej wprawne w programowaniu mogą napisać uproszczoną wersję tej funkcji, zamieniającą tylko wzorce o tej samej długości. Wówczas nie ma potrzeby „rozsuwania” lub „zsuwania” starego tekstu) 
  5. Napisz funkcję formatującą tekst poprzez usunięcie wszystkich początkowych i końcowych spacji z łańcucha zadanego jako parametr wejściowy tej funkcji.
  6. Napisz funkcję formatującą zadany tekst w taki sposób aby kolejne wyrazy lub liczby były pooddzielane dokładnie pojedynczymi spacjami.
    Np. zamienającą tekst ”AAA   BBBBB     C     DD     EEEE       ” na ”AAA BBBBB C DD EEEE”
  7. Napisz funkcję wyznaczającą sumę wartości liczb całkowitych przechowywanych w pamięci komputera w postaci tekstowej (np. char* liczby = ”12   -3    64    2     78”; )
  8. Napisz funkcję, która odfiltrowuje (usuwa) z zadanej dynamicznej tablicy liczb rzeczywistych wszystkie elementy o wartości ujemnej. Parametrem wejściowym tej funkcji powinien być początkowy adres tablicy oraz jej rozmiar. Efektem końcowym powinien być adres tablicy wynikowej (zawierającej tylko liczby nieujemne) oraz jej rozmiar (najczęściej różny od rozmiaru tablicy wejściowej). Uwzględnij przypadek, gdy tablica wejściowa zawiera tylko liczby ujemne!
  9. Napisz program pozwalający przechowywać w pamięci komputera dowolnej wielkości tablicę tekstów. Oprogramuj operacje: wczytywania, wyświetlania, wyszukiwania i sortowania tekstów przechowywanych w tej tablicy.