Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C - program zmieniający dużą literę na małą

mapcel 27 Paź 2013 21:13 3504 9
  • #1 27 Paź 2013 21:13
    mapcel
    Poziom 6  

    Witam, potrzebuję program w języku C, który:
    - wczytuje znak z klawiatury,
    - gdy wczytanym znakiem jest duża litera alfabetu łacińskiego wówczas zamienia ją na małą literę, w przeciwnym przypadku wczytuje liczbę rzeczywistą z klawiatury i oblicza wartość pewnego wyrażenia.

    Mam problem ze sprawdzeniem, czy dana litera jest duża (i później ewentualną zamianą na małą literę).
    Próbowałem użyć funkcję isupper, jednak kompletnie mi to nie wychodzi. Prosiłbym o pomoc :)

    -1 9
  • #4 27 Paź 2013 21:44
    mapcel
    Poziom 6  

    Dżyszla, Mógłbyś mi napisać ten program? Jestem początkujący i nie za bardzo mam pojęcie jak się do tego zabrać.

    -1
  • #6 28 Paź 2013 06:51
    mapcel
    Poziom 6  

    Dzięki, na początku potrzebuje jeszcze porównanie liter, w kolejnym kroku jest ewentualna zamiana.

    -1
  • #7 28 Paź 2013 21:32
    mapcel
    Poziom 6  

    Spróbowałem swoich sił, jednak jest problem z pętlą, jakby ktoś mógł poprawić ten program, byłbym wdzięczny.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    -1
  • Pomocny post
    #8 28 Paź 2013 22:28
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Wiersz z if:
    Przede wszystkim, zmienna x jest zmienną typu float (zmiennoprzecinkowa) a znaki reprezentowane są przez liczby typu int, zatem x powinno być zadeklarowane jako int. Pamiętaj, że przy operacjach arytmetycznych, typ char rozszerzony jest "z urzędu" do typu int a po ich wykonaniu przykracany do typu char!
    Dalej: w tym samym wierszu umieściłeś wartości liczbowe w apostrofach. To drugi błąd. W apostrofach powinno umieszczać się znaki np 'A', '6' itd gdyż wtedy zostaną przetworzone na wartości typu int np 'A' = 65
    Wiersz z if powinien więc wyglądać tak:
    if (x >= 'A' && x <= 'Z') x += ' '; /* W wyrażeniu x = ' ' pomiędzy apostrofami jest umieszczona spacja */

    Dalej: do operacji na znakach są stosowane funkcje bądź makra umieszczone w pliku ctype.h
    są to np:
    isalpha(c) - bada czy c jest literą
    isdigit(c) - bada, czy znak jest cyfrą
    isspace(c) Uwaga, można się spotkać z iswhite(c), bada, czy c jest tzw "białym znakiem" czyli spacją, tabulacją, nowy wiersz, nowa strona itp
    isalnum(c) - bada czy c jest literą lub cyfrą
    isupper(c) - bada czy c jest dużą literą
    islower(c) - jak wyżej ale czy małą literą
    toupper(c) - jeżeli c jest małą literą to konwertuje c do dużel litery w przeciwnym wypadku zostawia
    tolower(c) jak wyżej ale do małej litery itd. Przyjrzyj się temu plikowi bliżej.

    zatem, można napisać tak:
    if (isalpha((int) x))
    x = isupper(x) ? tolower(x) : x;

    W dalszej części wykonywane są operacje potęgowania - funkcja pow(x, 2). Jej argumenty są typu float (zmienno przecinkowe a x jest typu int. Zatem przy przekazaniu x do funkcji pow należy dokonać konwersji typu int na typ float Robi sę to w sposób następujący:
    pow((float) x, 2.0), chociaż prawdopodobnie kompilator automatycznie dokona tejże konwersji. Konwersja typu nazywana jest też "rzutowaniem typu".
    Rzutowania dokonuje się poprzez poprzedzenie nazwy zmiennej nazwą typu umieszczoną w nawiasach okrągłych np:
    y = (float) x;

    1
  • Pomocny post
    #9 28 Paź 2013 22:48
    23844
    Użytkownik usunął konto  
  • #10 29 Paź 2013 14:45
    mapcel
    Poziom 6  

    Dzięki za pomoc. Program działa :)

    0