Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class Cell
- {
- protected string cell;
- public virtual int Calculate()
- {
- return 0;
- }
- public virtual int GetValue()
- {
- return 0;
- }
- public override string ToString()
- {
- return cell;
- }
- public string GetCell() { return cell; }
- }
- public class ValueCell : Cell
- {
- private int value;
- public ValueCell(string cell, int value) : base()
- {
- this.cell = cell;
- this.value = value;
- }
- public override int GetValue() { return value; }
- public void SetValue(int value) { this.value = value; }
- public override string ToString()
- {
- return $"{cell}:{value}";
- }
- }
- public abstract class FunctionCell : Cell
- {
- public virtual string FunctionName()
- {
- return "N/A";
- }
- }
- public class SumCell : FunctionCell
- {
- private ValueCell[] valueCells;
- public SumCell(string cell, Cell[] valueCells) : base()
- {
- this.cell = cell;
- this.valueCells = new ValueCell[valueCells.Length];
- for(int i = 0; i < valueCells.Length; i++)
- {
- this.valueCells[i] = (ValueCell)valueCells[i];
- }
- }
- public override string ToString()
- {
- string cellsString = "";
- for (int i = 0; i < valueCells.Length; i++)
- cellsString = cellsString + $" {valueCells[i].GetCell()}";
- return $"{cell}:SUM({cellsString})";
- }
- public override int Calculate()
- {
- int sum = 0;
- for (int i = 0; i < valueCells.Length; i++)
- sum += valueCells[i].GetValue();
- return sum;
- }
- public override string FunctionName()
- {
- return "Sum";
- }
- }
- public class MinCell : FunctionCell
- {
- private ValueCell[] valueCells;
- public MinCell(string cell, ValueCell[] valueCells) : base()
- {
- this.cell = cell;
- this.valueCells = valueCells;
- }
- public override string ToString()
- {
- string cellsString = "";
- for (int i = 0; i < valueCells.Length; i++)
- cellsString = cellsString + $" {valueCells[i].GetCell()}";
- return $"{cell}:MIN({cellsString})";
- }
- public override int Calculate()
- {
- int min = Math.Min(valueCells[0].GetValue(), valueCells[1].GetValue());
- for(int i = 2; i < valueCells.Length; i++)
- min = Math.Min(min, valueCells[i].GetValue());
- return min;
- }
- public override string FunctionName()
- {
- return "Min";
- }
- }
- public class MaxCell : FunctionCell
- {
- private Cell[] valueCells;
- public MaxCell(string cell, Cell[] valueCells) : base()
- {
- this.cell = cell;
- this.valueCells = new ValueCell[valueCells.Length];
- for(int i = 0; i < valueCells.Length; i++)
- {
- if (valueCells[i] is ValueCell)
- this.valueCells[i] = (ValueCell)valueCells[i];
- else
- {
- ValueCell temp = new ValueCell(valueCells[i].GetCell(), valueCells[i].Calculate());
- this.valueCells[i] = temp;
- }
- }
- }
- public override string ToString()
- {
- string cellsString = "";
- for (int i = 0; i < valueCells.Length; i++)
- cellsString = cellsString + $" {valueCells[i].GetCell()}";
- return $"{cell}:MAX({cellsString})";
- }
- public override int Calculate()
- {
- int max = Math.Max(valueCells[0].GetValue(), valueCells[1].GetValue());
- for (int i = 2; i < valueCells.Length; i++)
- max = Math.Max(max, valueCells[i].GetValue());
- return max;
- }
- public override string FunctionName()
- {
- return "Max";
- }
- }
- public class AvgCell : FunctionCell
- {
- private ValueCell[] valueCells;
- public AvgCell(string cell, ValueCell[] valueCells) : base()
- {
- this.cell = cell;
- this.valueCells = valueCells;
- }
- public override string ToString()
- {
- string cellsString = "";
- for (int i = 0; i < valueCells.Length; i++)
- cellsString = cellsString + $" {valueCells[i].GetCell()}";
- return $"{cell}:AVG({cellsString})";
- }
- public override int Calculate()
- {
- int sum = 0;
- int count = 0;
- for(int i = 0; i < valueCells.Length; i++)
- {
- sum += valueCells[i].GetValue();
- count++;
- }
- return sum / count;
- }
- public override string FunctionName()
- {
- return "Avg";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment