Skocz do zawartości

  •  
  • Mini kompendium
  • MimeTeX
  • Regulamin

Zdjęcie

Funkcja zwracająca dwie wartości

STUDIA

  • Nie możesz napisać tematu
  • Zaloguj się aby odpowiedzieć
5 odpowiedzi w tym temacie

#1 iNf111

iNf111

    Pierwsza pochodna

  • Użytkownik
  • 87 postów
0
Neutralny
  • Płeć:Mężczyzna

Napisano 19.12.2013 - 18:22

Mam do napisania program w ktorym deklaruje 2 tablice i funkcja ma mi zwrocic maksimum w tych tablicach i pozycje tego maxa.

 

Jak zrobic zeby funkcja zwrocila mi dwie wartosci tj. maksimum i pozycje,

moj program:

 

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include <iomanip>



int funkcja(float tab[],int rozmiar)
{
    int i,max,poz;
    
    max=tab[0];
    poz=0;
    
    for(i=0; i<rozmiar; i++)
    {
          
            if (tab[i]>max)
             {
                 max=tab[i];
                 poz=i+1;
             }
             
   }
 
    return max;
   
  }   

int main()
{
    int wielkosc;
    float tab1[15]={-1,2,3, 24,-30,100,50,2,40,0,-5,12,101,204,312};
                    
    float tab2[5]={89,45,-2,-50,-46};
    
    wielkosc=15;
    printf("Maksimum wynosi: %i \n",funkcja(tab1,wielkosc));
    
    wielkosc=5;
    printf("Maksimum wynosi: %i \n",funkcja(tab2,wielkosc));
    
    
getchar();
}


  • 0

Afroman

    Kombinator

  • Użytkownik
3
  • Płeć:Kobieta

Napisano 25.09.2011 - 17:55

#2 Jarekzulus

Jarekzulus

    Wielki Analityk

  • +Mods
  • Redaktor
  • 4210 postów
3410
Profesor
  • Płeć:Mężczyzna

Napisano 19.12.2013 - 21:12

Wersja "Po kolei, nie pchać się"

 

0. Program w Java

1. Pyta jak długa ma być tablica

2. Wypełniamy tablicę jak chcemy

3. Program liczy i wypisuje wynik wraz z tablicą by można było zobaczyć co i jak.

    Program zrobi najpierw 1 tabelę a później 2.

    Klasa Input której użyłem możesz zobaczyć w poście

     http://matma4u.pl/to...ja-rzutów-java/

public class MaxWTab
{
	public static void main(String[]args)
	{
		int n1=Input.readInt("Podaj dlugosc pierwszej tablicy");
		int[] tablica1=new int[n1];
		for (int j=0;j<n1;j++) tablica1[j]=Input.readInt("Podaj element numer "+(j+1));
		int max1=tablica1[0];
		int elMax1=0;
		for(int o=1;o<n1;o++)
		if (tablica1[o]>max1)	{max1=tablica1[o]; elMax1=o;}
		
		System.out.print("W tablicy sa nastepujace elementy: ");
		for(int i=0; i<tablica1.length; i++)
            System.out.print(tablica1[i]+", ");
            
		System.out.println("\n Maximum wynosi "+max1+" jest na "+(elMax1+1)+" miejscu w tabeli");
	//--------------------------------------------------------------------------------------------	
		int n2=Input.readInt("Podaj dlugosc drugiej tablicy");
		int[] tablica2=new int[n2];
		for (int k=0;k<n2;k++) tablica2[k]=Input.readInt("Podaj element numer "+(k+1));
		int max2=tablica2[0];
		int elMax2=0;
		for(int p=1;p<n2;p++)
		if (tablica2[p]>max2)	{max2=tablica2[p]; elMax2=p;}
		
		System.out.print("\nW tablicy sa nastepujace elementy: ");
		for(int r=0; r<tablica2.length; r++)
            System.out.print(tablica2[r]+", ");
            
		System.out.println("\n Maximum wynosi "+max2+" jest na "+(elMax2+1)+" miejscu w tabeli");
	}
}

  • 1

:wave: :wave: :wave: Jeśli rzuciłem choć promyczek światła na problem który postawiłeś - podziękuj. pre_1433974176__syg.jpgNad kreską


#3 iNf111

iNf111

    Pierwsza pochodna

  • Użytkownik
  • 87 postów
0
Neutralny
  • Płeć:Mężczyzna

Napisano 19.12.2013 - 21:42

To musi byc w jezyku C ;/


  • 0

#4 KaJaK

KaJaK

    Dyskretny

  • Użytkownik
  • 27 postów
0
Neutralny
  • Płeć:Mężczyzna

