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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2012, 14:19   #1
Mariolka
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 25
По умолчанию Язык программирования С

Привет всем) помогите найти ошибку в программе))
Для фрагмента программы записать в виде таблицы значение переменных после каждого шага программы (столбцы соответствуют переменным, строки ¬– строкам программы). Тип int и указатели занимают по 4 байта. Компилятор расположил переменные по следующим адресам: a – 100, p1 – 120, p2 – 124, s.x – 128, s.y – 132. Число N – номер варианта.

Код:
struct str {int x; int y;};
int a[5] = {1, 2, 3, 4, 5};
int *p1, *p2;
str s;
p1 = &a[N%5+1];
p2 = a+N/5+1;
s.x = *p1;
s.y = *p2++;
*(p1-2)=s.y;
p2=&s;
p2->x=p1[1];
p2–>y=s.y;
a[5]=s.x;
Заранее спасибо!!!))

Последний раз редактировалось ACE Valery; 15.12.2012 в 21:39.
Mariolka вне форума Ответить с цитированием
Старый 14.12.2012, 14:37   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Код оформляется тегом форума CODE.

1) Что заставляет Вас подозревать, что в программе есть ошибка?
Abstraction вне форума Ответить с цитированием
Старый 14.12.2012, 14:41   #3
Mariolka
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 25
По умолчанию

Сам преподаватель сказал что в этой программе ошибка. и для того чтобы написать эту программу, надо сначала найти и исправить ошибку. Вот я не могу найти ее((
Mariolka вне форума Ответить с цитированием
Старый 14.12.2012, 14:50   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Зададим вопрос по-другому: Вы пробовали компилировать этот код?
И, кстати, откуда взялся код в первом сообщении - в смысле, Вы его набрали руками, или скопировали из исходного задания, или что-то третье?
Abstraction вне форума Ответить с цитированием
Старый 14.12.2012, 14:55   #5
Mariolka
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 25
По умолчанию

Компилятор выдавал только 1 строчку значений. а должна быть таблица где-то 4-6 строк. Это я скопировала из исходного задания.
Mariolka вне форума Ответить с цитированием
Старый 14.12.2012, 14:56   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Компилятор выдавал только 1 строчку значений.
То есть, данный код успешно скомпилировался? Не верю.
Abstraction вне форума Ответить с цитированием
Старый 15.12.2012, 11:11   #7
Mariolka
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 25
По умолчанию

Нет не этот код. Программа сама вот

Код:
#include "string.h"
#include "stdio.h"
#include "math.h"
main()
{
struct str {int x; int y;};
int a[5]={1, 2, 3, 4, 5};
int *p1, *p2;
struct str s = {0,0};
struct str *p3;
p1=&a[13%5+1]; //1 строка
p2=a+13/5+1;    //2 строка
p3=&s;             //3 строка
s.x=*p1;          //4 строка
s.y=*p2++;       //5 строка
*(p1-2)=s.y;     //6 строка
p3->x=p1[1];    //7 строка
p3->y=s.y;      //8 строка
a[5]=s.x;        //9 строка
}
И теперь я не знаю что писать в конце в "printf", чтобы компилятор выдавал таблицу с 5 столбцами. Пример таблицы вот такой

|__100__|_120_|_124_|_128 _|_132_|
|_a[5]__|_ p1__|_p2__|_s.x__|_s.y__|
|[12345]|_116__| ____|__0__|__0__| // 1stroka
|[12345]|_116__|_112_|__0__|__0__| //2stroka

И так должно быть 9 строк:
в 4 строке меняется s.x
в 5 строке меняется p2, и добавляется s.y
в 6 строке изменяется массив т.е. а
в 7 так как уже выходим за пределы массива меняется s.x
в 9 строке меняется значене p1.

Последний раз редактировалось ACE Valery; 15.12.2012 в 21:41.
Mariolka вне форума Ответить с цитированием
Старый 15.12.2012, 19:52   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Программный код оформляется тегом форума CODE. Пожалуйста, сделайте это.
1) Такой код вроде вполне корректен, разве что main() хорошо бы явно записать как int main(void). Он компилируется, выполняется и указанную в первом посте таблицу для него можно составить без всяких правок.
2)
Цитата:
И теперь я не знаю что писать в конце в "printf", чтобы компилятор выдавал таблицу с 5 столбцами.
Ничего. Если я правильно понимаю задание, таблицу Вы должны составить ручкой на бумаге, опираясь на описание языка C, а не на поведение конкретного компилятора.

Последний раз редактировалось Abstraction; 15.12.2012 в 19:59.
Abstraction вне форума Ответить с цитированием
Старый 15.12.2012, 20:09   #9
Mariolka
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 25
По умолчанию

Спасибо большое)) а то я тут гадала как же сделать))
Mariolka вне форума Ответить с цитированием
Старый 15.12.2012, 20:25   #10
Mariolka
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 25
По умолчанию

А какие могут быть причины, если компилятор отказывает в доступе. Даже другие программы компилирую, он отказывает(( раньше с этим не сталкивалась((
Mariolka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык программирования eImage Помощь студентам 6 14.09.2012 19:22
Язык программирования D pproger Общие вопросы по программированию, компьютерный форум 2 24.05.2012 05:01
Язык программирования С++ Jasper92 Свободное общение 2 09.11.2009 13:51
язык программирования Си Ruslan0990kz Общие вопросы C/C++ 1 03.06.2009 22:01