Zadanie z podstaw [C]

0

Cześć,

Moglibyście mi pomóc w rozwiązaniu tych zadań na podstawie tych funkcji?
Coś tam rozwiązałem ale nie wiem czy dobrze a kilku zadań nie jestem w stanie rozwiązać.

Funkcje:

#ifndef MAIN_H_
#define MAIN_H_
#include "stdbool.h"

void wyswietlLiczbe1(int32_t liczba);
void wyswietlLiczbe2(int32_t *wsk_liczba);
void wyswietlText(char *text);
void wyswietlZnak(char *text, uint8_t index);
bool porownajZnaki(char *txt1, uint8_t idx1, char *txt2, uint8_t idx2);

int16_t suma(int8_t a, int8_t b);
int16_t roznica(int8_t a, int8_t b);
int16_t iloczyn(uint8_t a, uint8_t b);
int16_t iloraz(uint8_t a, uint8_t b);

uint32_t poleProstokata(uint8_t a, uint8_t b);
uint32_t moduloAprzezB(uint16_t a, uint8_t b);
float poleTrojkata(uint8_t a, uint8_t h);
uint32_t silniaLiczby(uint8_t a);
uint32_t potegaLiczby(uint8_t a, uint8_t b);
uint8_t liczbaPowtorzenZnaku(char *text, char znak);
uint8_t znajdzZnak(char *text, char znak);


#endif // MAIN_H

Zadania:

#include <stdio.h>
#include <stdlib.h>
#include "stdint.h"
#include "main.h"

int main(int argc, char ** argv)
{
    //Wykonaj polecenia zgodnie z ponizszymi komentarzami
    int a;
    int b = 0;
    printf("(1)(2)\n");
    wyswietlText("Hello World\n");
    a = b++;
    printf("a=%d, b=%d", a, b);
    printf("\n");
    printf("\n");

    /*
    1. Ustaw breakpoint na linii 12 (W programie CodeBlocks - kliknij dwukrotnie po prawej stronie od numeru linii).
       Uruchom program w trybie debug (czerwona strzalka).
       Jaka wartosc ma zmienna a? 8
        Dlaczego? Ponieważ jest ona 8 bitowa
       **Aby podejrzec wartosci zmiennych w trybie debug nalezy otworzyc okno "Watches"
       **Znajduje się ono w zakladce Debug->Debugging windows->Watches
       Przejdz do linii 14 przyciskiem "Next Line". Obserwuj wartosci zmiennych a i b.
       Wartości zmieniają się na a=0 i b=1 - wykonanie działania.

    2. W linii 12 : Zamien funkcje printf na funkcje wyswietlText. Pamietaj o deklaracji funkcji w pliku main.h

    3. Skorzystaj w programie z funkcji wyswietlLiczbe1 oraz wyswietlLiczbe2.
		Podaj różnicę pomiędzy argumentem obu tych funkcji - wyjaśnij różnice.
		wyswietlLiczbe1 - wyswietla liczbę. którą wpiszemy.
		wyswietlLiczbe2 - wyswietla liczbe z wskazanej zmiennej.
*/
    printf("(3)\n");
    wyswietlLiczbe1(10);
    wyswietlLiczbe2(&a);
    printf("\n");
/*

    4. Wyswietl znak numer 5 z tekstu "Hello World" przy wykorzystaniu funkcji wyswietlZnak
	   Opisz działanie tej funkcji (wypisz wszystkie zmienne i argumenty - podaj ich typ oraz opisz co zawierają).
	   Funkcja tak wypisuje dany numer znaku w podanym ciągu znaków.
	   index(uint8_t) - zawiera numer znaku który podaliśmy do pokazania.
	   sizeof(char) - długość wpisanego ciągu znaków
	   c (char) - znak którego szukamy.
*/
    printf("(4)\n");
    wyswietlZnak("Hello World",5);
    printf("\n");

/*
    5. Stwórz dwie tablice znakow "To jest pierwszy text" oraz "Moja druga linijka"
       Porównaj znaki numer 2 w obu tablicach przy wykorzystaniu funkcji porownajZnaki
       Porónaj znaki numer 6 w obu tablicach
       Wynik porownania wyswietl w formie tekstowej
       (Deklaracje funkcji znajduja sie w pliku main.h)
*/

printf("(5)\n");
char tab1[] = {"To jest pierwszy text"};
char tab2[] = {"Moja druga linijka"};
char wynik1 = porownajZnaki(tab1,2,tab2,2);
char wynik2 = porownajZnaki(tab1,6,tab2,6);
 if(wynik1 == true)
    {
        printf("Prawda");
    }
    else
    {
        printf("Fałsz");
    }
    printf("\n");
if(wynik2 == true)
    {
        printf("Prawda");
    }
    else
    {
        printf("Falsz");
    }
    printf("\n");
        printf("\n");

/*
    6.  Dodaj do programu funkcje suma, roznica, iloczyn, iloraz (Pamiętaj dodaj deklaracje w pliku main.h)
*/
printf("(6)\n");
suma(4,1);
roznica(5,2);
iloczyn(25,2);
iloraz(10,5);
printf("\n");
/*
    7.  Dodaj do programu funkcje poleProstokata, moduloAprzezB
*/
printf("(7)\n");
poleProstokata(4,5);
moduloAprzezB(4,4);
printf("\n");
/*
    8.  Dodaj do programu funkcje poleTrojkata
*/
printf("(8)\n");
poleTrojkata(4,1);
printf("\n");
/*
    9.  Dodaj do programu funkcje silniaLiczby
*/
printf("(9)\n");
silniaLiczby(4);
printf("\n");
/*
    10. Dodaj do programu funkcje potegaLiczby (a do potęgi b)
*/
printf("(10)\n");
potegaLiczby(4,4);
printf("\n");
/*
    11. Dodaj do programu funkcje liczbaPowtorzenZnaku (funkcja zwraca ilość powtórzeń znaku 'znak' w tablicy znakow 'text')
*/

/*
    12. Dodaj do programu funkcje znajdzZnak (funkcja szuka pierwszego wystąpienia znaku 'znak' w tablicy znakow 'text' i zwraca położenie tego znaku w tablicy.
    Umiesc spakowany projekt na platformie jako rozwiazania na zadanie numer 2.
*/
    system("pause");

    return 0;
}

