Zagnieżdżone pętle, używanie liter (znaków), tablice

Uwaga: za tydzień będzie 30 min. sprawdzian (3 zadania, będzie można korzystać z komputera) Zakres sparwdzianu to zapis,odczyt z klawiatury, oraz pętle while i for. NIE obowiązują jeszcze tablice i znaki (będą na następnym sprawdzianie)

Zad 1. Zagnieżdżone pętle - równoległobok

Napisz program ktory wypisuje równoległobok składający się ze znaku gwiazdka '*'. Wyskość równoległoboku jest mierzona liczbą wierszy h i ma być daną wejściową programu, druga wejściowa daną programu powinna być jego długość podstawy a. Uwaga! ostatni wiersz równolegloboku musi stykać się z lewym rogiem ekranu, jak na rysunku:

    
   *****
  *****
 *****
*****

tutaj wysokość to 4 a długość boku to 5

Wskazówka: aby wypisać znak gwiazdki (lub inną literę) piszemy %c w funkcji printf:

char znak;
znak = ' * '; // tutaj koniecznie _pojedynczy_ cudzysłów
printf("%c",znak);



Jak niektórzy z Panstwa zauważyli, naturalnie jest użyć tutaj 3 razy petlę while, ale tylko dwie z nich beda zagnieżdżone w sobie: zewnętrzna petla while wiersze, a dwie wewnetrzne piszą znaki w odpowiednich kolumnach : najpierw piszemy troche spacji, potem troche gwiazdek czyli tak wyglada mozliwy szkielet w pseudokodzie:

while ( nie wypisane wiersze){

wypełnij  kolejny wiersz jak nastepuje:

while(nie wypisane znaki spacji){
wypisz odp. ilość spacji...}

while (nie wypisane znaki *){
wypisz odp. ilość gwiazdek...}

} 

Zad 2. Wykorzystanie znaków oraz tablic

Napisz program, który sprawdza czy dana litera jest w tablicy. Jeśli jest, program wypisuje ile jest tych liter i wypisuje całą tablicę na ekran (użyj pętli for). Aby wpisać do tablicy słowo napisz:

char tab[11]={'a','l','a',' ','m','a',' ','k','o','t','a'};
Uwaga1: tablice numeruje się od zera: w tablicy tab powyżej, tab[0] to pierwszy element tablicy, a tab[10] ostatni. tablice możesz nazywać jak chcesz, nie koniecznie "tab".
Uwaga2 Znaki są typu char jak to widać powyżej.

Użyj instrukcji warunkowej if, pamiętaj, że aby sprawdzić czy dwie zmienne są równe, piszemy _podówjny_ znak równości:

if (tab[i] == szuk_lit) {
printf("jest");
}

Aby wypisać tablicę na ekran użyj pętli for:

for(i=0;i<11;i++){
prinf("%c",tab[i]);
}

Aby przypisać w i-tym miejscu tablicy wartość, piszemy na przykład tak:

char tab2[11];
char znak = 'a';
i=3;
tab[i]=znak;

Zad 3. Gra w wisielca

Zmodyfikuj program z zad 2 tak aby wykonywał się w pętli, wczytując kolejną literę za pomocą scanf:

char znak;
scanf("%c",&znak);

dopóki ktoś nie odgadnie wszystkich liter. Po każdym odgadnięciu litery, program powininen wypisać już znalezione litery a w miejsce nieznalezionych powinien wypisać znak podkreślenia. Oto przykład działania dla tablicy powyżej:

Zgadnij literę 
a
Jest: 
a_a__a____a
Zgdanij literę
w 
Nie ma
Zgdanij literę

... i tak dalej

Możesz w tym calu powołać tablicę tab2 którą wypełnisz (używając pętli for) znakiem podkreślenia: '-'

for(i=0;i<11; i++ ) tab2[i]=' - ';

Następnie będziesz wpisywał zgdaniętą literę w odpowiednie do tej tablicy i wypisywał ją na ekran.

Zad 4. Zagnieżdżone i nie zagnieżdżone pętle - Trójkąt liczb

Napisz program który wczytuje liczbę n, i następnie drukuje kolejne liczby naturalne od 1 do n ustawione w trójkąt. Dla n=12 powinno być mniej więcej tak:

        1
      2   3
    4   5   6	
  7   8   9  10
11 12

Wskazówka1 : pełny trójkąt o wysokości k zawiera k(k+1)/2 liczb Aby wiedzieć ile wpisać spacji S w pierwszym wierszu przed liczbą 1, dla wczytanego n znajdź największe k które spełnia n>= k(k+1)/2. Wtedy S = (k+1)/2 jeśli n != k(k+1)/2 oraz S=k/2 w przeciwnym wypadku. W każdym wierszu zmniejszaj liczbę wypisanych spacji o 1
Wskazówka 2 : Na każdą liczbę przeznacz 3 znaki wpisując %3d w printf
wtedy trzeba wypisać 3S spacji oraz po każdej liczbie dodać 3 spacje