Przygotowanie kompilatora Visual Studio do konkursów z informatyki
Jak do tej pory w konkursach informatycznych królują rozwiązania pisane pod konsolę. Złożoność programu okienkowego utrudnia automatyzację sprawdzania rozwiązań. Stąd też do środowiska Visual Studio przy braku zainstalowanych rozszerzeń konsolowych dla języka C# lub C++ należy je pobrać i zainstalować.
Instalację dowolnych rozszerzeń standardowo wykonuje się po wyborze z menu opcji Rozszerzenia\ Zarządzaj rozszerzeniami
W oknie dialogowym wyboru instalacji rozszerzeń wybieramy to co nas interesuje
Zatwierdzamy wybór i to tyle.
Wczytanie danych ze standardowego wejścia
W informatycznych zadaniach konkursowych dane wejściowe testujące rozwiązanie pobierane są z pliku. Wynik działania również jest wyeksportowany do pliku. Samodzielnie testując działanie naszego rozwiązania wykonujemy to korzystając z tak zwanego Wiersza polecenia.
Wiersz polecenia możemy uruchomić klawisz WINDOWS + cmd lub łatwiej z menu kompilator Visual Studio wybierając Narzędzia/ Wiersz polecenia/ Wiersz polecenia dla deweloperów
W oknie aplikacji Wiersz polecenia przechodzimy do folderu z kompilacją programu naszego rozwiązania (komenda cd). W folderze tym musimy również umieścić plik danych. Z reguły są to pliki tekstowe
Poniżej wykonanie polecenia cd Debug przeniesie aktywność do podfolderu Debug
Uruchomienie rozwiązania z równoczesnym wczytaniem danych pliku i wyświetleniem wyniku na ekranie monitora wygląda jak poniżej
Tu jest polecenie zapisane jako t2cpp.exe < dane.txt , czyli podajemy nazwę skompilowanego pliku rozwiązania plus znak mniejszości plus nazwa pliku danych.
Jeżeli wynik działania programu ma być wysłana do pliku to podajemy po znaku większości nazwę pliku wynikowego z rozszerzeniem
Przykładowe rozwiązanie tego samego problemu w języku C# i C++
Naszym zadaniem jest wczytanie danych z pliku tekstowego, który zawiera informacje ile jest zdań oraz ile jest wierszy tablicy dwuwymiarowej. Rozwiązanie musi wyświetlić odczytane zdania, utworzyć tablicę dynamiczną, wpisać elementy do tablicy i obliczyć sumę elementów z każdego wiersza tablicy dwuwymiarowej
Postać pliku danych widoczny jest na poniższej ilustracji
Rozwiązanie w C#
Kod rozwiązania zapisany w języku C#
Wskazówka:
using System;
using static System.Net.Mime.MediaTypeNames;
class CodeQuest
{
static void Main(string[] args)
{
int ile = Convert.ToInt32(Console.ReadLine());
for (int t = 0; t < ile; t++)
{
string text = Console.ReadLine();
Console.WriteLine(text);
}
//rób tablicę, rozmiar i elementy odczytaj z pliku danych
int n=Int32.Parse(Console.ReadLine());
int[,] tab = new int[n,2];
for(int i = 0; i < n; i++) {
//znak separatora liczb to spacja
string[] s=Console.ReadLine().Split(' ');
for(int j = 0; j < s.Length; j++)
{
tab[i,j] = Convert.ToInt32(s[j]);
}
}
//pokaz wczytana tablicę
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 2; j++)
{
Console.Write(tab[i, j] + " ");
}
Console.WriteLine();
}
//przykład sumowania elementów z kolumn w kolejnych wierszach tablicy
for (int i = 0; i < n; i++)
{
Console.WriteLine(tab[i,0]+"+"+ tab[i, 1]+"="+(tab[i, 0]+ tab[i, 0]));
}
}
}
Rozwiązanie w C++
Rozwiązanie w języku C++
Wskazówka:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int k;
cin >> k;
string d;
getline(cin, d);
for (int t = 0; t < k; t++) {
string text;
getline(cin, text);
cout << text << '\n';
}
int n = 0;
//wczytaj rozmiar tablicy
cin >> n;
//przydziel rozmiar na wiersze tablict=y dynamicznej
int** tab = new int* [n];
for (int i = 0; i < n; i++) {
//przydziel rozmiar na kolumny dla kazdego wiersza tablicy
tab[i] = new int[2];
cin >> tab[i][0] >> tab[i][1];
}
//pokaz wczytana tablicę
for (int i = 0; i < n; i++)
cout << tab[i][0] << " " << tab[i][1] << '\n';
//przykład sumowania elementów z kolumn w kolejnych wierszach tablicy
for (int i = 0; i < n; i++)
{
cout << tab[i][0] << "+" << tab[i][1]
<< "=" << tab[i][0] + tab[i][1] << '\n';
}
return 0;
}
Wynik działania zapisanego do pliku wynik.txt pokazuje poniższa ilustracja