Wątek przeniesiony 2016-04-22 12:57 z C/C++ przez ŁF.

największa z pięciu liczb bez użycia tablic

0

Witam. Mam pewien problem z zadaniem, a mianowicie nie mam pomyslu na algorytm lub moze nawet prosciej funkcje jesli sie bedzie dalo.

"Napisz program, który pobierze z klawiatury pięć liczb, a następnie wypisze na ekranie największą z nich."

Póki co zrobiłem tyle. Nie mam pomysły na ostatni fragment zadania.
Z góry dziękuję za podpowiedzi.

#include <stdio.h>
#include <stdlib.h>

int main()
{
float a, b, c, d, e, i;
printf("Podaj wartosc a:\n");
scanf("%f", &a);

printf("Podaj wartosc b:\n");
scanf("%f", &b);

printf("Podaj wartosc c:\n");
scanf("%f", &c);

printf("Podaj wartosc d:\n");
scanf("%f", &d);

printf("Podaj wartosc e:\n");
scanf("%f", &e);
4

A gdyby ten program miał wczytać 1000 liczb to byś utworzył 1000 zmiennych? :)

Użyj tablicy. NIC TU NIE BYŁO, ROZEJŚĆ SIĘ.

0

tylko właśnie to ma być nie na tablicach.. mamy zrobić to w podstawowy sposób

2

Ech, ze względu na dzisiejszy egzamin gimnazjalny najwyraźniej siadło mi czytanie ze zrozumieniem. Jeśli masz znaleźć wyłącznie liczbę największą - wystarczy Ci jedna zmienna ją trzymająca i jedna tymczasowa.

0

no, ale on ma 5 naraz porównać, to jak o chcesz na 3 zmiennych zrobić?

2

A gdzie jest w zadaniu napisane, że musisz stare wartości pamiętać? Musisz pamiętać tylko największą dotychczasową i obecnie wczytaną celem porównania.

0

prowadzacy nam tlumaczyl ze ma byc 5 liczb na raz, wiec chyba to nie przejdzie co mowisz niestety..

5

Albo macie głupiego prowadzącego albo źle zrozumiałeś polecenie.

0

No koleś jest dziwny.. W zeszycie mam dopisane. 5 różnych zmiennych wczytywanie ich na raz. Program ma porównać 5 wybrać największą wyświetlić na ekran, nie używać tablic..

1

W C++ to by było całkiem proste z boostem, a tak to się męcz z ifami. Ale naprawdę nie chce mi się wierzyć, że faktycznie masz takie zadanie :|

0

Bez tablicy to nawet niewygodnie pętle zrobić. :D

Możesz obejść zadanie i zrobić 4 puste zmienne i jedną tablice.

0

if(a > b || a > c || a > d || a > e)
printf("Najwieksza liczba to: %f\n", a);

/* if(b > a || b > c || b > d || b > e)
printf("Najwieksza liczba to: %f\n", b);

if(c > a ||  c > b || c > d || c > e)
    printf("Najwieksza liczba to: %f\n", c);

if(d > a || d > b || d > c || d > e)
    printf("Najwieksza liczba to: %f\n", d);

if(e > a || e > b || e > c || e > d)
    printf("Najwieksza liczba to: %f\n", e); */

return 0;

cos w ten desen? :(

5

W sumie możesz użyć variadic argument list

int max(int count, ...)
{
	int m = INT_MIN;
	va_list args;
	va_start(args, count);
	for(int i = 0; i < count; ++i){
		int el = va_arg(args, int);
		m = m > el ? m : el;
	}
	va_end(args);
	return m;
}

http://melpon.org/wandbox/permlink/JevqB67lLMlSjxpm

W rozwiązaniu z ifami liczba musi być większa od wszystkich pozostałych, nie od dowolnej pozostałej.

0

Nie mogę użyć takich funkcji. Jesteśmy po pierwszym rozdziale C i na bazie funkcji if oraz podstawowych działań mamy zrobić ten program. To co wstawiłem jest źle? Jak powinno to wyglądać?

1
Maxick napisał(a):

To co wstawiłem jest źle?
Nie sprawdziłeś?

3

Jest źle, wróć do pierwszego rozdziału i poczytaj o operatorach && i ||.

int a = 1, b = 2, c = 3;
if(b > a || b > c){
	printf("hehe b jest najwieksze, a przeciez nie jest\n");
}
int a = 1, b = 2, c = 3;
if(b > a && b > c){
	printf("b jest najwieksze\n");
}

zamianę na wersję 5 zmiennych pozostawię Tobie

2

Wersja dla ludzi po pierwszych zajęciach:

#include <stdio.h>

int main() 
{
    float maxv, a;
    int MAX_CNT = 5;
    int idx = 0;
    
    while(idx++ < MAX_CNT) {
      printf("Podaj wartosc nr %d:\n", idx);
      scanf("%f", &a);
      if (idx == 1) { 
        maxv = a;
      } else {
        maxv = (a > maxv?a:maxv);
      }  
    }
    
    printf("Największa wartość:%f\n", maxv);
}

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