15 svar
323 visningar
Programmering02 behöver inte mer hjälp
Programmering02 7 – Fd. Medlem
Postad: 5 sep 2021 12:14 Redigerad: 5 sep 2021 22:53

Ta in hundra tal och beräkna differenser

Tjena har fastnat lite på en uppgift som jag undrade om ngn kunde hjälpa mig med :

Indata består av 100 positiva heltal. Skriv programrader för beräkning av skillnaden mellan det största och det näst största talet.Använd två variabler big och nextBig där det största resp näst största av de hittillslästa talen hela tiden finns. Deklarera alla dina variabler.


Rubrik ändrad från "Har fastnat på en uppgift:" till nuvarande. En beskrivande rubrik underlättar för de som svarar, och hjälper till att skilja trådar från varandra. Läs gärna mer om rubriksättning här. /Smutstvätt, moderator 

Macilaci 2122
Postad: 5 sep 2021 12:17

Välkommen!

Hur började du? Vad har du som första versionen av metoden?

Fermatrix 7841 – Fd. Medlem
Postad: 5 sep 2021 12:22

Välkommen till pluggakuten, ge oss också lite bakgrund om kursen du läser. Är det universitetsnivå eller gymnasiet? Anledning till att jag frågar är för att beta om vi behöver ta hänsyn till beräkningskomplexitet. Det är rätt enkelt annars att hitta lösning som har beräkningskomplexoteten O(n).

Programmering02 7 – Fd. Medlem
Postad: 5 sep 2021 15:33

Det är i java i högskolan första termin, jag har kommit så här långt :

public static void main(String[] args) {

// TODO Auto-generated method stub

 

Scanner scan=new Scanner(System.in);

 

double Big, NextBig,x;

 

x=scan.nextDouble();

Big=0;

NextBig=0;

 

 

if(x > scan.nextDouble()) {

Big= scan.nextDouble();

}

else if (x<scan.nextDouble())

{NextBig= scan.nextDouble();

 

}

System.out.print(Big+NextBig);

Fermatrix 7841 – Fd. Medlem
Postad: 5 sep 2021 15:46

Jag tror det är menat att du ska skapa en array med 100 random tal eller något dylikt. Att mata in 100 tal förhand är absurt! 

Programmering02 7 – Fd. Medlem
Postad: 5 sep 2021 16:09 Redigerad: 5 sep 2021 16:11

Ja tänkte det men saken är att vi har inte gått igenom array än, men jag tänkte hur skulle man kunna göra om man ska skriva in 3 tal istället för 100

Macilaci 2122
Postad: 5 sep 2021 22:43 Redigerad: 5 sep 2021 22:47

Stilförslag:

  • variabeldeklaration, initialisering först
  • en deklaration per rad
  • variabelnamn ska börja med gemen

Din kod kunde se ut så här:

public static void main(String[] args) {

    // variabeldeklaration, initialisering
    double big = 0.0;
    double nextBig = 0.0;
    double x;
    Scanner scan = new Scanner(System.in);

    // processing
    x = scan.nextDouble();
    if(x > scan.nextDouble()) {
        big = scan.nextDouble();
    }
    else if (x < scan.nextDouble()) {
        nextBig = scan.nextDouble();
    }

    // output
    System.out.print(big-nextBig);
}

Men nu har du ett par problem med processing:

  • Du behöver någon loop för att bearbeta flera inmatningar.
  • Du måste vara försiktig med scan.nextDouble(), eftersom du får ett nytt värde varje gång
  • Jämförelse med big, nextBig verkar vara fel. 

Känner du till pseudokod? Du kan beskriva algoritmen även i pseudokod.

Programmering02 7 – Fd. Medlem
Postad: 5 sep 2021 23:06 Redigerad: 5 sep 2021 23:14

ska man ha processing inuti loopen?

Laguna 30440
Postad: 6 sep 2021 06:29
Dracaena skrev:

Jag tror det är menat att du ska skapa en array med 100 random tal eller något dylikt. Att mata in 100 tal förhand är absurt! 

Om man har 100 tal i en fil kan man ge den filen som indata till programmet.

Jag tycker programmet ska klara indata med godtyckligt antal tal. Då kan man använda t.ex. fem tal medan man testar programmet så kan läraren få komma med sin fil med 100 tal senare.

Yngve 40268 – Livehjälpare
Postad: 6 sep 2021 10:33

Exemplel på pseudokod:

Sätt big = 0

Sätt nextBig = 0

Läs in ett tal i variabeln talet.

Om talet > big så sätt big = talet.

För vart och ett av de återstående talen:

  1. Läs in ett tal i variabeln talet.
  2. Om talet > big så sätt nextBig = big och big = talet
  3. Annars: Om talet > nextBig så sätt nextBig = talet
Programmering02 7 – Fd. Medlem
Postad: 6 sep 2021 21:27 Redigerad: 6 sep 2021 22:10


 

Scanner scan=new Scanner(System.in);
System.out.print("Ange tal");


double big=0.0;
double nextBig=0.0;
double x=scan.nextDouble();

if(x > big) {

  nextBig=big;
  big= x;

 }else if (x<nextBig){
 nextBig=x;

 }
 System.out.print(big-nextBig);
}

Tillägg: 6 sep 2021 22:11

jag testade koden ovanför men det funkade inte 

Laguna 30440
Postad: 6 sep 2021 21:56

Använd gärna kodverktyget på kod som du har skrivit här. Det ser ut som {;} i verktygsraden. Då försvinner inte indenteringen och det blir lättare att läsa.

Yngve 40268 – Livehjälpare
Postad: 6 sep 2021 23:43

Din kod har ingen loop.

Den läser endast in ett enda tal.

Programmering02 7 – Fd. Medlem
Postad: 7 sep 2021 00:35

Förslag? 

Yngve 40268 – Livehjälpare
Postad: 7 sep 2021 01:14

Ja, det jag skrev i det här svaret

Programmering02 7 – Fd. Medlem
Postad: 9 sep 2021 13:31

löste sig med detta :

Scanner scan=new Scanner(System.in);
		System.out.print("Ange hur många tal och sedan vilka");
		
		double big=0.0;
		double nextBig=0.0;
		double y=scan.nextDouble();
		
		for(int i=0;i<y;i++) {
			
	   	double x=scan.nextDouble();
			
		if(x > big) 
		{
			
			nextBig=big;
			big= x;
			
		}
		else if (x>nextBig)
		{
			nextBig=x;
		}
		

		}
		System.out.print(big-nextBig);
Svara
Close