uint8_t liczbaPowtorzenZnaku(char *text, char znak)
{

}

uint32_t potegaLiczby(uint8_t a, uint8_t b)
{
    printf("%d\n", a*b);

}

uint32_t silniaLiczby(uint8_t a)
{
    printf("%d\n", a);
}

float poleTrojkata(uint8_t a, uint8_t h)
{
    printf("%d\n",a*h);
}


uint32_t moduloAprzezB(uint16_t a, uint8_t b)
{
    printf("%d\n",a/b);
}

uint32_t poleProstokata(uint8_t a, uint8_t b)
{
    printf("%d\n",a*b);
}

int16_t iloraz(uint8_t a, uint8_t b)
{
    printf("%d\n",a/b);
}

int16_t roznica(int8_t a, int8_t b)
{
    printf("%d\n",a-b);
}

int16_t suma(int8_t a, int8_t b)
{
    printf("%d\n",a+b);
}

int16_t iloczyn(uint8_t a, uint8_t b)
{
    printf ("%d\n",a*b);
}


void wyswietlText(char *text)
{
    printf("%s", text);
}

void wyswietlLiczbe1(int32_t liczba)
{
    printf("%d\n", liczba);
}

void wyswietlLiczbe2(int32_t *wsk_liczba)
{
    printf("%d\n", *wsk_liczba);
}

void wyswietlZnak(char *text, uint8_t index)
{
    char *c = text + (index - 1) * sizeof(char) ;
    printf("Znak numer %d to : %c\n", index, *c);
}

bool porownajZnaki(char *txt1, uint8_t idx1, char *txt2, uint8_t idx2)
{
    bool wynik = false;
    char *c1 = txt1 + (idx1 - 1) * sizeof(char) ;
    char *c2 = txt2 + (idx2 - 1) * sizeof(char) ;

    if(*c1 == *c2)
    {
        wynik = true;
    }
    else
    {
        wynik = false;
    }
    return wynik;
}

2
uint32_t moduloAprzezB(uint16_t a, uint8_t b)
{
    printf("%d\n",a/b);
}

float poleTrojkata(uint8_t a, uint8_t h)
{
    printf("%d\n",a*h);
}

uint32_t moduloAprzezB(uint16_t a, uint8_t b)
{
    printf("%d\n",a/b);
}

W ogóle Testowałeś te funkcje? Uważasz, że są OK? Takie łatwe rzeczy jak powyższe Popraw sam, a wrzuć coś trudniejszego na forum, maks 2 problemy na post.

0
  1. Ustaw breakpoint na linii 12 (W programie CodeBlocks - kliknij dwukrotnie po prawej stronie od numeru linii).
    Uruchom program w trybie debug (czerwona strzalka).
    Jaka wartosc ma zmienna a? 8
    Dlaczego? Ponieważ jest ona 8 bitowa

Uruchom kilkukrotnie program i obserwuj wartość zmiennej a.
Ona nie jest ośmiobitowa.

0

title

0

Generalnie w C niezaincjowana zmienna lokalna ma jakies smieci w srodku. Byc moze przejmuje ze stosu wartosc 8 bo poprzednio zaalokowane dane mialy taka wlasnosc ale w ogolnosci cos losowego powinno byc

Jako uzupelnienie dodam, ze zmienne globalne/statyczne sa juz inicjowane zerem

1 użytkowników online, w tym zalogowanych: 0, gości: 1