Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задача, алгоритм на Си 
:(
    Опции темы
Лира
Дата 2.10.2005, 12:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Извините, если не в тему - просто не знаю, куда обратиться, помогите пожалуйста написать программу на Си (не на С++).
если сумма трех попарно различных действительных чисел x, y, z меньше единицы, то наименьшее из них заменить полусуммой двух других, в противном случае заменить меньшее из x и y полусуммой двух оставшихся.

Надеюсь на вашу помощь!
  Вверх
BreakPointMAN
Дата 2.10.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 2
Всего: 24



Я бы сделал как-нибудь так:
Код

#include <conio.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
   // Объявляем и инициализируем переменные...
   float x=1,y=2,z=3;

   // Выводим их на экран...
   clrscr();
   printf("Before:\n");
   printf("   x == %f\n", x);
   printf("   y == %f\n", y);
   printf("   z == %f\n", z);

   // Собственно, делаем то, что требуется в задаче...
   float sum=x+y+z;
   float *min=&x;
   if(y<*min) min=&y;
   if(sum<1)
      if(z<*min) min=&z;
   (*min)=(sum-(*min))/2;

   // Выводим то, что получилось...
   printf("After:\n");
   printf("   x == %f\n", x);
   printf("   y == %f\n", y);
   printf("   z == %f\n", z);

   getch();
   return 0;
}

Здесь:
sum - это переменная типа float, в которой хранится сумма всех трех чисел;
min - это указатель типа float*, по ходу работы программы он "настраивается" либо на минимальную из x, y и z (при sum<1), либо на минимальную из x и y (в противном случае). В дальнейшем, когда мы обращаемся к нему (например, (*min)=чего-то_там или просто *min), мы на самом деле обращаемся к той переменной, на которую он настроен (т.е. меняем её или читаем её значение).
Вполне очевидно, что если sum - это сумма всех трех переменных, то, если вычесть из sum какую-либо одну, то получим сумму двух оставшихся.
Ну, остальное, вроде, в пояснениях особо не нуждается... %)

Это сообщение отредактировал(а) BreakPointMAN - 2.10.2005, 14:27


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
alexXx
Дата 2.10.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 2.10.2005

Репутация: 1
Всего: 1



#include <stdio.h>
#include <conio.h>

void main()
{
int x,y,z;
if ((x+y+z)<1)
{
if(x<y && x<z)
x=(y+z)/2;
if(y<x && y<z)
y=(x+z)/2;
if(z<x && z<y)
z=(x+y)/2;
}
else
{
if(x<y)
x=(y+z)/2;
else
y=(x+z)/2;
}
// Если надо, оформишь ввод/вывод x,y,z. Я решил не делать.
// Если я не так понял условее уж извени. smile
}

PM MAIL   Вверх
Лира
Дата 2.10.2005, 14:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо БОЛЬШОЕ smile
  Вверх
BreakPointMAN
Дата 2.10.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 2
Всего: 24



alexXx
Твоя программа не будет работать корректно по ряду причин:

- во-первых, в задаче требуется использование типа float, а не int:
Цитата
трех попарно различных действительных чисел x, y, z


- во-вторых, нельзя проверять условия, так, как они у тебя проверяются:
Код

   ...
   if ((x+y+z)<1)
      {
       if(x<y && x<z)
          x=(y+z)/2;
       if(y<x && y<z)
          y=(x+z)/2;
       if(z<x && z<y)
          z=(x+y)/2;
      }
   else
      {
       if(x<y)
          x=(y+z)/2;
       else
          y=(x+z)/2;
      }
   ...

...поскольку там подряд будет все выполняться - нет else ни одного, и, для чисел x=-3, y=-2, z=-1 вместо правильного результата "-1.5, -2, -1" будет выдан неправильный "-1.5, -1.25, -1".

Это сообщение отредактировал(а) BreakPointMAN - 2.10.2005, 14:58


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Лира
Дата 2.10.2005, 15:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А что между С и С++ нет различий?
Я вот пробую для С, но че т не получается. Пишет ошибку, что типа невозможно открыть включенный файл "stdio.h" А я не знаю как его создавать. Я вообще пока валенок в этом деле.
  Вверх
LPBOY
Дата 2.10.2005, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: нет
Всего: 20



Попробуй убрать эту строчку по-моему в Си она не нужна.
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
Лира
Дата 2.10.2005, 16:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нужна к сожалению.
Но тем не менее если попробовать, то появляетсвя " невозможно открыть файл "col.obj"
  Вверх
Mayk
Дата 2.10.2005, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 5
Всего: 134



Советую проверить пути к заголовочным файлам и библиотекам.
зы. что за компилер?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
LPBOY
Дата 2.10.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: нет
Всего: 20



На каком компиляторе компилишь? У меня прекрасно без этого файла скомпилировалось.

Это сообщение отредактировал(а) LPBOY - 2.10.2005, 16:11
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
Guest
Дата 2.10.2005, 16:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











мммм,я не знаю о чем вы говорите?
Мне всего лишь нужно сдать эту долбанную лабораторную smile
  Вверх
cardinal
Дата 2.10.2005, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 15
Всего: 99



Ну ты же должна знать в какой программе ты код то пишешь (и потом компилируешь)? Может все таки Microsoft Visual C++ 6.0?
Если нет, то переходи в него, тогда я тебе скажу, что дальше делать, чтобы откомпилить проект по крайней мере.

И зарегистрируйся чтоли, пора уж... smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
BreakPointMAN
Дата 2.10.2005, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 2
Всего: 24



Лира!
Все эти ошибки 99% возникают из-за того, что компилятор не может найти нужные файлы, потому что у него не прописано, где их искать...
Если ты пишешь программу свою в Turbo C++ от Borland, например, то сделай следующее:
в меню Options==>Directories пропиши пути Include Directories и Library Directories так, чтобы в папке, которую ты прописала в первом случае, присутствовали файлы stdio.h и conio.h, а в папке, которую ты прописала во втором случае, присутствовала добрая куча файлов типа *.obj.

Надеюсь, ты умеешь пользоваться Проводником(Explorer'ом) / FAR'ом / Norton Commander'ом и т.п.? Посмотреть наличие этих файликов сможешь, чтобы узнать, в каких папках они лежат? smile

У меня Turbo C++ лежит в папке
C:\TC_3\
в нем есть папки
INCLUDE и LIB
в которых лежат файлы
stdio.h, conio.h и *.obj
соответственно.
Поэтому для моего случая это будут такие пути:
c:\tc_3\include
и
c:\tc_3\lib

У тебя, скорее всего, аналогично.

Если используешь среду, отличную от Turbo C++ - поищи файлы, на которые компилятор ругается, что не может открыть, а когда найдешь и посмотришь, в каких папках они лежат, поищи где-нибудь в меню компилятора аналогичные настройки.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
chipset
Дата 2.10.2005, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: нет
Всего: 164



Модератор: перенесено из C++:Общие вопросы.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
nikitao
Дата 2.10.2005, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 3
Всего: 26



Точна такая же задачка уже была недавно на форуруме,только решение правдо было мной изложено коряво и для C++,там Dreamator 0x01 ее переработал и все сработало
Файл "stdio.h" кокрас нужен для С,а в C++ используется "iostream.h" .
BreakPointMAN ,скорее всего прав,можно еще попробывать вместо
Код

#include<stdio.h>

прописать
Код

#include "<каталог где файл лежит>\stdio.h"

А котолог через поиск Windы смотришь. smile


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0846 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.