Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2013, 15:20   #1
Наталья Баева
Форумчанин
 
Регистрация: 25.04.2012
Сообщений: 128
По умолчанию оператор while

помогите с программой
часть написана что делать дальше не знаю
Найти квадратный корень числа с заданной тоностью использую только 4 операции: +, - , * , /
красным выделила места где программа указала на ошибки

Код:
class Program
    {
        static double SQRT(int X, double eps)
        {
            double otvet = X;
            int y=X/2;
            int z=y*y;
          
            while (z~X)
            {
              if (z<X)
              {
                  z = y + y / 2 ;
              }
              else
              {
                  z = y - y / 2 ;
              }
            }
            return otvet;
        }
        static void Main(string[] args)
        {
            Console.Write("Введите число  = ");
            string st = Console.ReadLine();
            int chislo = Convert.ToInt32(st);
            double koren = SQRT(chislo,0.01);
            Math.Abs(chislo - z) == eps;
Наталья Баева вне форума Ответить с цитированием
Старый 29.03.2013, 15:35   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Первая ошибка: while(z~X). А что такое z~X, я такого тоже не знаю? Что написать-то хотели, по смыслу?

Вторая ошибка: Math.Abs(chislo - z) == eps; - сравнить |chislo-z| и eps на равенство. Первая плохая новость: в функции Main нет переменной z. Вторая плохая новость: положим, сравнили, и?.. Эта инструкция не изменяет значения ни одной переменной и не влияет на поток управления - что она есть, что её нет, программа не изменится.

Вообще, Вам стоит перечитать учебник, потому что проблем слишком много, чтобы разъяснять их на форуме. Скажем,
Код:
double otvet = X;
Эта строка создаёт в функции SQRT переменную otvet, значение которой равно значению X. Впоследствии значение этой переменной не меняется вплоть до
Код:
return otvet;
, то есть, возвращённое значение функции с гарантией будет равно тому X, который ей передали в качестве аргумента. Точно так же, y не меняется после инициализации и равна целой части от X/2 (потому что имеет целочисленный тип).
Abstraction вне форума Ответить с цитированием
Старый 29.03.2013, 15:46   #3
Наталья Баева
Форумчанин
 
Регистрация: 25.04.2012
Сообщений: 128
По умолчанию

во-первых у меня нет никаких учебников
во-вторых, я заполняла по той схеме что мне дали
в while я хотела написать что z должен быть приблеженно равен к X на +- 0,01
а относительно модуля я ими пользуюсь первый раз, но он также был в схеме
Наталья Баева вне форума Ответить с цитированием
Старый 29.03.2013, 15:58   #4
Наталья Баева
Форумчанин
 
Регистрация: 25.04.2012
Сообщений: 128
По умолчанию

вот схема которую нам дали там гдене понятный текст нужно заполнить
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static double SQRT(int X, double eps)
        {
            double otvet = X;
            while (jg)        
                 {
                 if(kjk)       
                       {
                    fds=xs-fds/2           
                       }else
                       {
                    fds=xs+fds/2   
                      }
            }
            return otvet;
        }
        static void Main(string[] args)
        {
            Console.Write();

            int CHISLO = Convert.ToInt32(ST);
            double koren = SQRT(CHISLO, 0.01);
            Math.Abs(ывав - ава) = ва;

        }
    }
}

