53. En inmatningsfunktion

Skriv en egen funktion för inmatning av ett valfritt antal olika heltal av typen int. Funktionen ska heta input och den ska ha följande parametrar:

  1. antal önskade heltal
  2. minsta möjliga värdet
  3. största möjliga värdet
  4. en utparameter (pekarvärde) för antalet inmatade tal

Funktionen ska använda new[]-opertorn för att dynamiskt allokera ett fält med plats till de inmatade talen. Pekarvärdet som funktionen får från new[]-operatorn ska returneras av funktionen.

Ifall användaren matar in en dubblett (samma tal två gånger) ska funktionen avslutas i förtid och det fält som returneras av funktionen ska endast innehålla de tal som matades in innan dubbletten.

Om anropet av funktionen inte ger mening (t.ex. ett negativt antal e.d.), så ska nullprt returneras.

Tänk på att inte allokera mer minne än nödvändigt. Använd delete[]-operatorn om funktionen avslutas i förtid.

Utparametern ska användas av funktionen för att skicka tillbaka storleken på det returnerade fältet.

Ifall användaren matar in något ogiltigt (t.ex. en bokstav eller ett tal som är för stort) ska funktionen be om ett nytt tal. Funktionen avslutas när användaren antingen har matat in rätt antal tal eller har matat in en dubblett.

Skriv en main-funktion för att testa funktionen.

I main ska det finnas en lokal pekarvariabel som kan ta emot det pekarvärde som returneras av input samt en lokal heltalsvariabel vars adress ska skickas med till funktionen vid varje nytt anrop:

int * olika_tal; // Pekare till de tal vi får från funktionen input nedan.
int antal; // Variabel som innehåller antalet inmatade tal efter varje anrop.

Nedan ser du några exempel.

olika_tal = input(10, 8, 30, &antal);
Funktionen ska här skapa ett fält med högst 10 tal mellan 8 och 30.
Om användaren matar in 11 14 17 11 avslutas funktionen i förtid och olika_tal blir en pekare till ett dynamiskt allokerat fält med talen 11 14 17 och variabeln antal får värdet 3.

olika_tal = input(5, -10, 10, &antal);
Funktionen ska här skapa ett fält med högst 5 tal mellan -10 och 10.

olika_tal = input(1000, 8, 12, &antal);
Funktionen ska skapa ett fält med högst 1000 tal mellan 8 och 12.
Men eftersom det bara finns 5 tal i detta intervall kommer funktionen bara kunna returnera 5 tal.

olika_tal = input(10, 8, 5, &antal);
Funktionen ska skapa ett fält med högst 10 tal som alla är större än 8 och mindre än 5. Detta är omöjligt, så olika_tal lika med nullptr och antal blir 0.

Extra: Om du vill göra det lite mer coolt, så du se till att det sista anropet ovan tolkas som intervallet 5 till 8 (alltså att det inte spelar roll om min-värdet eller max-värdet står först i anropet). Vill du gå steget vidare, så lägg till två extra parametrar av typen bool. Den ena (t.ex. dubletter) talar om för funktionen att dubletter ska vara tillåtna i de inmatade talen. Den andra (t.ex. sortera) ber funktionen sortera fältet i storleksordning innan det returneras.

Fundera gärna över om det finns bättre sätt att lösa den här sortens arbetsuppgift (alltså inmatning av flera tal). Vad kommer du fram till?

Lämna ett svar