Podstawy programowania w C
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Podstawy programowania w C

AutorWiadomość
Temat założony przez niniejszego użytkownika
Podstawy programowania w C
» 2019-11-19 20:23:10
Cześć, mam takie podstawowe zadania do wykonania, pomożecie?
Zrobiłem kilka ale nie wiem czy dobrze.

C/C++
#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;
   
    wyswietlText( "Hello World\n" );
    a = b++;
    printf( "a=%d, b=%d", a, b );
    printf( "\n" );
    printf( "(3)\n" );
    wyswietlLiczbe1( 2 );
    wyswietlLiczbe2( & b );
   
    printf( "(4)\n" );
    wyswietlZnak( "Hello World", 5 );
    printf( "\n" );
    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" );
   
    suma( a, b );
   
    /*
        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? 0
           Dlaczego? Ponieważ nie ma przypisanej wartości
           **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.
        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.
    Pierwsza fuknkcja wyświetla liczbę którą podamy jako argument, natomiast w drugiej funkcji musimy wskazać zmienna która przechowuje liczbę.
        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.
        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)
   
        6.  Dodaj do programu funkcje suma, roznica, iloczyn, iloraz (Pamiętaj dodaj deklaracje w pliku main.h)
        7.  Dodaj do programu funkcje poleProstokata, moduloAprzezB
        8.  Dodaj do programu funkcje poleTrojkata
        9.  Dodaj do programu funkcje silniaLiczby
        10. Dodaj do programu funkcje potegaLiczby (a do potęgi b)
        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;
}


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;
}

Funkcje:
C/C++
#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 );
int16_t roznica( int8_t a, int8_t );
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
P-175615
» 2019-11-20 14:47:51
jeśli program kompiluje się
robi to czego autor oczekiwał (sprawdzaj dla różnych możliwych danych)

to w czym my możemy Ci pomóc ?

doprecyzuj co Cię niepokoi ?
 
P-175620
Temat założony przez niniejszego użytkownika
» 2019-11-20 19:01:51
Jak mam dodać tą funkcję i napisać tak by ona działała?
6.  Dodaj do programu funkcje suma, roznica, iloczyn, iloraz (Pamiętaj dodaj deklaracje w pliku main.h)

Napisałem coś takiego:
C/C++
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 );
}

Czy to ma sens i ten schemat będzie działał dla kolejnych zadań? (6,7,8,9)
P-175624
» 2019-11-20 19:19:24
Czy to ma sens
Nie ma. Wyraźnie określasz, że funkcja zwraca wartość typu int16_t, a żadna wartość nie jest zwracana. Taka forma funkcji sugeruje, że wyświetlanie wyniku ma używać funkcji, a nie się w niej zawierać.
C/C++
int16_t wynik = suma( a, b );

i ten schemat będzie działał dla kolejnych zadań? (6,7,8,9)
10 też.
P-175627
« 1 »
 Strona 1 z 1