Napisano 19.12.2013 - 21:59

Podziękował byś (+) a nie marudzisz :P

 

Zasadniczo nie znam dokładnie składni ale z tego co wiem to te języki są podobne, więc powinieneś sobie poradzić z przełożeniem na C++


Użytkownik KaJaK edytował ten post 19.12.2013 - 22:00

  • 0

#5 Jarekzulus

Jarekzulus

    Wielki Analityk

  • +Mods
  • Redaktor
  • 4210 postów
3410
Profesor
  • Płeć:Mężczyzna

Napisano 19.12.2013 - 22:10

Wersja ze z góry określonymi tablicami(takimi jak twoje)

public class MaxWTab2
{
	public static void main(String[]args)
	{
		int tablica1[]={-1,2,3, 24,-30,100,50,2,40,0,-5,12,101,204,312};
		int tablica2[]={89,45,-2,-50,-46};
		
		int max1=tablica1[0];
		int elMax1=0;
		for(int o=1;o<tablica1.length;o++)
		if (tablica1[o]>max1)	{max1=tablica1[o]; elMax1=o;}
		
		System.out.print("W tablicy sa nastepujace elementy: ");
		for(int i=0; i<tablica1.length; i++)
            System.out.print(tablica1[i]+", ");
            
		System.out.println("\n Maximum wynosi "+max1+" jest na "+(elMax1+1)+" miejscu w tabeli");
	//--------------------------------------------------------------------------------------------	
	
		int max2=tablica2[0];
		int elMax2=0;
		for(int p=1;p<tablica2.length;p++)
		if (tablica2[p]>max2)	{max2=tablica2[p]; elMax2=p;}
		
		System.out.print("\nW tablicy sa nastepujace elementy: ");
		for(int r=0; r<tablica2.length; r++)
            System.out.print(tablica2[r]+", ");
            
		System.out.println("\n Maximum wynosi "+max2+" jest na "+(elMax2+1)+" miejscu w tabeli");
		}
}

W zasadzie też można napisać metodę by wyznaczało max i miejsce a później tylko zadać mu tablicę i program już sam policzy co trzeba. Tu masz bez metody. Na C++ dasz rade przełożyć pewnie sam, ja dawno nie używałem, nie pamiętam dokładnie składni. Nie używałem dziwacznych poleceń, a pętle działają tak samo.


  • 1

:wave: :wave: :wave: Jeśli rzuciłem choć promyczek światła na problem który postawiłeś - podziękuj. pre_1433974176__syg.jpgNad kreską


#6 hmm

hmm

    Operator całkujący

  • VIP
  • 478 postów
312
Instruktor I
  • Płeć:Mężczyzna

Napisano 30.12.2013 - 12:25



Jak zrobic zeby funkcja zwrocila mi dwie wartosci tj. maksimum i pozycje

 

Możesz użyć struktury. To takie narzędzie, dzięki któremu możesz stworzyć zmienną składającą się np. z dwóch liczb. Zmodyfikowana wersja Twojego programu:


#include <stdio.h>

struct element{
	int poz;
	float val;
};

struct element funkcja(float tab[],int rozmiar)
{
    int i;
    
    struct element max;
    max.val=tab[0];
    max.poz=1;
    
    for(i=0; i<rozmiar; i++)
    {
          
            if (tab[i]>max.val)
             {
                 max.val=tab[i];
                 max.poz=i+1;
             }
             
   }
 
    return max;
   
  }   

int main()
{
    struct element max;
    float tab1[15]={-1,2,3, 24,-30,100,50,2,40,0,-5,12,101,204,312};
                    
    float tab2[5]={89,45,-2,-50,-46};
    
    max=funkcja(tab1,15);
    
    printf("Maksimum równe %.0f znajduje się na %i miejscu pierwszej tabeli \n",max.val,max.poz);
    
    max=funkcja(tab2,5);
    
    printf("Maksimum równe %.0f znajduje się na %i miejscu drugiej tabeli \n",max.val,max.poz);
    
    
getchar();
}

Starałem się za dużo nie zmieniać, ale oprócz wprowadzenia struktury:

  • wyrzuciłem niepotrzebne biblioteki,
  • poprawiłem błąd obliczania pozycji (musisz zaczynać od 1 a nie od zera),
  • usunąłem zmienną wielkosc (w sumie nie musiałem tego robić ale jakoś mnie ta niepotrzebna zmienna irytowała, możesz sobie z powrotem dopisać jak chcesz :)
  • zmieniłem formatowanie wyniku (wygląda tak samo, ale skoro elementy tablicy deklarujesz jako float, to nie wypisuj ich jako int). 

  • 0