Trädvy Permalänk
Medlem
Registrerad
Nov 2016

Programmeringsuppgift - Java

Tja!

Jag håller på att lära mig att programmera i Java-språket. Jag har just nu fått en uppgift som jag verkligen inte kan ta mig förbi. Uppgiften består av en halvfärdig kod som man ska fortsätta på. Det skulle vara otroligt uppskattat om någon kunde hjälpa mig genom att fortsätta koden så jag kan förstå hur man ska tänka. Tack!!!

Det här programmet matar in temperaturerna och visar dem. Därefter bestäms och lagras den minsta, den största och medeltemperaturen för varje vecka. Dessa temperaturer skrivs sedan ut till standardutmatningsenheten. Till sist bestäms och lagras den minsta, den största och medeltemperaturen för hela mätperioden. Även dessa temperaturer skrivs ut till standardutmatningsenheten.

import java.util.*; // Scanner, Locale
class Temperaturer
{
public static void main (String[] args)
{
System.out.println ("TEMPERATURER\n");

// inmatningsverktyg
Scanner in = new Scanner (System.in);
in.useLocale (Locale.US);

// mata in uppgifter om antalet veckor och antalet mätningar
System.out.print ("antalet veckor: ");
int antalVeckor = in.nextInt ();
System.out.print ("antalet mätningar per vecka: ");
int antalMatningarPerVecka = in.nextInt ();

// plats att lagra temperaturer
double[][] t = new double[antalVeckor + 1][antalMatningarPerVecka + 1];

// mata in temperaturerna
for (int vecka = 1; vecka <= antalVeckor; vecka++)
{
System.out.println ("temperaturer - vecka " + vecka + ":");
for (int matning = 1; matning <= antalMatningarPerVecka; matning++)
t[vecka][matning] = in.nextDouble ();
}
System.out.println ();

// visa temperaturerna
System.out.println ("temperaturerna:");
for (int vecka = 1; vecka <= antalVeckor; vecka++)
{
for (int matning = 1; matning <= antalMatningarPerVecka; matning++)
System.out.print (t[vecka][matning] + " ");
System.out.println ();
}
System.out.println ();

// den minsta, den största och medeltemperaturen – veckovis
double[] minT = new double[antalVeckor + 1];
double[] maxT = new double[antalVeckor + 1];
double[] sumT = new double[antalVeckor + 1];
double[] medelT = new double[antalVeckor + 1];
// koden ska skrivas här

// visa den minsta, den största och medeltemperaturen för varje vecka
// koden ska skrivas här

// den minsta, den största och medeltemperaturen - hela mätperioden
double minTemp = minT[1];
double maxTemp = maxT[1];
double sumTemp = sumT[1];
double medelTemp = 0;
// koden ska skrivas här

// visa den minsta, den största och medeltemperaturen i hela mätperioden
// koden ska skrivas här
}
}

Trädvy Permalänk
Medlem
Registrerad
Sep 2010

Använd gärna CODE-taggarna:

import java.util.*; // Scanner, Locale class Temperaturer { public static void main (String[] args) { System.out.println ("TEMPERATURER\n"); // inmatningsverktyg Scanner in = new Scanner (System.in); in.useLocale (Locale.US); // mata in uppgifter om antalet veckor och antalet mätningar System.out.print ("antalet veckor: "); int antalVeckor = in.nextInt (); System.out.print ("antalet mätningar per vecka: "); int antalMatningarPerVecka = in.nextInt (); // plats att lagra temperaturer double[][] t = new double[antalVeckor + 1][antalMatningarPerVecka + 1]; // mata in temperaturerna for (int vecka = 1; vecka <= antalVeckor; vecka++) { System.out.println ("temperaturer - vecka " + vecka + ":"); for (int matning = 1; matning <= antalMatningarPerVecka; matning++) t[vecka][matning] = in.nextDouble (); } System.out.println (); // visa temperaturerna System.out.println ("temperaturerna:"); for (int vecka = 1; vecka <= antalVeckor; vecka++) { for (int matning = 1; matning <= antalMatningarPerVecka; matning++) System.out.print (t[vecka][matning] + " "); System.out.println (); } System.out.println (); // den minsta, den största och medeltemperaturen – veckovis double[] minT = new double[antalVeckor + 1]; double[] maxT = new double[antalVeckor + 1]; double[] sumT = new double[antalVeckor + 1]; double[] medelT = new double[antalVeckor + 1]; // koden ska skrivas här // visa den minsta, den största och medeltemperaturen för varje vecka // koden ska skrivas här // den minsta, den största och medeltemperaturen - hela mätperioden double minTemp = minT[1]; double maxTemp = maxT[1]; double sumTemp = sumT[1]; double medelTemp = 0; // koden ska skrivas här // visa den minsta, den största och medeltemperaturen i hela mätperioden // koden ska skrivas här } }

Trädvy Permalänk
Medlem
Registrerad
Nov 2016

@suzieq: hur menar du?

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Nov 2009

@malhuzh

Om du skriver [code] kod här [/code] och indenterar ordentligt blir det lättare att läsa koden

Det du ska göra är att

// den minsta, den största och medeltemperaturen – veckovis double[] minT = new double[antalVeckor + 1]; double[] maxT = new double[antalVeckor + 1]; double[] sumT = new double[antalVeckor + 1]; double[] medelT = new double[antalVeckor + 1]; // koden ska skrivas här // visa den minsta, den största och medeltemperaturen för varje vecka // koden ska skrivas här // den minsta, den största och medeltemperaturen - hela mätperioden double minTemp = minT[1]; double maxTemp = maxT[1]; double sumTemp = sumT[1]; double medelTemp = 0; // koden ska skrivas här // visa den minsta, den största och medeltemperaturen i hela mätperioden // koden ska skrivas här

Implementera denna delen.

Dvs du måste spara min, max och medeltemperatur för varje vecka och skriva ut denna.
Exempelvis

Vecka 1: Min(8) , Max (22) , Medel(14) Vecka 2: Min(3) , Max (12) , Medel(4) ...

och sedan spara min, max, medel totalt sett (följer exempel ovan)

Hela mätperioden (2 veckor): Min(3) , Max (22) , Medel(9)

Så som dom skriver

double minTemp = minT[1]; double maxTemp = maxT[1]; double sumTemp = sumT[1]; //Sjukt skumt double medelTemp = 0;

Så antar dom att den efterfrågade temperaturen ligger först i arrayen (eftersom ni inte börjar på 0, konstigt även det) med veckovisa värden (makes no sense för summa)
Har du lärt dig om metoder? Du kan skriva exempelvis en

