C Wypisz najmniejsze i największe wartości w następujących typach zmiennych

0

Witam,

zajmuję się programowaniem dopiero od tego roku. Większość problemów, z którymi się spotykam staram się rozwiązywać sam.
Napotkałem na problem (tak wiem - to problem pewnie tylko dla mnie), z którym nie mogę sobie poradzić.

Treść zadania:

Napisz program, który wylicza najmniejszą i największą wartość w następujących typach:
unsigned short int
signed short int
signed int
unsigned int
signed long int
unsigned long int

Uwaga: zwrot „program, który wylicza” należy rozumieć dosłownie, tzn. obliczenia powinny odbywać się w jakieś pętli a nie przez odczytanie stałych zdefiniowanych w systemie.

Odpowiedzi są oczywiste bez liczenia, ale jak to obliczyć w C?
Proszę o wskazówki.

Pozdrawiam

0

Może się mylę, ale chyba był tutaj taki temat niedawno.

0

Ja podam rozwiązanie, przy założeniu że liczby są w kodzie U2 (czyli takie jakie są używane w praktycznie każdej architekturze komputera):

a = 0
b = 1
while (a < b) {
 a++;
 b++;
}
print "Najmniejsza to: " + b
print "Największa to: " + a
0

Rozmiar niektórych typów fundamentalnych zależy od architektury na jaką kompilujemy program. Np możemy liczyć ,że int będzie miał co najmniej 2 bajty. Maksymalna wartość jaką może przechowywać 2 bajtowy int to 2^16- 1. Możesz użyć operatora sizeof ale nie wiem czy o to ci chodzi.

0

Możesz popróbować z rzeczami w stylu (tutaj przykład dla Pascala, bo nie wiem jak działają wstawki assemblerowe w C++ :P):

{$ASMMODE INTEL}

Function getMax: LongWord; cdecl; assembler;
asm
 xor eax, eax
 sub eax, 1
end;

Begin
 Writeln(getMax());
End.
0

Bardzo dziękuję za pomoc ;)

Kod (może się komuś przyda):

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
        unsigned short usmin, usmax;
        short smin, smax;
        int imin, imax;
        unsigned uimin, uimax;
        long lmin, lmax;
        unsigned long ulmin, ulmax;
 
 
        for (usmax = 0, usmin = 1; usmax < usmin; usmax++, usmin++);
        printf ("unsigned short min: %hu max: %hu\n", usmin, usmax);
 
        for (smax = 0, smin = 1; smax < smin; smax++, smin++);
        printf ("short min: %hd max: %hd\n", smin, smax);
 
        for (imax = 0, imin = 1; imax < imin; imax++, imin++);
        printf ("int min: %d max: %d\n", imin, imax); 
 
        for (uimax = 0, uimin = 1; uimax < uimin; uimax++, uimin++);
        printf ("unisgned int min: %u max: %u\n", uimin, uimax);  
 
        for (lmax = 0, lmin = 1; lmax < lmin; lmax++, lmin++);
        printf ("long min: %ld max: %ld\n", lmin, lmax);  
 
        for (ulmax = 0, ulmin = 1; ulmax < ulmin; ulmax++, ulmin++);
        printf ("unisgned long min: %lu max: %lu\n", ulmin, ulmax);    
 
 
        system("pause");
}

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