none
помогите,пожалуйста,исправить код RRS feed

  • Вопрос

  • в файле дана матрица

    10 6 6 1
    10 6 4 1
    4 5 6 1

     я её считываю,умножаю на 2,потом вывожу в новый файл, у меня проблема с выводом в новый файл,ведь матрица может быть дана любая, как мне вывести в "output.txt" полученную матрицу n*m,а не 3*4?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;

    namespace FileWork
    {
        class Program
        {
            static void Main(string[] args)
            {          
               List<string> Lst = new List<string>();
               using (StreamReader sr = new StreamReader("input.txt"))
              {
                string line;
                while ((line = sr.ReadLine()) != null)
                 {
                    Lst.Add(line);
                 }
              }

              List<string> matrix = new List<string>();
               foreach (string s in Lst)
               {
                 string[] split = s.Split(new[] { ' ' });
                 foreach (string symbol in split)
                  matrix.Add((int.Parse(symbol) * 2).ToString());
               }

              using (StreamWriter sw = new StreamWriter("output.txt"))
                    {
                        int count = 0;
                      for (int i = 1; i <= matrix.Count / 4; ++i)
                      {
                        for (int j = 1; j <= 4; ++j)
                        {
                           sw.Write(matrix[count] + " ");
                           ++count;
                        }
                       sw.WriteLine();
                     }
                    }
             }
        }
    }

                                    
    7 ноября 2012 г. 13:47

Ответы

  • Добрый день.

    У вас основная проблема в том, что вы двухмерную структуру пытаетесь записать в одномерный список. Лучше использовать двумерный и тогда все будет ок. Вот так:

    static void Main(string[] args)
            {
                List<string> Lst = new List<string>();
                using (StreamReader sr = new StreamReader("input.txt"))
                {
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        Lst.Add(line);
                    }
                }
    
                List<List<string>> matrix = new List<List<string>>();
                foreach (string s in Lst)
                {
                    string[] split = s.Split(new[] { ' ' });
                    List<string> row = new List<string>();
                    foreach (string symbol in split)
                        row.Add((int.Parse(symbol) * 2).ToString());
                    matrix.Add(row);
                }
    
                using (StreamWriter sw = new StreamWriter("output.txt"))
                {   
                    for (int i = 0; i < matrix.Count; i++)
                    {
                        for (int j = 0; j < matrix[i].Count ; j++)
                        {
                            sw.Write(matrix[i][j] + " ");
                        }
                        sw.WriteLine();
                    }
                }
            }

    P.s. При вставке фрагментов кода пользуйтесь вот этой кнопкой:

    • Помечено в качестве ответа Abolmasov Dmitry 21 ноября 2012 г. 8:47
    7 ноября 2012 г. 17:01
    Отвечающий

Все ответы

  • Добрый день.

    У вас основная проблема в том, что вы двухмерную структуру пытаетесь записать в одномерный список. Лучше использовать двумерный и тогда все будет ок. Вот так:

    static void Main(string[] args)
            {
                List<string> Lst = new List<string>();
                using (StreamReader sr = new StreamReader("input.txt"))
                {
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        Lst.Add(line);
                    }
                }
    
                List<List<string>> matrix = new List<List<string>>();
                foreach (string s in Lst)
                {
                    string[] split = s.Split(new[] { ' ' });
                    List<string> row = new List<string>();
                    foreach (string symbol in split)
                        row.Add((int.Parse(symbol) * 2).ToString());
                    matrix.Add(row);
                }
    
                using (StreamWriter sw = new StreamWriter("output.txt"))
                {   
                    for (int i = 0; i < matrix.Count; i++)
                    {
                        for (int j = 0; j < matrix[i].Count ; j++)
                        {
                            sw.Write(matrix[i][j] + " ");
                        }
                        sw.WriteLine();
                    }
                }
            }

    P.s. При вставке фрагментов кода пользуйтесь вот этой кнопкой:

    • Помечено в качестве ответа Abolmasov Dmitry 21 ноября 2012 г. 8:47
    7 ноября 2012 г. 17:01
    Отвечающий
  • спасибо большое,но она у меня не работает

    выдает,что

    row.Add((int.Parse(symbol) * 2).ToString());

    Входная строка имела неверный формат.

    8 ноября 2012 г. 10:00
  • Значит у вас в переменной symbol содержится нечто, что не является целым числом.

    Проверьте, правильно ли у вас считываются строки из файла, нет ли в нем пустых строк, все ли строки разбиваются правильно на символы командой split.

    8 ноября 2012 г. 10:25
    Отвечающий
  • этот код работает если в файле такая запись

    1 1 1 2 3 4 4 3

    а мне надо,чтобы он работал,если в файле вот такая запись

    2 2 2 2 2 
    2 3 4 4 5
    5 5 6 7 3

    8 ноября 2012 г. 10:50
  • ой,я нашёл ошибку,всё работает,спасибо большое)))  а не могли бы вы мне помочь решить эту задачу методом Гаусса вместо умножения на 2?))
    8 ноября 2012 г. 10:54
  • Во-первых, один топик - один вопрос.

    Во-вторых, в соседнем топике, вам предложили алгоритм. Попробуйте его реализовать, если не получится, то спрашивайте, поможем.

    8 ноября 2012 г. 11:00
    Отвечающий