double findMinTemp(int [] inputArray){ //Hitta minsta värdet minTemperature i inputArray, försök lösa detta själv innan du kollar spoilern.

int minTemperature = insertionSort(inputArray)[1]; EXEMPEL PÅ EN SORTERINGSALGORITM public int [] insertionSort(int [] array){ int j; for(int i = 1; i< array.length; i++){ j = i; //System.out.println("Comparing: ["+array[j]+","+array[j-1]+"]"); while( j > 0 && array[j] < array[j-1]){ swap(array, j, j-1); j = j-1 ; } } return array; } public void swap(int[]arr,int i, int j){ // System.out.println("Swapping: ["+arr[i]+","+arr[j]+"]"); int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; //System.out.println(Arrays.toString(arr)); }

Dold text

return minTemperature } //På så vis kan du då skriva double minTemp = findMinTemp(minT);

Har du inte lärt dig om metoder bör du sortera minTemp så att minsta värdet ligger först, och maxTemp så att största värdet ligger först.
*******************
sumTemp borde innehålla värdet av alla adderade värden i sumT, och inte sumT[1]
Detta kanske ligger som en separat uppgift för dig att hitta i och för sig, eftersom sumT[1] kommer att innehålla summan av temperaturerna första veckan, och kommer därför att introducera ett dolt fel i din kod då du enligt

sumTemp = sumT[1]

förväntar dig summan av alla veckor.
*******************
medelTemp får du då fram genom sumTemp/antalVeckor

Trädvy Permalänk
Medlem
Registrerad
Jun 2013

Varför börjar du på index 1 och gör en array med en extra plats? Antar att du fått denna koden om jag tolkat det rätt och tycker det är rätt konstigt att inte börja på index 0. Möjligtvis är det för att det är lättare att förstå men då du säkerligen kommer fortsätta med mer programmering senare så kommer du indexera på 0, och inte 1.

Skrivet av NoToes:

@malhuzh

Så antar dom att den efterfrågade temperaturen ligger först i arrayen med veckovisa värden (makes no sense för summa)
Har du lärt dig om metoder? Du kan skriva exempelvis en

[code]double findMinTemp(int [] inputArray){
//Hitta minsta värdet minTemperature i inputArray, försök lösa detta själv innan du kollar spoilern.

int minTemperature = insertionSort(inputArray)[1];

EXEMPEL PÅ EN SORTERINGSALGORITM
public void insertionSort(int [] array){
int j;
for(int i = 1; i< array.length; i++){
j = i;
//System.out.println("Comparing: ["+array[j]+","+array[j-1]+"]");

while( j > 0 && array[j] < array[j-1]){
swap(array, j, j-1);
j = j-1 ;
}
}
}

public void swap(int[]arr,int i, int j){
// System.out.println("Swapping: ["+arr[i]+","+arr[j]+"]");
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
//System.out.println(Arrays.toString(arr));
}

Dold text

return minTemperature
}

Tror inte man lär sig olika sorteringsalogritmer i en grundläggande javakurs, utan det brukar vara när man läser typ algoritmer och datastrukturer. Borde vara så pass enkelt att man implementrar en metod som tar emot arrayerna och sen gör man en loop och comparear dessa och byter plats om den ena är mindre, vilket görs med en temporär variabel

Oftop Läser du Fadils programmeringskurs 1 på KTH Kista?

Chassi:Fractal Define r4 CPU:i5 4670k@3.4Ghz CPUkylare:Noctua D14 MB:Gigabyte GA-z87x-D3H GPU:ASUS GeForce GTX 770 PSU:Fractal Design Tesla R2 650W 80+guld Lagring: Seagate Barracuda 500GB & Corsair Neutron 240GB Tillbehör:Benq xl2411t | Sidwinder x4 |Intellimouse explorer 3.0

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Nov 2009

@T0MT0M:

Sant, kan mycket väl vara så
Tyckte det var en skum approach generellt att anta att värdet ska ligga på x[1]

Trädvy Permalänk
Medlem
Registrerad
Jun 2013
Skrivet av NoToes:

@T0MT0M:

Sant, kan mycket väl vara så
Tyckte det var en skum approach generellt att anta att värdet ska ligga på x[1]

Håller helt klart med! Jämför man med koden man fått så antar jag att det ska vara rätt simpelt. Exempelvis vill man räkna ut max temperatur för alla mätningar så kan man göra något i stil med

System.out.println("Högsta temperaturen för alla veckor: " + maxtemp(t, antalVeckor, antalMatningarPerVecka));

och sedan implementerar man en lättare funktion exempelvis

public static double maxtemp(double[][] t, int antalV, int antalMpV) { double temp = t[0][0]; for(int i = 0; i <= antalV; i++) for(int j = 0; j <= antalMpV; j++) if(temp<t[i][j]) temp=t[i][j]; return temp; }

Chassi:Fractal Define r4 CPU:i5 4670k@3.4Ghz CPUkylare:Noctua D14 MB:Gigabyte GA-z87x-D3H GPU:ASUS GeForce GTX 770 PSU:Fractal Design Tesla R2 650W 80+guld Lagring: Seagate Barracuda 500GB & Corsair Neutron 240GB Tillbehör:Benq xl2411t | Sidwinder x4 |Intellimouse explorer 3.0