Сергей Юрьич,я слегка не в тему...но Вы не моги бы глянуть программку мою-у меня косячок в ней.. точнее-в ф-ии ввода не корректно работает scanf для текста.
http://ifolder.ru/1435352 - вот здесь программка....
Вопросы к Сергею Юрьевичу (по информатике)
Сообщений 1 страница 20 из 53
Поделиться12007-03-20 20:30:50
Поделиться22007-03-21 00:20:06
Кузя, чтоб всё работало, исправьте функцию vvod следующим образом:
void vvod(struct knigi *baz,int i)
{
char temp[2];
printf("vvedite nomer stranicy: ");
scanf("%d",&baz[i].nomer_stranicy);
printf("vvedite nomer stroki: ");
scanf("%d",&baz[i].nomer_stroki);
printf("vvedite tekst: ");
gets(temp);
gets(baz[i].text);
printf("vvedite datu:\n");
printf("den: ");
scanf("%d",&baz[i].dd);
printf("mesyac: ");
scanf("%d",&baz[i].mm);
printf("god: ");
scanf("%d",&baz[i].gg);
baz[i].flag=1;
}
Ваш вариант не работал, потому что scanf не умеет считывать текстовые строки, содержащие пробелы.
(Финт со строкой temp нужен, чтобы "погасить" перевод строки, оставшийся во входном буфере после ввода номера строки.)
Поделиться32007-03-21 20:48:02
Сергей Юрьич,СПАСИБО! :dance:
Поделиться42007-03-24 11:55:55
Сергей Юрьич,можно еще вопрос. Как не смешно у меня проблемы с ф-ией очистки! Короче после применения очистки,ввод данных выдает-нет свободных элементов.... :cool2:
Поделиться52007-03-24 13:33:25
Кузя, функция очистки у Вас работает правильно, а сообщение 'net svobodnyh' выдаётся вот почему:
когда база пуста, функция poisk_svobodnogo выдаёт 0, потому что нулевая запись - свободна.
То есть в качестве кода ошибки Вам надо использовать не 0, а, например, -1:
int poisk_svobodnogo(struct knigi *baz)
{
int i;
for(i=0;i<N;i++)
{
if(baz[i].flag==0)
return i;
}
return -1;
}
Ну и, соответственно, нужно изменить фрагмент кода,
из которого функция poisk_svobodnogo вызывается:
for(int i=0;i<N;i++)
{
sv=poisk_svobodnogo(baz);
if(sv!=-1)
...
P.S. Кстати, я нашёл ещё несколько ошибок в Вашем коде.
Все функции вида poisk_min_blah_blah_blah начинаются со строки:
int i,min=baz[0].blah_blah_blah,a=0;
Если нулевая запись свободна (baz[0].flag равно 0), то эта строчка будет работать неправильно!
Отредактировано Скоробогатов (2007-03-24 13:38:42)
Поделиться62007-03-25 11:46:57
хм...
а если так?
int poisk_min_stranicy(struct knigi *baz)
{
int i,j=0;
for(i=0;i<N;i++)
{
if(baz[i].flag==1)
{
j=i;
break;
}
}
int min=baz[j].nomer_stranicy,a=0;
for(i=j+1;i<N;i++)
{
if(baz[i].nomer_stranicy<min && baz[i].flag!=0)
{
min=baz[i].nomer_stranicy;
a=i;
}
}
return a;
}
Поделиться72007-03-25 15:45:15
Если так, то лучше, но если в базе все записи пустые, то функция будет возвращать 0.
Поделиться82007-04-06 22:26:06
Сергей Юрьич,у меня подскажите где у меня в алгоритме ошибка? :cray:
http://www.filemaster.ru/files/c0162
Отредактировано Кузя (2007-04-07 10:27:09)
Поделиться92007-04-07 12:10:47
Задаем вопросы по информатике к Скоробогатову С.Ю. здесь.
Поделиться102007-04-07 13:15:33
Тима,специально для меня? Как приятно! Одна я кажется мучаю СЮ постоянно на форуме с вопросами по прогам
Поделиться112007-04-07 13:47:52
Тима,специально для меня? Как приятно!
P.S.
Одна я кажется мучаю СЮ
СЮ - прям как Салават Юлаев
Поделиться122007-04-07 21:04:06
Сергей Юрьевич, я насчет домашней задачи, мне надо удалить из строки слова, из длин которых нельзя образовать последовательность Фибоначчи. Вот если у меня 3 слова длиной 1, мне все 3 слова копировать или одно все-таки удалять?
Поделиться132007-04-08 01:55:27
Вот если у меня 3 слова длиной 1, мне все 3 слова копировать или одно все-таки удалять?
Одно - удалять.
И если у Вас два или больше слов длиной 2 (или 3, или 5, или 8), то тоже лишние надо удалять.
Какие именно - сами решайте.
Поделиться142007-04-08 19:45:21
это не честно....
Отредактировано ProfRog (2007-04-08 19:46:18)
Поделиться152007-04-08 20:29:04
Если кто-то не купил книгу по информатике Кернигана и Ритчи,то вот ссылочка на её электронный вариант!
http://chaos.ssu.runnet.ru/cyr/KOI/book … atalog.htm
Поделиться162007-04-11 17:09:44
Сергей Юрьевич, можете по пунктам изложить процесс отладки программы...
Поделиться172007-04-11 20:23:28
Ой, а не могли бы Вы задать вопрос более конкретно?
Дело в том, что отладке (и тестированию) программного обеспечения посвящено огромное количество литературы, известна масса способов отлаживать программы, ещё большее количество способов неизвестно, и вот так просто изложить процесс отладки по пунктам мне представляется чрезвычайно непростой задачей
Поделиться182007-04-11 20:54:54
Ну то, что Вы мне показывали, с помощью breakpoint, по шагам смотреть, как работает программа, я наверное не в том порядке это делаю, на любом шаге переменные равны мусору(
Поделиться192007-04-16 16:09:54
Домашняя задача №20
Составить программу, осуществляющую ввод с клавиатуры двух предложений и формирующую новое предложение, в котором слова, взятые из введенных с клавиатуры предложений, чередуются. Считать, что слова разделяются пробелами. Если в одном из предложений слов больше, чем в другом, то лишние слова в результирующее предложение не попадают. Например, если пользователь вводит предложения "Alpha Beta Gamma" и "A B C D E", программа должна выводить на экран "Alpha A Beta B Gamma C".
#include "stdafx.h"
#include <string.h>
int max(int x, int y)
{
if(x>y || x==y)
return x;
else
return y;
}
int min(int x, int y)
{
if(x<y || x==y)
return x;
else
return y;
}
void f(char s[100],char d[100])
{
char rez[200];
int i=-1, j=-1, z=-1, k, n=0, m=0;
for(k=0;k<max(strlen(s),strlen(d));k++)
{
if(s[k]==' ')
n++;
if(d[k]==' ')
m++;
}
for(k=0;k<min(n,m)+1;k++)
{
do
rez[z++]=s[i++];
while(s[i]!=' ' || s[i+1]!=0);
if(s[i++] == 0)
rez[z++]=' ';
do
rez[z++]=d[j++];
while(d[j]!=' ' || d[j+1]!=0);
}
if(d[j++] == 0)
rez[z++]=0;
rez[z]=0;
printf(rez);
printf("\n");
}
int main(void)
{
char s[100], d[100];
printf("Vvedite 1 predlogenie:\n");
gets(s);
printf("Vvedite 2 predlogenie:\n");
gets(d);
f(s,d);
return 0;
}
Компилируется, но НЕ работает :cray:
Поделиться202007-04-16 18:34:53
Wombat, попробую посмотреть завтра.
Сегодня, увы, некогда