Последний раз редактировалось Наталья Баева; 29.03.2013 в 16:02.
Наталья Баева вне форума Ответить с цитированием
Старый 29.03.2013, 16:04   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
во-первых у меня нет никаких учебников
Плохо. Советую обзавестись, особенно с учётом того, что в качестве образцов у Вас какой-то ужас.
Цитата:
в while я хотела написать что z должен быть приближённо равен к X на +- 0,01
Перефразируя: модуль разности z и X должен быть не больше 0.01, правильно? Только while выполняется, пока его условие истинно, а не ложно - т.е. нам надо считать, пока этот модуль разницы больше 0.01:
Код:
while(Math.Abs(z-X)>0.01){//...
Ну, и, вероятно, должно быть не 0.01, а eps, правда?
Цитата:
а относительно модуля я ими пользуюсь первый раз, но он также был в схеме
У меня есть небольшая просьба: пожалуйста, хотя бы мне больше не ссылайтесь на Ваши схемы, ладно? Это был мало что не первый случай на моей памяти, когда студентам в качестве образца явно намеренно дали некорректный код. Единственное, что я могу посоветовать полезного в отношении таких "схем" - выкинуть их к чёртовой матери и запомнить, что их автор - откровенный вредитель, специально прилагающий усилия к тому, чтобы Вы не научились программировать.
Abstraction вне форума Ответить с цитированием
Старый 29.03.2013, 16:26   #6
Наталья Баева
Форумчанин
 
Регистрация: 25.04.2012
Сообщений: 128
По умолчанию

если сделаю не по этой схеме то получу "неуд"
а относительно учебника может вы что-нибудь посоветовать?
Наталья Баева вне форума Ответить с цитированием
Старый 29.03.2013, 16:40   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
если сделаю не по этой схеме то получу "неуд"
Тогда извините, сделать "по схеме" с моей точки зрения аналогично "сколотить табуретку по схеме устройства раздавленной катком кошки": задание, которое лично я выполнить не в состоянии.
Цитата:
а относительно учебника может вы что-нибудь посоветовать?
По C#, наверное, стоит взять Шилдта, который "полное руководство". Книжка крупная, но хорошая.
Abstraction вне форума Ответить с цитированием
Старый 29.03.2013, 16:43   #8
Наталья Баева
Форумчанин
 
Регистрация: 25.04.2012
Сообщений: 128
По умолчанию

понятно спасибо за помощь
Наталья Баева вне форума Ответить с цитированием
Старый 29.03.2013, 17:11   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Наверное, всё-таки приведу решение, по возможности его прокомментировав.
Аналитически:
Пусть есть число C. Тогда последовательность Ai, такая, что A0=C, Ai+1=((Ai)^2+C)/(2Ai) - сходится к корню из C. Чтобы получить эту формулу самостоятельно, нарисуйте график функции y = x^2 - C: она пересекает OX в точке корня; теперь можно взять любую точку на графике, провести в ней касательную до пересечения с OX, взять значение функции в этой точке, провести касательную... и т.д. И посчитать, как следующая точка перемечения зависит от предыдущей.

Как бы то ни было, у нас есть формула. Пишем функцию:
Код:
//public - "можно использовать всем"
//static - "это просто функция" (если ещё не изучали объекты, достаточно сложно объяснить, что такое нестатическая функция)
//Принимает два double, возвращает double
public static double MyRoot(double x, double eps){
  //Проверка: а не скормил ли нам какой-нибудь гад отрицательный x или eps?
  if(x<0 || eps<=0){
    //И что делать? По-хорошему, надо кидать исключение (Exception). Но мы пока не знаем, что это такое...
    return 0; //...так что глупым запросам - глупые ответы.
  }
  
  //Теперь берём начальное значение:
  double result = x;
  //И, пока оно не похоже на ответ...
  while(Math.Abs(result*result - x) > eps){
    //Улучшаем результат по формуле выше
    result = (result*result + x) / (2*result); //Заметим, что result>0, так что делить можно
  }

  //Мы вышли из while - значит, его условие нарушилось. Значит, мы подобрались достаточно
  //близко к корню. Ура!
  return result;
}
И используем эту функцию почти как обычный Math.Sqrt:
Код:
double koren = MyRoot(CHISLO, 0.001);
Никаких дополнительных сравнений здесь не надо.
Abstraction вне форума Ответить с цитированием
Старый 01.04.2013, 20:12   #10
blackden
Новичок
Джуниор
 
Регистрация: 01.04.2013
Сообщений: 2
По умолчанию

Ты не правильно реализуешь цикл while, почитай здесь об этом цикле. while (z~X) - это никак в концепции c# не вписывается!
Язык программирования c# http://www.c-sh.ru/
Новости авто http://my-avtoblog.ru/
blackden вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условный оператор,оператор цикла и массив Klark73 Microsoft Office Excel 1 19.12.2011 17:09
Оператор выбора или условный оператор[Перенесено из JavaSE] merhaba1992 Помощь студентам 1 20.01.2011 17:06
Условный оператор. Оператор выбора. Pascal Сержuk Помощь студентам 4 17.11.2010 12:50
Вычислить используя, оператор цикла for и оператор безусловного пе Knubbe Помощь студентам 1 18.12.2009 10:24