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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2013, 14:45   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Индивидуалка на Си

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

Итак:
а)Объявить переменную j24 вещественного типа и инициализировать ее значением -10^2
Как пишу я: float j24 = 100.0; или float j24 = pow(-10,2); (оба варианта не правильны)
б)Объявить массив переменных h вещественного типа, состоящий из 4 элементов. Инициализировать его значениями 22*10^4, 12,-2*10^17,0.7.
Тип данных массива подобрать в соответствии с инициализацией.
Мой вариант: float h[4] = {22*pow(10,4), 12.0, -2*pow(10,17),0.7}; (неверно)

Задание 2:
Записать на языке Си фрагмент программы, соответствующий тексту на естественном языке и вычислить значения всех переменных.
2. Установить ссылку между указателем pq и переменной j24. Присвоить q24 значение переменной, на которую ссылается pf. Присвоить указателю pf значение адреса 2-го элемента массива h. Присвоить третьему элементу второй строки qq значение переменной, на которую ссылается pf. Присвоить следующему элементу массива h значение 90 и переадресовать указатель на этот элемент.

Мой вариант:
1. pq=&24; ( верно)
2. q24=*pq; (верно)
3. pq=&[1]; (неверно)
Далее все неверно
4.qq[1][2]=*pq;
5.qq[1][3]=90;
6.&(h+2)=90;
pf=*(h+2);

3. Найти ошибки в программе на языке Си.
Код:
double s=3.5e-320; //нужен lond double (верно)
float t[2]={1.2e-90,-4.78e-9}; //double вместо float ( неверно)
main() // две функции main ( неверно )
#include <math.h> //библиотеки объявляются в начале программы ( верно)
main() // Не указан тип функции - void или int ( если возвращает значение ) ( верно )
{double fl 
f=acos(400);} // значение должно быть от -1 до 1 (верно )
4. Записать на естественном языке семантику работы фрагмента программы ( но не отдельных ее инструкций )
Код:
#define K1 50
int x[K1],n,m; ..//ввод x
n=-1;
for(m=10000; j=0; j<K1; j+=3)
 if(x[j]>m)
{ m=x[i];
   n=j;
}}
Мой вариант
Найти максимальный элемент массива среди каждого третьего, значение которого превышает значение m и запомнить его индекс ( подчеркнуто m, видимо не m)

И последнее опять найти ошибки на Си
Код:
main()
{#define N 50N //define пишется перед функцией main
int k, z[N];
int i,j; ...*/ввод z*/ // объявление переменных (ввода z не было)
if(i>j) then //В С нету функции then
for(i=0;i>N;i++)
i=j**2 // В языке Си нету операций с двойным умножением.
Написано - не все. Я не знаю, что тут еще искать

Только пожалуйста, если что-то исправите напишите почему именно так, а то понимать то тоже хочется Заранее спасибо.

Последний раз редактировалось Stilet; 24.02.2013 в 14:49.
Praud вне форума Ответить с цитированием
Старый 24.02.2013, 21:54   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Напишите весь код целиком, посмотрим!!!
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 24.02.2013, 23:38   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Только отрывки. Я напечатал с задания слово в слово.
Praud вне форума Ответить с цитированием
Старый 25.02.2013, 17:14   #4
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Актуально. Любое исправление мне поможет
Praud вне форума Ответить с цитированием
Старый 25.02.2013, 17:42   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
а)Объявить переменную j24 вещественного типа и инициализировать ее значением -10^2
Как пишу я: float j24 = 100.0; или float j24 = pow(-10,2); (оба варианта не правильны)
Вы уверены, что имелось в виду 100, а не -100? pow так работать не будет, могли бы проверить сами: не любят эти функции отрицательных значений.
Кроме того, под "вещественным типом" иногда понимают float, а иногда double.

Цитата:
б)Объявить массив переменных h вещественного типа, состоящий из 4 элементов. Инициализировать его значениями 22*10^4, 12,-2*10^17,0.7.
Тип данных массива подобрать в соответствии с инициализацией.
Мой вариант: float h[4] = {22*pow(10,4), 12.0, -2*pow(10,17),0.7}; (неверно)
Неверно, это факт. pow - функция, вызов функции в инициализаторе такого рода недопустим (значение должно быть известно на этапе компиляции, когда никакие функции ещё не вызываются - выражения типа 10*10 компилятор посчитает сам, а вот pow, увы...). Я бы выписывал значения (22e4, 12.0, -2e17, 0.7)

Цитата:
Присвоить указателю pf значение адреса 2-го элемента массива h. Присвоить третьему элементу второй строки qq значение переменной, на которую ссылается pf. Присвоить следующему элементу массива h значение 90 и переадресовать указатель на этот элемент.
3. pq=&[1]; (неверно)
Далее все неверно
4.qq[1][2]=*pq;
5.qq[1][3]=90;
6.&(h+2)=90;
pf=*(h+2);
3 - где массив h? И, кажется, кто-то напутал с именем переменной. 4 - опять имя переменной, больше проблем не вижу. qq[1][3] - это "следующий элемент массива h"? & - оператор взятия адреса. Адрес результата сложения - неопределённая величина, компилятор должен послать лесом. Вот *(h+2) - это обращение по адресу третьего элемента массива h, эквивалентное просто h[2]. Но pf вроде нужно не значение?..

Цитата:
float t[2]={1.2e-90,-4.78e-9}; //double вместо float ( неверно)
main() // две функции main ( неверно )
Если так и написано (т.е. за main() не следует ни ;, ни {) - это синтаксическая ошибка. Теоретически, можно заявить прототип main: int main(void); Но не нужно.
С массивом ошибку не очень понимаю - 10^-90 во float в обычно встречающихся реализациях и впрямь не влезет. Единственное что, полный тип t в примере называется не float, а float[2] (массив из двух элементов типа float).

Цитата:
for(m=10000; j=0; j<K1; j+=3)
Первая ';' должна быть заменена на ',', иначе это синтаксическая ошибка. Далее, используется необъявленная переменная i. Если вместо неё стоит j, то ищется элемент, значение которого превышает константу 10000, даже если перед началом данного фрагмента m имела другое значение; также, есть случай, когда подходящих элементов не найдётся вовсе.

Цитата:
#define N 50N
Можно, но обычно бессмысленно.
Не очень понятна фраза про "ввод z ... ввода z не было". Любая переменная, значение которой не установлено в нечто определённое, при выполнении программы имеет произвольное значение; особенно это касается переменных i и j в данном примере. "for(i=0;i>N;i++)" - код одного уровня осмысленности с "f=acos(400);": написать-то можно, но выглядит бредово (первое эквивалентно "i=0;", второе - "abort();").
Abstraction вне форума Ответить с цитированием
Старый 25.02.2013, 18:00   #6
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

По п.3
Цитата:
int i,j; ...*/ввод z*/ // объявление переменных (ввода z не было)
Если Вы не ошиблись при написании , то после ; многоточия не д.б. и */ввод z*/, очевидно имелась ввиду правильная запись коментария /*ввод z*/
double fl;
По п.4
Найти максимальный элемент массива превышающий 10000 ...
В последнем
for(i=0;i<N;i++)
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 25.02.2013 в 18:08.
Sweta вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Индивидуалка по Си Daud94 Помощь студентам 1 23.12.2012 18:16
Индивидуалка по Си Daud94 Помощь студентам 0 22.12.2012 23:05